以下のコードの何が問題なのかわかりません。誰かが私にデバッグを手伝ってもらえますか?
module iloop(z,a);
input [31:0] a;
output z;
reg [4:0] i;
reg s, z;
initial begin
s = 0;
for(i=0; i<32; i=i+1) s = s | a[i];
z = !s;
end
endmodule
以下のコードの何が問題なのかわかりません。誰かが私にデバッグを手伝ってもらえますか?
module iloop(z,a);
input [31:0] a;
output z;
reg [4:0] i;
reg s, z;
initial begin
s = 0;
for(i=0; i<32; i=i+1) s = s | a[i];
z = !s;
end
endmodule
コードに無限ループがあります。i
5 ビットの reg として宣言しました。これは、その値の範囲が (10 進数) 0 から 31 であることを意味します。ただし、for ループi < 32
は常に true であるかどうかをチェックします。i=31 にi
なると、インクリメントされて 0 にロールオーバーされます。
$display
あなたの友達です。for ループに追加すると、問題が発生します。
for(i=0; i<32; i=i+1) begin $display(i); s = s | a[i]; end
欲しいと思いますi<31
。
a
または、ビットごとの OR 演算子を使用して、すべてのビットを一緒に OR したい場合があります。
s = |a;
何を達成しようとしているのかを言葉で説明する必要があります。