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

上の4ビットのカウンタで、countが15のときにクロックが立ち上がると、countはいくつになるか。

reg [3:0] count;
always @(posedge clk)
    count <= count + 1;
  1. A16
  2. B0
  3. C15のまま変わらない
答えと解説を見る

正解:B. 0

4ビットのregは0〜15しか表せません。15(2進数で1111)に1を足すと10000になりますが、上位のビットは入りきらずに捨てられるので、countは0000、つまり0に戻ります。この性質を利用して、決まった数ごとに繰り返すカウンタを作れます。一方で、意図しないところで桁があふれると誤りの原因になるので、信号のビット幅には常に注意が必要です。

  • A. 4ビットの範囲は0〜15です。
  • B. 正しい。4ビットでは16を表せないので0に戻ります。
  • C. 足し算は行われ、あふれて0になります。
この分野を解く 分野ページへ

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

  1. Verilogで8ビットの信号aとbを足し、その結果を8ビットの信号sに代入した(assign s = a + b;)。注意すべき点として正しいものはどれか。
  2. aを符号付きの-1のつもりで上のように書いたところ、gtが1になった。理由として正しいものはどれか。
  3. Verilogのシミュレーションで使われる4値論理の値の組み合わせとして正しいものはどれか。
  4. シミュレーションで、リセットのないレジスタの値が最初Xになっていた。実際のチップではどうなると考えられるか。
  5. 上の記述で、selがX(不定)のとき、Verilogのシミュレーションではyにbが選ばれる。この性質が検証で問題になる理由として正しいものはどれか。