13

verliog で条件付きでモジュールをインスタンス化することは可能ですか?

例 :

if (en==1)  
  then module1 instantiation  
else  
  module2 instantiation  
4

3 に答える 3

25

IEEE Std 1364-2001 から:

12.1.3.3 generate-conditional generate-conditional は、モジュール、ユーザー定義プリミティブ、Verilog ゲート プリミティブ、連続代入、初期ブロック、always ブロックを式に基づいて別のモジュールに条件付きでインスタンス化できるようにする if-else-if 生成構造です。これは、設計が精緻化された時点で決定論的です。

LRM で与えられた例:

module multiplier(a,b,product);
parameter a_width = 8, b_width = 8;
localparam product_width = a_width+b_width; // can not be modified
// directly with the defparam statement
// or the module instance statement #
input [a_width-1:0] a;
input [b_width-1:0] b;
output [product_width-1:0] product;

generate
    if((a_width < 8) || (b_width < 8))
        CLA_multiplier #(a_width,b_width) u1(a, b, product);
        // instantiate a CLA multiplier
    else
        WALLACE_multiplier #(a_width,b_width) u1(a, b, product);
        // instantiate a Wallace-tree multiplier
endgenerate
// The generated instance name is u1

endmodule
于 2013-03-07T06:41:07.623 に答える
4

次のようなコンパイラ指令を使用できます

`define FOO
`ifdef FOO
    module1 ...
`else
    module2 ...
`endif

コンパイル時にインスタンス化を選択します。

ワイヤ値に基づいてモジュールをインスタンス化できるかどうかを尋ねている場合、それはできません。

于 2013-03-06T06:47:01.963 に答える
4

その場で変更できないハードウェアを記述しているため、実行時にこれを行うことはできません。電力を節約する機能を有効または無効にすることはできますが、既存のものを停止させることはできません。ブロックの再利用または構成機能を改善しようとしているとします。

Tim が言及した ``defines` (ティック定義) と同様に、プリコンパイラ手法がよく使用されます。

それらは、テンプレート ファイルを解析する Perl、Ruby などのスクリプトで構成されます。

Ruby スクリプトとテンプレートを使用した以前の回答

于 2013-03-06T08:44:46.250 に答える