第四个参数call_pre_post,默认值为1,表示sequence在运行过程中会调用pre_body()和post_body()任务。 再来看uvm_do宏,展开之后最终还是调用的start函数。区别在于有两个参数设置,parent_sequence参数配置成了this,call_pre_post参数配置成了0。uvm_do更多...
在sequence中显示调用strat()函数,第一个参数是需要挂载的sequencer;第二个是parent_sequence,一般传入this或者不传入;第三个是优先级;第四个call_pre_post默认为1,则自动执行pre_body/ post_body()函数 执行pre_start,body等函数。此时就完成了sequence的启动过程。 在start()函数中,首先调用了函数set_item_conte...
第四个参数call_pre_post,默认值为1,表示sequence在运行过程中会调用pre_body()和post_body()任务。 再来看uvm_do宏,展开之后最终还是调用的start函数。区别在于有两个参数设置,parent_sequence参数配置成了this,call_pre_post参数配置成了0。uvm_do更多的是用在一个父sequence对子sequence的启动上:父sequence的do...
virtualtaskbody();repeat(10)begintr=new("tr");start_item(tr);finish_item(tr);endendtask 对transaction进行随机化的操作可放在实例化之后,finish_item之前的任意位置。start_item和finish_item都可以在调用时指定优先级。 了解了uvm_do宏实现的细节之后,为了增加uvm_do系列宏的灵活度,UVM提供了三个接口:pr...
如上图所示,在uvm_sequence中自建了相关的任务及函数,其中常用的为任务pre_body()、post_body()及body(); 特别注意:当使用uvm_do宏进行sequence启动时,无需写pre_body()及post_body(),因为uvm_do不会执行这两个任务。 sequence的启动: sequence启动方式有两种: ...
这样UVM就会自动把m_sequencer(sequence默认sequencer变量,为uvm_sequencer_base类型)转换为my_sequencer类型,这个过程在pre_body()之前就完成了。这样在sequence中可以直接使用成员变量p_sequencer,从而获取my_sequencer中设置的变量值。这个概念比较难理解,读者可以参考《UVM实战》6.4.4节,结合具体代码理解。
UVM中 test bench及其启动 uvm启动sequence的方法,start():sequence.strat(sequencer,parent_sequence,优先级),第一个参数是需要挂载的sequencer;第二个是parent_sequence,一般传入this或者不传入;第三个是优先级;第四个call_pre_post默认为1,则自动执行pre_body/
sequence启动后,开始执行内部定义的一个task——virtual task body(); 一般定义为virtual类型,方便重载。 还有两个回调函数pre_body(); post_body();来供用户配置。 其中在task body()中,定义的函数有:`uvm_create(m_trans)等价于m_trans=new("m_trans"); ...
第四个参数建议使用默认值, 这样的话 uvm_ sequence::pre _ body()和 uvm_sequence::post_ body()两个方***在 uvm_sequence::body()的前后执行。 在上面的例子中,child_seq 被嵌套到 top_seq 中, 继而在挂载时需要指定 parent_sequence; 而在 test 一层调用 top_seq 时, 由于它是 root sequence, ...
1.sequence没有出现在树形结构中,难以确定路径参数,可以通过setnull, ""设定全局scope,这样sequence在哪里都可以访问资源。注意:sequence没有phase,get可以放在pre_bodybodypre_randomizepre_start中,只要在调用reg_model之前get被调用即可。 # env top_reg_model m_regmodel; ...