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

Verilogで8ビットの信号aとbを足し、その結果を8ビットの信号sに代入した(assign s = a + b;)。注意すべき点として正しいものはどれか。

  1. A8ビットどうしの足し算は、Verilogでは書けない
  2. B結果は自動で16ビットに広げられる
  3. C和が255を超えると9ビット目の桁上がりが捨てられるので、桁上がりが必要ならsを9ビットにする
答えと解説を見る

正解:C. 和が255を超えると9ビット目の桁上がりが捨てられるので、桁上がりが必要ならsを9ビットにする

8ビットどうしの和は最大で255+255=510になり、表すには9ビットが必要です。代入先のsが8ビットだと、上位の桁上がりは黙って捨てられ、例えば200+100は44になってしまいます。桁上がりも使いたいときは、sを9ビットで宣言します。Verilogは幅の違う信号の代入をエラーにせず切り詰めたり広げたりするので、Lintツールで幅の不一致を調べるのが有効です。

  • A. 普通に書けます。
  • B. 代入先が8ビットなら8ビットに切り詰められます。
  • C. 正しい。代入先の幅で結果が切り詰められます。
この分野を解く 分野ページへ

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

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