ハードウェア記述言語と検証
Verilogで「always @(*)」と書く意味として正しいものはどれか。
- Aクロックの立ち上がりのたびに実行されるフリップフロップを表す
- Bシミュレーションの最初に一度だけ実行される
- Cブロックの中で読んでいる信号のどれかが変わるたびに実行される、組み合わせ回路を表す
答えと解説を見る
正解:C. ブロックの中で読んでいる信号のどれかが変わるたびに実行される、組み合わせ回路を表す
alwaysの後の@( )の中はセンシティビティリストと呼ばれ、どの信号が変わったときにブロックを実行するかを指定します。「*」と書くと、ブロックの中で読んでいるすべての信号が自動で並んだことになり、組み合わせ回路を正しく表せます。手で並べると書き漏れが起きやすいので、組み合わせ回路には「@(*)」やSystemVerilogのalways_combを使うのが安全です。
- A. クロックのエッジを指定するのはposedgeなどです。
- B. 一度だけ実行されるのはinitialです。
- C. 正しい。読んでいる信号をすべて自動で並べたのと同じです。