web-dev-qa-db-ja.com

Verilogモジュールの条件付きインスタンス化

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

例:

if (en==1)  
  then module1 instantiation  
else  
  module2 instantiation  
12
vlsi2013

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
22
nav_jan

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

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

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

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

4
Tim

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

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

これらは、Perl、Ruby etcスクリプトで構成され、テンプレートファイルを解析します。

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

4
Morgan