2016-11-21 53 views
0

パラメータとポート配列(またはフラット化配列メソッド)を使用することのほかに、入力/出力ポートを動的に有効/無効にすることは可能ですか? 具体的には、以下のような単純なモジュールを指定すると、必要な場合のみ(B_EN = 1)、 B_IN、B_OUTを表示することは可能ですか?Verilogで入出力ポートを動的に宣言する方法(show/no show)

module WEIRD_MOD#(
parameter integer WIDTH_A=8, 
parameter integer B_EN=0, 
parameter integer WIDTH_B=13; 
) 
( 
    input [WIDTH_A-1:0] A_IN, 
    output [WIDTH_A-1:0] A_OUT, 

// ******************************// 
// only valid/show when B_EN =1 // 
// ******************************// 
//input  [WIDTH_B-1:0] B_IN, 
//output [WIDTH_B-1:0] B_OUT, 

); 

genvar idx_bit; 
generate 
    for(idx_bit=0; idx_bit<WIDTH_A; idx_bit= idx_bit+1) 
    begin 
     bit_inv inv_inst(.IN(A_OUT[idx_bit]),.OUT(A_OUT[idx_bit]));  
    end 

if(B_EN) 
begin 
     for(idx_bit=0; idx_bit<WIDTH_B; idx_bit= idx_bit+1) 
     begin 
     bit_buf buf_inst(.IN(B_OUT[idx_bit]),.OUT(B_OUT[idx_bit])); 
     end 
end 

endgenerate 

endmodule 

答えて

-1

あなたは、実行時にコンパイルを制御するための`ifdef`ifndefのようなプリプロセッサディレクティブを使用することができます。あなたはこのサイトを通じて行くことができる任意のさらなる参照について

http://www.asic-world.com/verilog/compiler1.html

+0

ifdef、ifndef –

+0

正しく入力できません。そのifif ifdefとtick ifndef –

1

いいえ、Verilogでは、パラメータを使用してポートまたはそのルートの数を変更することはできません。 `ifdef`defineのようなマクロを使用すると、すべてのインスタンスに対してのみマクロを変更できます。

B_ENを有効にすると、AポートとBポートの幅を1つのポートにまとめることができます。

module WEIRD_MOD#(
parameter integer WIDTH_A=8, 
parameter integer B_EN=0, 
parameter integer WIDTH_B=13; 
) 
( 
    input [WIDTH_A-1 + (B_EN ? WIDTH_B : 0) :0] AB_IN, 
    output [WIDTH_A-1 + (B_EN ? WIDTH_B : 0) :0] AB_OUT, 
); 

genvar idx_bit; 
generate 
    for(idx_bit=0; idx_bit<WIDTH_A; idx_bit= idx_bit+1) 
    begin 
     bit_inv inv_inst(.IN(A_OUT[idx_bit]),.OUT(A_OUT[idx_bit]));  
    end 

if(B_EN) 
begin 
     for(idx_bit=0; idx_bit<WIDTH_B; idx_bit= idx_bit+1) 
     begin 
     bit_buf buf_inst(.IN(B_OUT[idx_bit+WIDTH_A]),.OUT(B_OUT[idx_bit+WIDTH_A])); 
     end 
end 

endgenerate 

endmodule 
0

いいえ、できません。 VerilogはHDLなので、ソフトウェアではなくハードウェアを開発することです。また、ハードウェアの場合と同様に、ピン数を変えることはできません。同様に、Verilogでは可変ポートを使用できません。

defineまたはifdefのマクロを使用しても、それらはプリプロセッサディレクティブ であり、合成後は固定ポートのハードウェアが1つだけになります。

不要なポートは無視できますが、変数 ポートを持つことはできません。

関連する問題