我有通用序列生成序列项以实现算法。我需要在不同的测试平台中运行此序列,其中使用了不同的代理,如AXI或PCIe。 可能最好的实现是适配器,它获取通用项目并将它们转换为特定的代理项目,并在代理程序定序器上启动。 谢谢,
答案 0 :(得分:0)
您可以使用序列分层来处理此问题。
您可以生成一个新序列,该序列将在child_sequencer
上运行,但会从generic_sequencer
获取sequence_items,如下所示。
class child_seq extends uvm_sequence #(seq_item);
generic_sequencer p_seqr;
virtual task body ();
// Get Sequence Item from Parent Sequencer
p_seqr.get_next_item (trans);
// Conversion of Sequence Item from Parent to Protocol Specific
......
// To Start the Sequence Item on Child Sequencer
start_item (trans);
....
finish_item (trans);
// Item Done for Parent Sequencer
p_seqr.item_done();
endtask
endclass
现在,您的generic_sequencer
可能会显示为child_sequence
和child_sequencer
。
class generic_sequencer extends uvm_sequencer #(seq_item);
child_sequencer c_seqr;
child_seq c_seq;
virtual function void build_phase (uvm_phase phase);
c_seqr = child_sequencer::type_id::create ("c_seqr", this);
c_seq = child_seq::type_id::create ("c_seq", this);
endfunction
virtual function void connect_phase (uvm_phase phase);
c_seq.p_seqr = this;
endfunction
virutal task run_phase (uvm_phase phase);
// Start Child Sequnece on Child Sequencer
c_seq.start(c_seqr);
endtask
endclass
现在,您可以在generic_sequence
generic_sequencer
了