我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
第一个参数是 transaction的指针,第二个是sequencer 的指针,第三个是优先级,第四个是约束; 除了使用 uvm_do 宏产生 transaction ,还可以使用 uvm_create 宏与 uvm_send 宏来产生; 可以通过`uvm_do/`uvm_do_with来发送,无论是sequence还是item直接不进行区分。 3、sequence、sequencer、driver之间的通信 在多个...
然后,调用start_item以开始与sequencer的交互。此时,sequencer将停止执行序列,直到driver准备就绪为止。一旦driver准备就绪,sequencer将使用“start_item”返回。一旦start_item返回,则该序列已被授予使用driver的权限。start_item应该被真正称为“REQUEST_TO_SEND”。现在,该序列具有使用driver的权限,它可以使事务随机化,或...
uvm_do及uvm_send宏的最终实现均是依靠start_item和finish_item任务来实现。调这两个任务可指定优先级参数。 start_item里会调用wait_for_grant及parent_seq.pre_do任务。 finish_item里会调用mid_do,send_request,wait_for_item_down及post_do等 create_item(item) sequencer.wait_for_grant(prior) (task) \ ...
1.采用uvm_create & uvm_send宏 注1:`uvm_create与`uvm_send宏的第一个参数都可以是sequencer的指针,也可以是transaction的指针; (1)uvm_create/uvm_create_on调用uvm_sequence_base的create_item函数,并利用factory机制进行seq或seq_item的例化; (2)uvm_rand_send系列宏与uvm_send宏的区别在于前者包含了trans...
uvm_rand_send与uvm_send宏类似,唯一的区别是它会对transaction进行随机化。 这个宏使用的前提是transaction已经被分配了空间,换言之,即已经实例化。 第四种:使用start_item和finish_item,不使用宏 virtualtaskbody(); repeat(10)begin tr =new("tr");//实例化 ...
第一种:start启动 最简单粗暴的一种方式,只需要在某个component,如my_sequencer、my_env甚至base_test的main_phase中启动。 代码语言:javascript 复制 task fish_env::main_phase(uvm_phase phase);fish_sequence seq;//创建seq实例phase.raise_objection(this);seq=fish_sequence::type_id::create("seq");seq...
uvm_do系列宏:实例化transaction+将transaction交给sequencer(对应start_item与finish_item任务) uvm_create宏:实例化transaction,可用new代替 uvm_send宏:将transaction交给sequencer(对应start_item与finish_item任务) uvm_rand_send系列宏:对transaction进行随机化+将transaction交给sequencer(对应start_item与finish_item任务...
uvm_create是实例化transaetion, uvm_send 是把 transaction 发送出去。 uvm_rand_senduvm_rand_send_priuvm_rand_send_withuvm_rand_send_pri_with与 uvm_do 系列 macro 类彳以 start_item和finish_item上述macro的实际实现函数我觉得我们代码里应该不会用这两个函数。 taskpre_do(bitis_item) fun etio n...
2)当第一个是transaction 时,调用start_item 和finish_item。 3)当第一个是sequence 时,调用此sequence 的start 任务。 6.除了uvm_do 宏外,uvm_send宏,uvm_rand_send 宏,uvm_create 宏,第一个参数都可以是sequence 的指针,唯一例外是start_item 和finish_item,这两个任务参数必须是transaction 指针。