在UVM中启动sequence的方法主要有两种,一种是start的方法,一种是通过宏,比如`uvm_do。我们推荐在使用UVM的过程中尽量不要使用宏来启动sequence,而是使用start,因为使用宏的方法有一些意想不到的弊端,会给我们带来意想不到的惊喜,一旦出现问题,会给debug调试带来困难。下面我们讲解一下使用宏启动sequence有什么样的弊端。
在UVM中经常有一个顶层virtual sequence,通过顶层virtual sequence来调度各个子sequence的执行,我们这里使用分别宏的方法和start方法来调度子sequence,看看会有什么区别。先看使用宏的方式
class my_base_virtual_sequence extends uvm_sequence;
`uvm_object_utils(my_base_virtual_sequence)
`uvm_declare_p_sequencer(m_base_virtual_sequencer)
function new(string name);
super.new(name);
endfunction
virtual task pre_body();
`uvm_info(get_type_name(),"calling the pre_body",UVM_HIGH)
endtask
virtual task post_body();
`uvm_info(get_type_name(),"calling the post_body",UVM_HIGH)
endtask
virtual task body();
endtask
endclass
class my