-1

こんにちは、このコードを書くとき:

module memo(out1);

reg [3:0] mem [2:0]  ;

output wire [3:0] out1;


    initial
          begin
 mem[0][3:0]=4'b0000;

 mem[1][3:0]=4'b1000;

 mem[2][3:0]=4'b1010;
 end

 assign out1= mem[1];

endmodule

コードを合成できないようにする次の警告が表示されます

警告:Xst:1780 - シグナルmem<2>は使用も割り当てもされません。この接続されていない信号は、最適化プロセス中にトリミングされます。警告:Xst:653 - シグナルmem<1>が使用されていますが、割り当てられていません。このソースレス信号は自動的に値 1000 に接続されます。警告:Xst:1780 - 信号 >は使用または割り当てられません。この接続されていない信号は、最適化プロセス中にトリミングされます。

これらの警告が表示されるのはなぜですか? mem[0] 、mem[1] 、および mem[2] の値を割り当てていませんか!?? ご協力いただきありがとうございます!

4

1 に答える 1

0

モジュールには入力がなく、単一の出力 -- out1 があります。大規模なシステムに関してモジュールのポイントが何であるかは完全にはわかりませんが、基本的にmemを初期化していますが、mem [1]のみを使用しています。同様に、out1 を値 4'b1000 に割り当てるだけのモジュールを使用することもできます (mem は変更されません)。そうです-配列を初期化しましたが、使用しなかったためですザイリンクス ツールが合成中にモジュールを最適化し、「脂肪をトリミング」するその他の値。このモジュールを (modelsim で) シミュレートすると、初期化が問題なく行われることがわかります。あなたの警告に基づいて、コードが合成できないという結論に達した理由はわかりません。間違いなく合成できるように見えますが、4'b1000 に単一の値を割り当てるのはちょっと奇妙な方法です。

初期値の使用に関しては、ブロック RAM に値を格納すること (たとえば、ROM を作成すること) は問題ありません。私は問題なくそれを数回行いました。これの一般的な使用法は、ブロック RAM に係数を格納することです。係数は後で読み出されます。とにかく、このモジュールが書かれている方法では、メモリから何かを読み取る方法はありません。

于 2013-05-26T03:43:37.907 に答える