モジュールを条件付きでverilogにインスタンス化することは可能ですか?
例:
if (en==1)
then module1 instantiation
else
module2 instantiation
IEEE Std 1364-2001から:
12.1.3.3 generate-conditional generate-conditionalは、モジュール、ユーザー定義プリミティブ、Verilogゲートプリミティブ、連続割り当て、初期ブロック、および常にブロックを、式に基づいて別のモジュールに条件付きでインスタンス化できるようにする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 etcスクリプトで構成され、テンプレートファイルを解析します。