2016-06-24 8 views
0

別のモジュールでシーケンシャルカウンタブロックをインスタンス化したいと思います。これらは以下のモジュールです。これらのモジュールをsynopsysデザインビジョン環境で合成すると、次のエラーメッセージが表示されます。Verilogでシーケンシャルブロックをインスタンス化する方法

prob_calculator.sv:1:メモリprobへの不正な参照。 (VER-253)カウンタブロックの

module counter #(parameter m=16) (input en,input clk,input reset,output reg [m-1:0] out); 

always @(posedge clk) 
if(reset) begin 
    out <= 0; 
end 
else if (en) begin 
    out <= out+1; 
end 
endmodule 

インスタンス:

module prob_calculator #(parameter n=32,parameter m=6,parameter Ir=14) (input 
[n-1:0]b,input clk,input reset,output reg [m-1:0] prob [0:Ir-1]); 

genvar i; 
generate 
for (i=0;i<Ir;i=i+1) begin:x1 
counter #(.m(m)) count_blck(.en(1),.clk(clk),.reset(reset),.out(prob[i])); 
end 
endgenerate 
endmodule 

誰でもコードと間違っているものを指摘していただけますか?

答えて

1

Verilogは、ポートによる多次元アレイをサポートしていません。 SystemVerilogは多次元配列ポートをサポートしています。ただし、すべてのSystemVerilogシンセサイザーがこの機能をサポートしているわけではありません。

多次元ポート制約を回避する方法を説明する前に、proberegではなくwireと宣言する必要があります。 Verilogでは、現在のモジュール(サブモジュールまたは親モジュールではない)のプロシージャブロック(alwaysまたはinitial)によって変数が割り当てられている場合、変数はregとして宣言してください。そうでない場合はwireと宣言してください。 SystemVerilogでは、logicを使用することもでき、logicタイプをより自由に使用することができます。 regを使用するすべての場所と、wire(複数のドライブを持つwiresは除きます)を使用するほとんどの場所です。

proberegからwireに変更すると、シンセサイザーが幸せになることがありますが、おそらくそうではありません。

output wire [Ir*m-1:0] probのように、probを1つのベクトルにフラット化する方法もあります。その後、アウトとプローブの接続を新しいprobベクトルのスライスに変更します:.out(prob[i])から.out(prob[i*m +: m])Indexing vectors and arrays with +:を参照)。このアプローチはSystemVerilogとVerilog(IEEE1364-2001以上)で動作します。

module prob_calculator #(parameter n=32,parameter m=6,parameter Ir=14) (input 
[n-1:0]b,input clk,input reset,output wire [Ir*m-1:0] prob); 

    genvar i; 
    generate 
    for (i=0;i<Ir;i=i+1) begin:x1 
     counter #(.m(m)) count_blck(.en(1),.clk(clk),.reset(reset),.out(prob[i*m +: m])); 
    end 
    endgenerate 
endmodule

のSystemVerilogは、使用のような他の可能性を提供する多次元ポートは直接サポートされていない場合の周囲の作業として機能することができる(typedefは、structinterfacemodportパック)。シンセサイザーのマニュアルを参照し、SystemVerilogオプションが有効になっていることを確認し、サポートされていない機能を確認してください。 FYI


:SystemVerilogのとのあなたの答えのための[email protected](posedge clk)代わりの[email protected](posedge clk)

+0

感謝を使用することを再開。 'prob'変数を平坦化すると動作します。 私はあなたが言及した他の可能性について検討します。 – Snigdha203

関連する問題