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

上の記述のリセットの種類と動作として正しいものはどれか。

always @(posedge clk or negedge rst_n)
    if (!rst_n) q <= 0;
    else        q <= d;
  1. A同期リセットで、rst_nが0の状態でクロックが立ち上がったときにだけqが0になる
  2. B非同期リセットで、rst_nが0になるとクロックを待たずにすぐqが0になる
  3. Crst_nが1になるとqが0になる
答えと解説を見る

正解:B. 非同期リセットで、rst_nが0になるとクロックを待たずにすぐqが0になる

センシティビティリストに「negedge rst_n」が含まれているので、rst_nが1から0に変わった瞬間にもブロックが実行され、クロックに関係なくqが0になります。これが非同期リセットです。名前の「_n」は0で有効になる負論理の信号を表す慣習です。クロックが止まっていてもリセットできる利点がありますが、リセットを解除するタイミングには注意が必要です。

  • A. リセットのエッジもきっかけになっているので、同期ではありません。
  • B. 正しい。センシティビティリストにリセットのエッジがあります。
  • C. _nは0のときに有効(負論理)という意味です。
この分野を解く 分野ページへ

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

  1. 同期リセットと非同期リセットの違いとして正しいものはどれか。
  2. 非同期リセットを使う回路で、リセットの解除(0から1への変化)を2段のフリップフロップでクロックに同期させてから各回路に配る理由として正しいものはどれか。
  3. HDLで書く状態機械(ステートマシン)の基本的な構成として正しいものはどれか。
  4. 上の状態機械の記述で、2つ目のalwaysブロックの先頭に「next = state;」を書いている理由として正しいものはどれか。
  5. ミーリ型の状態機械の特徴として正しいものはどれか。