verliog で条件付きでモジュールをインスタンス化することは可能ですか?
例 :
if (en==1)
then module1 instantiation
else
module2 instantiation
verliog で条件付きでモジュールをインスタンス化することは可能ですか?
例 :
if (en==1)
then module1 instantiation
else
module2 instantiation
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
次のようなコンパイラ指令を使用できます
`define FOO
`ifdef FOO
module1 ...
`else
module2 ...
`endif
コンパイル時にインスタンス化を選択します。
ワイヤ値に基づいてモジュールをインスタンス化できるかどうかを尋ねている場合、それはできません。
その場で変更できないハードウェアを記述しているため、実行時にこれを行うことはできません。電力を節約する機能を有効または無効にすることはできますが、既存のものを停止させることはできません。ブロックの再利用または構成機能を改善しようとしているとします。
Tim が言及した ``defines` (ティック定義) と同様に、プリコンパイラ手法がよく使用されます。
それらは、テンプレート ファイルを解析する Perl、Ruby などのスクリプトで構成されます。