ハードウェア記述言語と検証
aを符号付きの-1のつもりで上のように書いたところ、gtが1になった。理由として正しいものはどれか。
wire [7:0] a = 8'hFF;
wire gt = (a > 8'd1);
- Asignedと宣言していないので、aは符号なしの255として比べられたから
- BVerilogでは、比較の結果が必ず1になるから
- C8'hFFは0と同じ値だから
答えと解説を見る
正解:A. signedと宣言していないので、aは符号なしの255として比べられたから
Verilogの信号は、signedを付けない限り符号なしとして扱われるので、8'hFFは255で、255 > 1は真になります。aとbの両方を「wire signed [7:0]」のように宣言すれば、2の補数の-1として比べられ、結果は0になります。式の中に1つでも符号なしの値があると全体が符号なしで計算される決まりもあるので、符号付きの計算では、すべての値の型をそろえることが大切です。
- A. 正しい。符号付きで扱うにはsignedの宣言が必要です。
- B. 比較は条件によって0にも1にもなります。
- C. 8'hFFは255(符号付きなら-1)です。