一、seq_item_port和seq_item_export seq_item_port和seq_item_export在agent的connect_phase中完成了连接。 my_drv.seq_item_port.connect(my_seqr.seq_item_export); 我们从seq_item_port入手。 seq_item_port是driver的成员变量。在uvm_driver.svh中的声明如下: uvm_seq_item_pull_port#(REQ, RSP) seq...
seq_item_port是uvm_driver中的成员变量。 seq_item_export是uvm_sequencer中的成员变量。 my_sequence向my_sequencer发送my_transaction: 前面提到, my_sequence中的`uvm_do不能做到自动连接my_sequencer并将my_trans直接传送给my_sequencer,所以需要额外启动连接,以在当前顶层my_env中手工启动为例(一般都是在顶层启...
driver的seq_item_port是uvm_seq_item_pull_port#(REQ,RSP)类型,是一种双向端口。 sequencer的seq_item_export是uvm_seq_item_pull_imp #(REQ, RSP, this_type)类型。 seq_item_port其包含了以下的内建方法 task get_next_item(output REQ) task try_next_item(output REQ) function void item_done(inpu...
1)在uvm_driver 中有变量seq_item_port: 2)在uvm_sequencer 中有变量seq_item_export: 在这两者中建立通道。 5.在my_agent中的connect 把两者连接到一起: function void my_agent::connect_phase(uvm_phase phase); super.connect_phase(phase); if (is_active == UVM_ACTIVE) begin drv.seq_item_port...
uvm_seq_item_pull_port #(REQ,RSP) seq_item_port; ... endclassclassuvm_sequencer#(typeREQ=uvm_sequence_item,typeRSP=REQ)extendsuvm_sequencer_para_base#(REQ,RSP); uvm_seq_item_pull_imp #(REQ,RSP) seq_item_export; ... endclass ...
uvm_analysis_export #(RSP) rsp_export(代表中间节点,因为sequencer里面有个rsp tlm fifo,export连接到内部的imp端口。没有req的端口,不会对request缓存) //连接 driver::seq_item_port.connect(sequencer::seq_item_export) driver::rsp_port.connect(sequencer::rsp_export) ...
(1)移除mailbox通信,转而使用uvm_driver::seq_item_port和uvm_sequencer::seq_item_export进行通信 (2)通过seq_item_port.get_next_item(req)拿到来自sequencer的req, 然后通过rsp.set_sequence_id(req.get_sequence_id())获取rsp的id, 最后通过seq_item_port.item_done(rsp)完成finish_item,并把rsp发送至...
如果不使用uvm_do宏,也可以直接使用start_item与finish_item的方式产生transaction。 sequencer负责协调sequence和driver的请求 sequencer和driver之间 将两者连接:drv.seq_item_port.connect(sqr.seq_item_export); 在driver中通过get_next_item任务来得到一个新的req,并且驱动它,驱动完成后调用item_done通知sequencer(完...
driver.seq_item_port.connect(sequencer.seq_item_export); end endfunction : connect 根据配置决定是否vif和driver、sequencer之间的连接 function void apb_master_agent::assign_vi(virtual apb_if vif); monitor.vif = vif; if (is_active == UVM_ACTIVE) begin ...
19、#(REQ, RSP, this_type)seq_item_export;而在上层的uvm_agent中有 virtual function voidconnect_phase(uvm_phase phase); drv.seq_item_port.connect(sqr.seq_item_export); endfunction这里drv跟sqr分别是例化的uvm_driveruvm_sequencer的名字,可以看到他们两个实质是通过这个tlm接口来传递item的。下面图大...