driver中的seq_item_port.item_done(),实际调用的是uvm_sequencer中的item_done函数。sequence通过wait_for_item_done和sequencer的item_done握手,通过成员变量m_wait_for_item_sequence/transaction_id判断。每个sequence, sequence中的每个transaction其ID都是唯一的。 如果item_done()传入rsp,调用put_response函数,与...
function new (string name, uvm_component parent); super.new(name, parent); seq_item_port = new("seq_item_port", this); rsp_port = new("rsp_port", this); seq_item_prod_if = seq_item_port; endfunction // new const static string type_name = "uvm_driver #(REQ,RSP)"; virtual ...
A、agent中完成driver和sequencer的连接:my_drv.seq_item_port.connect(my_seqr.seq_item_export); B、driver中调用seq_item_port的函数获取下个item、进行相应驱动后,结束当前item: 1、seq_item_port.get_next_item(req); 2、向总线上驱动该item; 3、seq_item_port.item_done; C、sequence中可以重新定义pr...
seq_item_port.get_next_item(req); `uvm_info(get_type_name(), "sequencer got next item", UVM_HIGH) drive_transfer(req); void'($cast(rsp, req.clone())); rsp.set_sequence_id(req.get_sequence_id()); seq_item_port.item_done(rsp); `uvm_info(get_type_name(), "sequencer item_do...
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);
req是传递进来的transaction item seq_item_port - squencer和driver的接口,可以调用方法 seq_item_port.get_next_item(req) - 获取传入的transaction item seq_item_port.item_done() - 表示传递过来的transaction item已经处理完了,此时会告诉sequence已经处理完了,可以通过sequence产生下一笔数据 sequence中的body...
在driver的run_phase阶段,利用TLM端口seq_item_port的get_next_item()和item_done()方法控制数据包的传输; 2.1.宏`uvm_do( )的功能 当一个sequence启动后,会自动执行sequence中的body任务,在body任务中可以调用`uvm_do系列宏来生产数据。
type_id::create("drv", this);27 end28 mon = my_monitor::type_id::create("mon", this);29 endfunction 30 31 function void my_agent::connect_phase(uvm_phase phase);32 super.connect_phase(phase);33 if(is_active == UVM_ACTIVE)begin34 drv.seq_item_port.connect(sqr.seq_item_export)...
用UVM 搭建一个简单的测试环境, 整体环境的框架如下图。首先sequence 产生sequence_tem(也就是数据包),然后发送给sequencer, sequencer 通过seq_item_export 和driver 的seq_item_port 进行数据的传输。 然后driver按照协议要求把数据通过interface 发送给DUT, 同时driver 也会通过uvm_analysis_port把数据发送给scoreboar...
当driver中使用seq_item_port.get_next_item主动请求一个item(transaction)时,sequencer会要求sequence产生一个item(transaction);产生完成后,sequence就要等待driver把item(transaction)取走,这需要driver显示调用seq_item_port.item_done()。当此函数被调用后,finish_item才会返回,一个transaction的产生才真正的完成。