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...
virtual task wait_for_item_done(int transaction_id = -1); if (m_sequencer == null) begin uvm_report_fatal("WAITITEMDONE", "Null m_sequencer reference", UVM_NONE); end m_sequencer.wait_for_item_done(this, transaction_id); endtask 所以想要弄清楚uvm_sequence_base中定义的这些方法,需要结...
1.create_item 产生seq_item(factory) 2.wait_for_grant向sqr发出request,和等sqr的grant; sqr返回grant给seq 3.random seq_item ,然后send_request把seq_item 发给sqr.这个过程不消耗仿真时间,然后seq进入wait_for_item_done()的阻塞性等待状态,直到获取drv的response。 sqr的REQ FIFO会把seq_item转给drv。 dr...
通过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,直接...
wait_for_item_doneA sequence may optionally call wait_for_item_done. Response API use_response_handlerWhen called with enable set to 1, responses will be sent to the response handler. get_use_response_handlerReturns the state of the use_response_handler bit. ...
1.create_item() / create req. 2.wait_for_grant(). 3.randomize the req. 4.send the req. 5.wait for item done. 6.get response. * Step 5 and 6 are optional. seq driver communication without response stage Method CallDescription create_item() req = **_seq_item::type_id::create(...
item在start_item之后,因为挂载在了sequencer的上面,所以会通过句柄调用sequencer的send_request和wait_for_item_done函数,同时这两个又会去调用driver的函数,连接起来。 (3)sequencer(参数化类):负责调度sequence与driver之间的传输。 没有指明传输的transaction类型的话,缺省就是uvm_sequence_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...
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系列的宏。还可以 ...
pool[key] = item; endfunction virtual function int num (); return pool.num(); endfunction ... ... ... endclass uvm_event_pool uvm_object_string_pool的KEY是string类型。 uvm_event_pool由uvm_object_string_pool #(uvm_event)声明,KEY是string类型,T是uvm_event类型。 uvm_event是sv中event...