ハードウェア記述言語と検証

aを符号付きの-1のつもりで上のように書いたところ、gtが1になった。理由として正しいものはどれか。

wire [7:0] a = 8'hFF;
wire gt = (a > 8'd1);
  1. Asignedと宣言していないので、aは符号なしの255として比べられたから
  2. BVerilogでは、比較の結果が必ず1になるから
  3. 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)です。
この分野を解く 分野ページへ

ハードウェア記述言語と検証のほかの問題

  1. Verilogのシミュレーションで使われる4値論理の値の組み合わせとして正しいものはどれか。
  2. シミュレーションで、リセットのないレジスタの値が最初Xになっていた。実際のチップではどうなると考えられるか。
  3. 上の記述で、selがX(不定)のとき、Verilogのシミュレーションではyにbが選ばれる。この性質が検証で問題になる理由として正しいものはどれか。
  4. HDLでZ(ハイインピーダンス)を出力するトライステートの記述について、一般的に正しいものはどれか。
  5. HDLの検証で使うテストベンチの説明として正しいものはどれか。