在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_test_sequence extends my_base_virtual_sequence;
`uvm_object_utils(my_test_sequence)
function new(

本文讨论了在UVM中启动sequence时,为何应避免使用`uvm_do等宏。宏可能导致预处理和后处理函数如pre_body()和post_body()不被执行,从而在debug时带来困难。建议使用start方法以确保基类方法的正确调用,并理解宏启动sequence的底层机制。
最低0.47元/天 解锁文章
212

被折叠的 条评论
为什么被折叠?



