一、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...
自定义的driver和sequencer中构造函数new中调用super.new()可以分别完成seq_item_port好seq_item_export的创建。 get_next_item_called src/seq/uvm_sequencer.svh中的源代码 get_next_item这个的task里使用了get_next_item_called这个变量,212-214行显示调用get_next_item的时候get_next_item_called一定为0,否则...
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_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 ...
uvm_driver 类包含一个 uvm_seq_item_pull_port,它和sequencer中的 uvm_seq_item_pull_export。port和export类是sequence_items 类型参数化的。一旦建立了port和export连接,driver代码就可以使用export中实现的API从sequence中获取请求 sequence_items 并将rsp返回给它们。
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 ...
如果不使用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的。下面图大...