一、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) se...
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 driver在new函数中将seq_item_port(图中step[1])实例化,UVM Sequencer也在new函数中将seq_item_export(图中step[2])实例化,在seq_item_export实例化的过程中还会把其所属的uvm_sequencer的句柄赋给其内部成员变量m_imp存储起来; 随后,在UVM agent中driver通过调用seq_item_port的connect方法即jb_drvr...
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) ...
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 ...
像port等其实是调imp所在component的task/function.我看UVM源代码里有一个uvm_seq_item_pull_port的class,它的基类是uvm_port_base. 在uvm_driver的成员seq_item_port就是这个类型的。 与它对应的是uvm_seq_item_pull_imp,uvm_sequencer的成员seq_item_export就是这种类型。在my_agent.sv中会connect它们。4.2...
如果不使用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(完...
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的。下面图大...