后面三个参数都使用缺省值,除非我们需要用到parent_sequence,甚至其中的pre_do/mid_do/post_do方法,或者说在同一个sequencer上同时启动多个存在优先级关系的sequence,再或者我们需要手动的关闭对应sequence中的pre_body()和post_body()的执行。
uvm_do_on宏第一参数是sequence。uvm_do_on_pri_with宏中调用宏uvm_create_on。 create_item通过工厂模式创建sequence实例 调用set_item_context()函数,给成员变量m_sequencer, m_parent_sequence赋值,参考上节分析。此处parent_sequence默认是this。 调用sequence的start函数,流程和上节一样,最后调用body()函数。
了解了uvm_do宏实现的细节之后,为了增加uvm_do系列宏的灵活度,UVM提供了三个接口:pre_do,mid_do与post_do。 pre_do是一个任务,在start_item中被调用,是start_item返回前执行的最后一行代码,在它执行完成后才开始对transaction进行随机化。pre_do有一个1bit参数,用于表明uvm_do是对一个transaction还是一个sequen...
sequence.strat(sequencer,parent_sequence,优先级) ,第一个参数是需要挂载的sequencer;第二个是parent_sequence,一般传入this或者不传入;第三个是优先级;第四个call_pre_post默认为1,则自动执行pre_body/ post_body()函数 start 执行 pre_start,body等函数。此时就完成了sequence的启动过程。 所有sequence都要在seq...
在一个sequence的body中,除了可以使用uvm_do产生transaction外,还可以启动其他的sequence,这就是sequence的嵌套。嵌套的方式也非常简单,直接在新的sequence的body任务中调用定义好的sequence即可,如下所示: virtual task body();SEQ0 seq0;\定义化seq0SEQ1 seq1;\定义化seq1repeat(10) begin`uvm_do(seq0);`uvm...
Sequence的uvm_do 当一个sequence启动后会自动执行sequence的body任务。其实,除了body外,还会自动调用sequence的pre_body与post_body: 4class my_sequence extends uvm_sequence #(my_transaction);5my_transaction m_trans;67function new(string name= "my_sequence");8super.new(name);9endfunction1011virtual tas...
Sequence的uvm_do 当一个sequence启动后会自动执行sequence的body任务。其实,除了body外,还会自动调用sequence的pre_body与post_body: <pre class="code-snippet__js" data-lang="properties">``` <span class="code-snippet_outer"><span class="code-snippet__attr">4</span> <span class="code-snippet__...
再来看uvm_do宏,展开之后最终还是调用的start函数。区别在于有两个参数设置,parent_sequence参数配置成了this,call_pre_post参数配置成了0。uvm_do更多的是用在一个父sequence对子sequence的启动上:父sequence的do函数会被执行,同时不需要执行子sequence的pre...
再来看uvm_do宏,展开之后最终还是调用的start函数。区别在于有两个参数设置,parent_sequence参数配置成了this,call_pre_post参数配置成了0。uvm_do更多的是用在一个父sequence对子sequence的启动上:父sequence的do函数会被执行,同时不需要执行子sequence的pre_body()和post_body()。
UVM Sequence基础、uvm_do宏 Sequence的uvm_do 当一个sequence启动后会自动执行sequence的body任务。其实,除了body外,还会自动调用sequence的pre_body与post_body: 4class my_sequence extends uvm_sequence #(my_transaction);5my_transaction m_trans;67function new(string name= "my_sequence");8super.new(name...