在agent的connect_phase里
drvr.seq_item_port.connect(seqr.seq_item_export);
drvr的run_phase里
forever begin
seq_item_port.get_next_item(req);
...
...
...
seq_item_port.item_done();
end
uvm_driver中有一个派生自uvm_seq_item_pull_port的成员 seq_item_port;
uvm_sequencer中有一个派生自uvm_seq_item_pull_imp的成员seq_item_export。
如果不想使用自带的成员变量,也可以自行在drvr中定义uvm_seq_item_pull_port #(REQ, RSP)等类型的变量,此外与Sequencer中的export的连接方式和上面相同。
Driver和Sequencer之间的连接和对应关系体现在两个TLM端口的connect上。多个Driver不能和一个Sequencer连接,多个Sequencer也不能和一个Driver连接,也就是说Driver和Sequencer是一对一的关系;更准确的说,是一个seq_item_port只会connect一个seq_item_export,我们可以在一个Driver中用数组的形式定义多个uvm_seq_item_pull_port,用来连接多个Sequencer(一个seqr对应一个uvm_seq_item_pull_imp),在agent里例化多个seq和seqr(数组形式),然后在connect_phase里连接drvr和seqr。
网友评论