关于transaction的匹配和p_sequencer理解
1.transaction匹配
首先,一个sequence只能产生一种transaction,相应地,其搭载的sequencer必须是能够传递这种transaction,最终流向能够接收这种transaction的driver。
class transaction1 extends uvm_sequence_item;
..
endclass
class transaction2 extends uvm_sequence_item;
..
endclass
class sequence1 extends uvm_sequence#(transaction1); //指定sequence1产生transaction1类型数据
transaction1 tr1;
task body();
,,
endtask
endclass
class sequence2 extends uvm_sequence#(transaction2); //指定sequence2产生transaction2类型数据
transaction2 tr2;
task body();
..
endtask
endclass
class base_sequencer extends uvm_sequencer#(transaction1),此时base_sequencer只能传递transaction1类型数据
class base_driver extends uvm_driver#(transaction2),此时base_driver只能传递transaction2类型数据
要想sequence1和sequence2能够同时产生transaction1和transaction2类型数据,base_sequencer能够同时传递sequence1和sequence2中的数据类型,且base_driver能够同时接收,则需要修改代码如下
class sequence1 extends uvm_sequence#(uvm_sequence_item);
class sequence2 extends uvm_sequence#(uvm_sequence_item);
class base_sequencer extends uvm_sequencer#(uvm_sequence_item);
class