1,每个sequence都有一个body任务。当一个sequence启动后,会自动执行sequence的body任务,所以在sequence的class中,一定要有一个名为body的task。
此外,如果一个sequence中,还有pre_body与post_body,则这两个task,会分别在body的task前面与后面执行。
2,sequence的源码中,没有build_phase,所以,不要在sequence中使用build_phase。但是记得,sequencer中可以有build_phase。
3,当完成一个sequence的定义后,可以使用start任务将其启动。
4,sequence有几个重要的宏,如uvm_do,uvm_create,uvm_send,start_item,finish_item等。
5,注意,sequence派生自uvm_object,sequencer派生自uvm_component,sequencer的作用,是调度其中的sequence在driver之间进行传输。
6,一个sequence应该使用uvm_object_utils宏注册到factory中去。
7,virtual sequence的引入,主要是为了解决sequence之间的控制和调度,他一般不发送transaction,他只控制其他的sequence,起到统一调度的作用。
8,注意,sequence item 与sequence是有区别的,要关注这一点。
sequence 主要是要实现其body任务,用来产生sequence item并将其发送给driver,扩展自如下基类:xxx_seuqence extends uvm_sequence 或者uvm_sequence_base;
sequence item主要用来产生两个components之间的读写操作,流通在uvm_component组件直接,进行通信。它扩展的基类如下: xxx_seq_item extends uvm_sequence_item;
9,用户定义的所有的transaction,都必须从uvm_sequence_item类来派生。transaction就是封装了各种协议接口的事务模型,而uvm_sequence_item,相对于transaction,增加了很多使用的成员变量和函数/任务。