1

以下のコードの何が問題なのかわかりません。誰かが私にデバッグを手伝ってもらえますか?

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
4

1 に答える 1

8

コードに無限ループがあります。i5 ビットの 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;

何を達成しようとしているのかを言葉で説明する必要があります。

于 2010-01-20T19:52:48.063 に答える