0

Verilog初心者です。このコードを実行して、別のモジュールのインスタンスにあるレジスタに値を格納しようとしていました。ここに 2 つのモジュールがあります。

module main;
reg [15:0] A;
wire [15:0] B;
initial
begin
    A = 16'h1212;
end
copy a(B,A);
endmodule  

module copy(B,A);
input [15:0] A;
output reg [15:0] B;
initial
   B=A;
endmodule

コードは正常にコンパイルされますが、実行時に B の値は「不明」です。そのような割り当てが不可能な場合、モジュール インスタンス (入力からそのインスタンスへの入力) のレジスタに値を割り当てる他の方法はありますか?

ModelSim Altera Web Edition 6.3 を使用しています

4

1 に答える 1

5

copyモジュールで、次を変更します。

initial 
   B=A;

に:

assign B = A;

initialステートメントは、シミュレーションの開始時に 1 回だけ評価され、通常は合成できませんが、一部の FPGA ツールではそれらを尊重する場合があります。

あなたが望むのは、継続的な割り当てですassign

これで、B が期待値になるポイントにたどり着くはずです。ただし、これは実際のハードウェア レジスタを割り当てているという意味ではありません。

編集:コピーモジュールregの宣言の一部も削除する必要があります。タイプoutout reg [15:0] Bに連続代入を配置することはできません。reg

編集:コメントで質問に答えるには、を割り当てたい場合は、入力に敏感なブロックregなどの手続き型ブロックで行う必要があります。always

always @(A) begin
  B = A;   // B is declared as a reg
end

B がreg型として宣言されているからといって、それが物理レジスタであるとは限りません。 ここに示す 2 つの例は同等であり、どちらも組み合わせロジックを記述しています。本当にフリップフロップが必要な場合は、クロックを追加する必要があります。

于 2013-01-21T17:34:22.807 に答える