2017-02-22 8 views
0

アルゴリズムを実装するためにシーケンスアイテムを生成する汎用シーケンスがあります。 AXIやPCIeのようなさまざまなエージェントが使われているさまざまなテストベンチでこのシーケンスを実行する方法が必要です。 おそらく最も良い実装は、一般的な項目を取得して特定のエージェント項目に変換し、エージェントシーケンサーで開始するアダプタでしょう。 ありがとう、異なるバスドライバを使用するシーケンスのアダプタ

+0

してください[編集] [これまでにあなたが持っているコード]を表示するには、あなたの質問( http://whathaveyoutried.com)。問題を抱えているコードのアウトライン(ただし、好ましくは[mcve])を含める必要があります。次に、特定の問題を解決することができます。 [ask]も読んでください。 –

答えて

0

この問題を処理するには、シーケンスレイヤーを使用できます。

child_sequencerで実行される新しいシーケンスを生成することはできますが、以下のようにsequence_itemsをgeneric_sequencerから取得します。

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_sequencerchild_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_sequencer

関連する問題