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

上のVerilogの記述が論理合成で作る回路として正しいものはどれか。

always @(posedge clk)
    q <= d;
  1. AdとclkのAND回路
  2. Bクロックの立ち上がりでdを取り込むDフリップフロップ
  3. Cクロックが1の間ずっとdを通すラッチ
答えと解説を見る

正解:B. クロックの立ち上がりでdを取り込むDフリップフロップ

「always @(posedge clk)」は、クロックの立ち上がりの瞬間にだけ中の代入を行うという意味で、論理合成はこれをエッジで動くフリップフロップにします。qはクロックの立ち上がりのときのdの値を次の立ち上がりまで保ちます。同期式の回路では、ほとんどの記憶はこの形で書かれます。クロックのエッジではなくレベルで動くラッチとは区別が必要です。

  • A. クロックはエッジのきっかけとして使われ、ANDは作りません。
  • B. 正しい。posedgeは立ち上がりのエッジを表します。
  • C. エッジで動くので、ラッチではありません。
この分野を解く 分野ページへ

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

  1. Verilogのノンブロッキング代入(<=)の動作として正しいものはどれか。
  2. 上の記述で、クロックの立ち上がりの直前にa=0、b=1だった。立ち上がりの後のaとbの値はどうなるか。
  3. 2段のシフトレジスタのつもりで、上のようにブロッキング代入(=)で書いた。起こる問題として正しいものはどれか。
  4. Verilogで代入の種類を使い分けるときの一般的なガイドラインとして正しいものはどれか。
  5. Verilogで「always @(*)」と書く意味として正しいものはどれか。