sequence启动则会运行其内的pre_body、body和post_body任务
1.可以用uvm_do宏启动事务,实现对事务实例的创建,随机化,并且送给sequencer。属于高度自动化。
2.使用start_item和finish_item的方式产生事务。比较自主可控
3.seq句柄通过start方法指定seqr启动。seq.start(env.agt.seqr,parent,number)
4.config_db的default_sequence的方法。等于是调用start
5.uvm_do_with宏,可指定约束来启动。
6.uvm_do_pri宏,指定启动优先级。uvm_do_on宏指定启动在哪个seqr上
7.设置优先级,env.agt.seqr.set_arbitration(x)
x=SEQ_ARB_FIFO/WEIGHTED/RANDOM/STRICT_FIFO/STRICT_FIFO/USER
8.start和uvm_do的不同在于前者使用对象是sequence,后者对transaction。
9.lock();和unlock()函数可以把seqr锁住只让两函数中间的seq运行。
10.grab()是立刻拿到权限,lock()是当前完成才拿到权限
11.重载is_relevant函数使某个seq失效,放弃权限。与grab和lock的抢权限的行为相反。
12.is_relevant和wait_for_relevant成对出现。前者让seq失效,后者让seq有效。
13.uvm_do可以改成uvm_create+约束+uvm_send或者实例化+uvm_send/uvm_rand_send
14.实例化tr+start_item(tr) finish_item(tr)
15.pre_do -> start_item
mid_do+post_do -> finish_item
start_item + finish_item = uvm_do