uvm_sequence_base parent_sequence =null,intthis_priority = -1,bitcall_pre_post =1); 第一个参数必须设置,其他的都有默认值,当parent_seq中的一个函数调用seq.start()时这个sequence将会进入body()方法中,执行的顺序如下: seq.pre_start(); seq.pre_body();// 如果参数call_pre_post==1parent_seq....
第一种:start启动 最简单粗暴的一种方式,只需要在某个component,如my_sequencer、my_env甚至base_test的main_phase中启动。 task fish_env::main_phase(uvm_phase phase); fish_sequence seq;//创建seq实例phase.raise_objection(this); seq = fish_sequence::type_id::create("seq"); seq.start(fish_agt....
start_item finish_item 上节提到使用uvm_do宏启动sequence,如果宏传入的第一个参数不是uvm_sequence_base类型,就是我们的transaction, 则调用start_item, finish_item函数。 start_item()三个参数,第一个是传入的transaction, 第二个是优先级,第三个是指定该transaction发送给哪一个sequencer, transaction挂载在哪一...
在上述代码中,使用了uvm_do宏。uvm_do宏的第一个参数可以是transaction的指针,此时其调用start_item和finish_item;该参数也可以是sequence的指针,此时其调用该sequence的start任务。除了uvm_do外,前述介绍的uvm_send,uvm_rand_send,uvm_create宏等,其第一个参数均可以是sequence的指针。 与transaction类似,sequence中...
uvm_sequence::start_item中第三个参数需要用户注意是否将item和parent sequence挂载到不同的sequencer上面去。 使用item挂载到sequencer上的方法,需要创建item,还需要完成item的随机化,创建的方法;uvm_object::create()或者uvm_sequence::creat_item() 2.3 发送序列相关宏 ...
二、sequence的启动方式——start()/default_sequence UVM中sequence的启动分为显示启动和隐式启动两种方式。 显式启动(直接启动)——调用start()方法启动。 隐式启动 ——使用uvm_config_db机制配置default_sequence启动。 //sequence的显式启动//该方法提起和落下objection,通过phase.raise_objection(this)/...
我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
start()如何执行uvm_sequence 描述 要使用start()启动一个sequence,就必须要指定相应的sequencer句柄,另外的几个选项一般用不上。其中 parent_sequence是父类sequene句柄 this_priority默认为1,或者父类sequence的priority call_pre_post指定需不需要指定pre_body()和post_body()任务...
再来看uvm_do宏,展开之后最终还是调用的start函数。区别在于有两个参数设置,parent_sequence参数配置成了this,call_pre_post参数配置成了0。uvm_do更多的是用在一个父sequence对子sequence的启动上:父sequence的do函数会被执行,同时不需要执行子sequence的pre_body()和post_body()。
5)如果不使用uvm_do 宏,可以直接使用start_item 与finish_item 产生transaction。 3.sequencer过程 1)一个sequence 再向sequencer发送请求前,要先向sequencer发送一个请求(只是个请求,不是真的transaction),sequencer把这个请求放在一个仲裁队列中。 2)sequencer做两件事:1)检验队列是否有sequence发送transaction的请求;...