顺序适配器使用不同的总线驱动程序

时间:2017-02-22 20:55:56

标签: uvm

我有通用序列生成序列项以实现算法。我需要在不同的测试平台中运行此序列,其中使用了不同的代理,如AXI或PCIe。 可能最好的实现是适配器,它获取通用项目并将它们转换为特定的代理项目,并在代理程序定序器上启动。 谢谢,

1 个答案:

答案 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_sequencechild_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