1、 uvm_do 和uvm_send、uvm_create 的区别?(start_item与uvm_send有何区别联系?)
uvm_do的功能主要是先创建一个transaction的实例,再将其随机化,最终将其送给sequencer。uvm_do宏封装了从transaction实例化到发送的一系列操作,封装的越多,则其灵活性越差。为了增加uvm_do系列宏的功能,UVM提供了三个接口:pre_do、mid_do与post_do。
uvm_do_with除了有uvm_do的功能外,还可以在随机化时提供对某些字段的约束。
uvm_do_on_pri_with,它有四个参数。第一个参数是transaction的指针,第二个是sequencer的指针,当在sequence中使用uvm_do等宏时,其默认的sequencer就是此sequence启动时为其指定的sequencer,sequence将这个sequencer的指针放在其成员变量m_sequencer中。第三个是优先级,第四个是约束。
uvm_do系列的其他七个宏其实都是用uvm_do_on_pri_with宏来实现的。
uvm_create宏的作用是实例化transaction。当一个transaction被实例化后,可以对其做更多的处理,处理完毕后使用uvm_send宏发送出去。这种使用方式比uvm_do系列宏更加灵活,也完全可以不使用uvm_create宏,而直接调用new进行实例化。uvm_send_pri宏还可以在将transaction交给sequencer时设定优先级。
uvm_rand_send宏与uvm_send宏类似,唯一的区别是它会对transaction进行随机化。这个宏使用的前提是transaction已