seqr和drvr的连接

在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。