【問題4】 always文でカウンタを作ろう:完全マスター! 電子回路ドリル III(4)
Verilog HDLで記述したOR回路をFPGAボードで動作させたところ、なぜかANDで動作した……。その原因について詳しく解説する。
【問題3】の解答
前回の宿題【問題3】は、“OR回路(Verilog HDL)をFPGAボード「FPGAトレーナ EDX-002」で動作させたところANDで動作した。それはなぜか”という問題でした。皆さん解けましたでしょうか?
解けた方も解けなかった方も答え合わせをして、次項の解説までぜひ読んでみてください。毎週コツコツ問題を解いて、ハードウェア記述言語によるデジタル回路設計の基礎知識を身に付けましょう。
それでは、解答を発表します!
問題3
答え.スイッチ入力とLED出力が負論理であるため
【問題3】の解説
【問題3】は実際にFPGAボードで動作させるときに注意すること、すなわち「ハードウェアとHDLの接点」に関する問題です。この問題では、以下のVerilog HDLを「FPGAトレーナ EDX-002」で動作させます。その際の回路は図1のようになります。
module gateOR(A, B, X); input A, B; output X; wire A, B, X; assign X = A | B; endmodule
はじめに、スイッチ入力から考えてみましょう。
スイッチ入力回路の働きは、図2のようになります。
スイッチがOFFのときFPGAの端子に“1”が、スイッチがONのときFPGAの端子に“0”が入力されます。このように、スイッチのON/OFFと、その論理値が逆転しているため、このスイッチ入力回路は「負論理」です。
続いて、LED出力回路の働きはどうでしょうか。
その動作は「完全マスター! 電子回路ドリル」の【問題11】の解説で紹介したとおりです。LEDはFPGAの端子が“0”のとき点灯し、FPGAの端子が“1”のとき消灯する、すなわち「負論理」です。
これらをまとめると、Verilog HDLでは「正論理」を想定していたが、実際の入出力回路は「負論理」であったため、誤動作が起きていたという結論が導き出せます。
それでは、これを正しく動作させるには一体どのようにしたらよいのでしょうか? 実は答えは簡単で、入力と出力にNOTを設け、論理を逆転するだけでよいのです(図3)。
Verilog HDLでNOTはチルダ(“~”)で示します。以下のVerilog HDLで、きちんと動作するはずです。
module gateOR_neg(A, B, X); input A, B; output X; wire A, B, X; assign X =~(~ A | ~B); endmodule
次回までの宿題 ― 【問題4】
Copyright © ITmedia, Inc. All Rights Reserved.