【問題4】 always文でカウンタを作ろう完全マスター! 電子回路ドリル III(4)

Verilog HDLで記述したOR回路をFPGAボードで動作させたところ、なぜかANDで動作した……。その原因について詳しく解説する。

» 2008年09月25日 00時00分 公開
[横田一弘 埼玉県立新座総合技術高等学校 教諭,@IT MONOist]

【問題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

【問題3】のハードウェア構成 図1 【問題3】のハードウェア構成

 はじめに、スイッチ入力から考えてみましょう。

 スイッチ入力回路の働きは、図2のようになります。

スイッチ入力回路の働き 図2 スイッチ入力回路の働き

 スイッチがOFFのときFPGAの端子に“1”が、スイッチがONのときFPGAの端子に“0”が入力されます。このように、スイッチのON/OFFと、その論理値が逆転しているため、このスイッチ入力回路は「負論理」です。

 続いて、LED出力回路の働きはどうでしょうか。

 その動作は「完全マスター! 電子回路ドリル」の【問題11】の解説で紹介したとおりです。LEDはFPGAの端子が“0”のとき点灯し、FPGAの端子が“1”のとき消灯する、すなわち「負論理」です。

 これらをまとめると、Verilog HDLでは「正論理」を想定していたが、実際の入出力回路は「負論理」であったため、誤動作が起きていたという結論が導き出せます。

 それでは、これを正しく動作させるには一体どのようにしたらよいのでしょうか? 実は答えは簡単で、入力と出力にNOTを設け、論理を逆転するだけでよいのです(図3)。

負論理の入出力を反転する回路 図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】

問題4

以下の4ビットカウンタをVerilog HDLで作ってください

問題4

答え. 解答はこちら(←クリック)



Copyright © ITmedia, Inc. All Rights Reserved.