アフィリエイト広告
アフィリエイト広告

74HC161A / イネーブル付き 10進カウンタをつくる

4bit 同期バイナリカウンタ 74HC161A のカウンタ動作が確認できたので、今回は、イネーブル付きの 10進カウンタをつくってみようと思います。

74HC161A / 4bit 同期バイナリカウンタIC を使ってみる
図1. 74HC161A(SOP16)+変換基板 74HC161A は 4bit 同期カウンタ IC、バイナリ出力のアップカウント動作を行ないます。同期プリセット付、非同期クリアタイプで、同期型カスケード接続のためのイネーブル入力とキャリー...

イネーブル付き 10進カウンタを構成する

74HC161A で10進カウンタを構成する考え方は、これまで学んできたこと (過去記事) と同じです。むしろフリップフロップで構成するより簡単。出力が 9 になったら 0 をロードしてやればいい。ただし、これまで同様に、カウンタをリセットするなどという荒業はしません。74HC161A にはプリセットデータを同期ロードする機能 (LD) があるのですから、それを利用します。

組み合わせ回路を構成する

出力 Q が 0x9 になったら、プリセットデータ PRE=0x0 をロード LD する。それだけなので、論理式は、

LD = QD⋅QA

10進カウンタの回路を VerilogHDL で記述します。前回記述した 74HC161A を下位モジュール接続し、ENP は HIGH、プリセットデータ PRE は 0x0 としました。

10進カウンタ回路記述
  1. module COUNTER_MOD10 (
  2.   input wire CK, CLR, ENT,
  3.   output wire [3:0] Q
  4. );
  5.   assign LD = ~(Q[3] & Q[0]);
  6.   TC74HC161A U1(CK, CLR, LD, ENT, 1'b1, 4'h0, Q, CO);
  7. endmodule

下位カウンタ (4進) から ENT が送られてきているとして、シミュレーションしてみたのが図1 です。

図1. 10進カウンタのシミュレーション

出力は、たしかに 9 の次が 0 になっていますが、うーん、なんだか変ですねぇ。LD が ENT より優先なので、ENT に関係なく 0x0 をロードしてしまっています。これはうまくありません。
また、出力が 0xf にならないのでキャリー信号 CO が出力されません。

そこで、ロードの条件に ENT を加えてみます。同時に、組み合わせ回路からキャリー信号 CAR を出力するようにしました。

CAR = ENT⋅QD⋅QA
LD = CAR
イネーブル付き 10進カウンタ回路記述
  1. module COUNTER_MOD10 (
  2.   input wire CK, CLR, ENT,
  3.   output wire [3:0] Q,
  4.   output wire CAR
  5. );
  6.   assign CAR = ENT & Q[3] & Q[0];
  7.   assign LD = ~CAR;
  8.   TC74HC161A U1(CK, CLR, LD, ENT, 1'b1, 4'h0, Q, CO);
  9. endmodule

これをシミュレーションしたのが図2 です。

図2. イネーブル付き 10進カウンタのシミュレーション

ENT で制御された 10進カウンタになりました。キャリー信号もでています。

出力が 0x9 に遷移したときに、/LD と CAR に細いパルス (ハザード) がでています。これは、CK が入って Q が 0x9 に遷移してから ENT が LOW になるまでの遅延によるものです。シミュレーションでは ENT の遅延時間を 1sec としているために目立ってますが、実際の回路では 10ns 程度のノイズでした。動作には影響がないと思うので、特に対策はしていません。

最下位のカウンタとして利用する場合の、ENT を HIGH にしたときのシミュレーションもしておきましょう。(図3)

図3. ENT が HIGH の場合のシミュレーション

普通に 10進カウンタとなることが確認できました。

回路図

図4. イネーブル付き 10進カウンタ 回路図

ということで、つくった回路が図4 です。そうむずかしくない回路なので、先に回路をつくっちゃって、それをシミュレーションしてみた、んですケド (^_^;)

74HC00 (NAND) 1個でつくるために論理式を変形していますが、解説するほどのことではないですね。
/RESET は HIGH にしてください。電源オン時に遅延して立ち上げるのがおすすめです。

ちなみに、ゲートに入れる出力を n に変更すれば n進カウンタにできます。
たとえば QA と QC ならば 6進カウンタになります。それを 10進カウンタとつなげれば 60進カウンタ。デジタル時計の秒・分カウンタに使えますね。

後記

10進カウンタなら BCD出力の 74HC160 や 74HC162 を使えばいいんじゃね?

そのとおりだと思います、手に入るのなら。でも、74HC160 で 16進カウンタはできないので、いろいろ試してみたい俺は、秋月電子通商にあった 74HC161A を買いました。

とゆーことで。次は、60進カウンタにしてみましょうか。

タイトルとURLをコピーしました