我们在sequence中往driver发包时,最常用的方法就是使用uvm_do()系列宏,偶尔会使用方法start_item()和finish_item()的组合,极个别场景下会 使用`uvm_create()和`uvm_send()宏,极极个别场景下还会看到create_item()方法的使用,这些宏和方法有什么区别,各自使用场景有什么局限和注意事项,他们分别定义在了UVM源代码...
3.random seq_item ,然后send_request把seq_item 发给sqr.这个过程不消耗仿真时间,然后seq进入wait_for_item_done()的阻塞性等待状态,直到获取drv的response。 sqr的REQ FIFO会把seq_item转给drv。 drv使用get_next_item 非阻塞的获取seq_item.转成virtual interface时序 4. drv返回response(item_done)给sqr; sq...
sequence通过wait_for_item_done和sequencer的item_done握手,通过成员变量m_wait_for_item_sequence/transaction_id判断。每个sequence, sequence中的每个transaction其ID都是唯一的。 如果item_done()传入rsp,调用put_response函数,与sequence中的get_response配合使用。 start_item/finish_item封装函数以及sequence,sequencer...
通过finish_item(),在对item进行了随机化处理之后,执行parentsequence的mid_do(),以及调用uvm_sequencer::send_request()和uvm_sequencer::wait_for_item_done()来将item发送至sequencer再完成与driver之间的握手。最后,执行了parent_sequence的post_do()。 从上面可以看出其实也可以不用start_item和finish_item,直接...
sequencer中有wait_for_grant()被启动 sequencer执行begin_tr(req),开始数据传输,数据传输给driver driver在run_phaze的时候执行get_next_item(req) - 获取到数据之后继续向下执行 driver执行完成之后,会执行item_done(),返回给sequencer中的finish_item(req)中的wait_for_item_done(),然后就执行完成了一次传输 seq...
在wait_for_relevant任务中,user一定要清除sequence的无效状态。否则系统会进入死循环。 2.5 sequence里的宏及start/finish_item任务 1.uvm_do 相关宏 在sequence的body中使用uvm_do系列宏,可以自动完成transaction的创建,随机化和发送。 uvm_do系列宏对transaction和sequence都能支持。
function voiditem_done(input RSP rsp_arg = null):通知sequence item已经消化完毕,也可以选择性传递response taskwait_for_sequences():等待当前的sequence直到产生下一个item。和2配合起来就是1的作用 function bithas_do_available():如果当前的sequence准备好且可以获取下一个item则返回1,否则0 ...
item之所以必须要依赖于sequence,是因为在执行finish_item的时候,用到了sequencer的方法,只有item通过sequence,拿到sequence挂载的sequencer的句柄,才能调用它的方法send_request(item)和wait_for_item_done() 。 发送item和sequence相关的宏: 上面为UVM宏定义,每个宏所对应要做的事情,打x的为要做。uvm_create(item) ...
seq_item wait_for_item_done start_sequence OVM_REPORT_ ovm_seq_prod_if ovm_seq_cons_if ovm_seq_item_prod_if ovm_seq_item_cons_if ovm_virtual_sequencer ovm_scenario check_connection_size do_display absolute_lookup relative_lookup find_component ...
sequencer.wait_for_item_done(); this.post_do(); 这些是UVM内部定义的一个task body内应该有的几个部分,但是一般可以直接new+自己的randomized+`uvm_send来完成。 wait_for_grant和pre_do又可以组成一个start_item的宏,剩下四部分还能组成finish_item的宏。整个还可以组成uvm_do系列的宏。还可以 ...