ハードウェア記述言語と検証
上のVerilogの記述が論理合成で作る回路として正しいものはどれか。
always @(posedge clk)
q <= d;
- AdとclkのAND回路
- Bクロックの立ち上がりでdを取り込むDフリップフロップ
- Cクロックが1の間ずっとdを通すラッチ
答えと解説を見る
正解:B. クロックの立ち上がりでdを取り込むDフリップフロップ
「always @(posedge clk)」は、クロックの立ち上がりの瞬間にだけ中の代入を行うという意味で、論理合成はこれをエッジで動くフリップフロップにします。qはクロックの立ち上がりのときのdの値を次の立ち上がりまで保ちます。同期式の回路では、ほとんどの記憶はこの形で書かれます。クロックのエッジではなくレベルで動くラッチとは区別が必要です。
- A. クロックはエッジのきっかけとして使われ、ANDは作りません。
- B. 正しい。posedgeは立ち上がりのエッジを表します。
- C. エッジで動くので、ラッチではありません。