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

问题描述:

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

+0

请[编辑]你的问题,以显示[你有这么远的代码( http://whathaveyoutried.com)。你至少应该包括一个你遇到问题的代码大纲(但最好是[mcve]),然后我们可以尝试帮助解决具体问题。你还应该阅读[问]。 –

您可以使用序列分层来处理此问题。

您可以生成一个新的序列,该序列将在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_sequencegeneric_sequencer