2017-02-27 19 views
1

クロック入力を持つパラメータ化されたインターフェイスがあります。例:SystemVerilog異なるパラメータを持つインターフェイス配列

interface itf # (PARAM1 = 16, PARAM2 = 8)(input logic clk); 

このインターフェイスには「スレーブ」というモデムがあります。

私のモジュールは、このインタフェースの配列を入力(modport "スレーブ")として受け取ります。 MyModuleためのテストベンチモジュールにおいて

module MyModule #(NB_ITFS = 4)(... itf.slave itfs[NB_ITFS]...); 

、IはNB_ITFSの異なる値をテストすることができる汎用コードを希望。

質問:要素のパラメータが異なることを考慮して、MyModuleインスタンシエーションのインターフェイスを作成する方法はありますか。

例えば、私が生成する声明を使用してみました:

module testbench() 
... 
generate 
    genvar i; 
    for (i = 0; i < NB_ITFS; i++) 
    begin : interfaces 
     itf #(.PARAM1(PARAM1_TABLE[i]), 
       .PARAM2(PARAM2_TABLE[i])) itf_inst (.clk(clk)); 
    end 
endgenerate 
... 
endmodule 

をしかし、(私は「スレーブ」modportを選択したい場合や.slave)この場合には、インタフェースの配列がinterfaces[xxx].itf_instあるとのインスタンス化MyModuleinterfaces[NB_ITFS].itf_inst.slaveを使用するとエラーが発生します。

また、私は成功せずに試してみました: - 一般的な定義itf itf_inst[NB_ITFS] (.clk(clk));と生成ブロック 内defparamを使用してパラメータを変更しようとした - 「仮想インターフェイス」機能

任意の提案を?別のインターフェイス内でごgenerateを置くことについての

答えて

0

方法:

interface itfa #(NB_ITFS = 4)(input logic clk); 
    ... 
    generate 
    genvar i; 
    for (i = 0; i < 4; i++) 
    begin : interfaces 
     itf #(.PARAM1(i), 
      .PARAM2(i)) itf_inst (.clk(clk)); 
    end 
    endgenerate 
    ... 
endinterface 

、その後MyModuleへのインタフェースとしてこと使用:

module MyModule #(NB_ITFS = 4)(itfa itfs); 
    ... 
endmodule 

次にあなたが外部インターフェイス(itfa)をインスタンス化し、それを接続することができます通常の方法でMyModuleのインスタンスに変更します。

module testbench; 
    ... 
    logic clk; 
    ... 
    itfa #(4) itfa_inst (.clk(clk)); 
    ... 
    MyModule #(4) MyModule0 (.itfs(itfa_inst)); 
    ... 
endmodule 

https://www.edaplayground.com/x/254C

+0

私はこの解決策に同意します。 – Robby

+0

また、itfaにはまだmodifを実装する考えはありますか? itf_inst "slave" modportsの配列であるitfa用の "スレーブ" modportを作成したいと思います... – Robby

関連する問題