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

同期カウンタ (Dフリップフロップ使用 2進~10進)

Dフリップフロップを使ったカウンタ回路をつくってみました。

11進~16進同期カウンタは、続きの記事を参照ください。

JKフリップフロップを使ったカウンタ回路は下記を参照ください。

2進~10進同期カウンタ

Dフリップフロップを使用した 2進~10進同期バイナリアップカウンタの回路例です。

  1. 2進カウンタ
  2. 3進カウンタ
  3. 4進カウンタ
  4. 5進カウンタ
  5. 6進カウンタ
  6. 7進カウンタ
  7. 8進カウンタ
  8. 9進カウンタ
  9. 10進カウンタ

フリップフロップとかカウンタとか真理値表とかカルノー図とか、基本的なことは教科書みるか、グーグル先生に尋ねてください。なお、シミュレーションは、verilogHDL によって論理式について行なっており、回路図と連動していません。回路はじっさいに製作しておらず、動作を確認していません。

2進カウンタ

Dフリップフロップを使った 2進カウンタの真理値表

2進カウンタです。
というか、クロックが入るたびに出力がトグルするだけの回路。これを並べると非同期カウンタ (リプルカウンタ) になるけれど、ここでは扱いません。

Dフリップフロップを使った 2進カウンタの回路図
2進カウンタ回路図

出力 Q を入力 D にもどすことで Tフリップフロップになる、基本的な回路です。偶数の n進カウンタは LSB が 1 と 0 の交互になるから、初段は必ずこの回路になります。

シミュレーション結果は、Tフリップフロップの出力そのものです。

Dフリップフロップを使った 2進カウンタのシミュレーション波形
2進カウンタ シミュレーション

3進カウンタ

Dフリップフロップを使った 3進カウンタの真理値表

Dフリップフロップの場合、次の出力の状態 Qn+1 はそのまま D の入力値になる。
現在の出力が 00 ならば、次の状態は 01 になるから、入力は 01。さらにその次の出力は 10 だから、入力も 10。3進カウンタなので、出力 10 の次は 00 にもどし、出力 11 は don’t care にする。
そうやって真理値表を埋めていきます。

真理値表をじっと眺めていると、D1 は Q0 と等しい、D0 は Q1 と Q0 の NOR だと見えてきます。見えるでしょ? don’t care は、0 でも 1 でも、都合のよいようにする。ここでは、D1 は 1 に、D0 は 0 と考えればそうなります。

Dフリップフロップを使った 3進カウンタの回路図
3進カウンタ回路図

論理式より、Q1 と Q0 を NOR して D0 につなぐ、という回路ができる。D1 は Q0 に等しいのだから、そのままつなげばよろしい。

シミュレーション結果は、ちゃんとワルツしてます。

Dフリップフロップを使った 3進カウンタのシミュレーション波形
3進カウンタ シミュレーション

4進カウンタ

Dフリップフロップを使った 4進カウンタの真理値表

3進カウンタと同様に、真理値表をじっと眺めると、見えてきます。主加法標準形とかでもいいかもです。カルノー図をつくるほどではない。

D1 は排他的論理和 XOR ですね。入力が同じなら 0、異なっていれば 1 を出力する。
D0 は Q0 を NOT する。偶数のカウンタだから、初段は Q0 を D0 にもどす Tフリップフロップになるんです。

Dフリップフロップを使った 4進カウンタの回路図
4進カウンタ回路図

この回路は、ネットでもみつけることができます。でも、少ないんですよ、Dフリップフロップ使用のカウンタ回路例って。
みなさん、JK がお好きなようで (;´Д`)

シミュレーション結果は、なんとなくバイナリカウンタらしくなってきました。

Dフリップフロップを使った 4進カウンタのシミュレーション波形
4進カウンタ シミュレーション

5進カウンタ

Dフリップフロップを使った 5進カウンタの真理値表

5進カウンタから 3ビットになり、Dフリップフロップが 1つ増えます。

これまで同様に、真理値表を眺めているといろいろ見えてきますけど、考えている間にカルノー図書けちゃうので、カルノー図で論理式を求めました。

Dフリップフロップを使った 5進カウンタのカルノー図

Dフリップフロップを使うカウンタ回路では、排他的論理和 XOR がよくでてきます。XOR を使うと、Dフリップフロップを JKフリップフロップのように動作させることができるので、組み合わせ回路が簡単になるんです。
このことについては、8進カウンタの項に書きます。

D0 は、AND でも NOR でも、どちらでもいいです。ここでは、反転出力 Q を使わなくてもいいので、NOR にしました。

シミュレーションは、ん〜、♫ Take Five

Dフリップフロップを使った 5進カウンタの回路図
5進カウンタ回路図
Dフリップフロップを使った 5進カウンタのシミュレーション波形
5進カウンタ シミュレーション

6進カウンタ

Dフリップフロップを使った 6進カウンタの真理値表
Dフリップフロップを使った 6進カウンタのカルノー図

6進カウンタ。これと 10進カウンタをつなぐと 60進カウンタになります。デジタル時計の製作 (参考記事) で、さんざんやりましたねぇ。

D2 はセレクタです。Q0 が 1 ならば Q1 を、0 ならば Q2 を出力する。

D1 は、左のカルノー図がふつうのやり方です。が、あえて don’t care を 0 と考えて、下のようにしました。

Dフリップフロップを使った 5進カウンタのカルノー図

こうすることで、XOR で構成できます。どっちがいいかはお好みですが、Dフリップフロップには XOR がお似合いじゃないかしら。

D0 は、考えるまでもなく Tフリップフロップで決まりです。

Dフリップフロップを使った 6進カウンタの回路図
6進カウンタ回路図
Dフリップフロップを使った 6進カウンタのシミュレーション波形
6進カウンタ シミュレーション

7進カウンタ

Dフリップフロップを使った 7進カウンタの真理値表
Dフリップフロップを使った 7進カウンタのカルノー図

ラッキー7 とかいいますが、カウンタ回路としては複雑になってきます。なんだか面倒くさいやつ。

D2 はセレクタです。これ以上無理する必要ないです。

D1 は、なんだか XOR にできそうですけど、逆に複雑になってしまいます。おとなしく 3入力 AND を使いましょう。

D0 も、奇数 n進なので面倒くさい。
Q2Q0 を D1 と共通で使うって手もあるんですけど、D0 のゲートが増えるので、全体としては変わらんです。

うまい方法があったら、教えてくださいませ。

Dフリップフロップを使った 7進カウンタの回路図
7進カウンタ回路図
Dフリップフロップを使った 7進カウンタのシミュレーション波形
7進カウンタ シミュレーション

8進カウンタ

Dフリップフロップを使った 8進カウンタの真理値表
Dフリップフロップを使った 8進カウンタのカルノー図

8進カウンタ。23 できりがいいせいか、回路はちょっと簡単になります。

4進カウンタでもそうですけど、JKフリップフロップでつくった回路 (参考記事) に、XOR をプラスした形になっています。どちらも、JKフリップフロップの J と K をつないでいるところに注目してください。

出力 Q を XOR の片方の入力にもどし、もう一方を入力 J とします。こうすると、J に 1 が入るとクロックのたびに Q が反転し、0 のときは Q は前の状態を維持し変化しない、という動きをします。

DフリップフロップをJKフリップフロップにする

これは、JKフリップフロップの J と K をつないだときの動作と同じなので、Dフリップフロップへの置き換えができます。

Dフリップフロップを使った 8進カウンタの回路図
8進カウンタ回路図
Dフリップフロップを使った 8進カウンタのシミュレーション波形
8進カウンタ シミュレーション

9進カウンタ

Dフリップフロップを使った 9進カウンタの真理値表

9進カウンタから、フリップフロップがさらに増えて 4ビットになります。
真理値表も大きくなってきますが、don’t care が多いので、まだ楽かな。大きくても、やることはこれまでとかわりありません。

Q1⋅Q0 を D3 と D2 で共用しています。もちろん、3入力 AND でもいいです。

Dフリップフロップを使った 9進カウンタのカルノー図 1

Dフリップフロップを使った 9進カウンタのカルノー図 2
Dフリップフロップを使った 9進カウンタの回路図
9進カウンタ回路図
Dフリップフロップを使った 9進カウンタのシミュレーション波形
9進カウンタ シミュレーション

10進カウンタ

Dフリップフロップを使った 10進カウンタの真理値表

BCDで出力するために必要になる 10進カウンタです。これもデジタル時計の製作 (参考記事) で、さんざんやりました。

やることに、なんらかわりはありません。せっせとカルノー図書いていくだけです。あ〜、勉強ですから、自分で鉛筆持ってやるんですよ。

Dフリップフロップを使った 10進カウンタのカルノー図 1

Dフリップフロップを使った 10進カウンタのカルノー図 2
Dフリップフロップを使った 10進カウンタの回路図
10進カウンタ回路図
Dフリップフロップを使った 10進カウンタのシミュレーション波形
10進カウンタ シミュレーション

ちなみに、加算器を使って 10進アップダウン・カウンタをつくったことがあります。あわせてご覧ください。

後記

カウンタ回路の勉強をしはじめた頃から、おりにふれ参考にさせていただいたサイトがありました。そこには、フリップフロップの動作から真理値表の作り方、論理式の求め方、カルノー図の書き方などなど、とても詳しく解説されていて、たくさんのカウンタ回路例があり、それぞれ動作のシミュレーションが示されていました。
最初はわからないことだらけでしたが、グーグル先生にも教えてもらいながら、だんだん理解できるようになっていきました。俺のカウンタ回路作成のバイブルのようなサイトでした。

が、いつからか、アクセスしようとすると 404エラーに。検索しても見つからなくなりました。

そんなサイトを、俺は自分でつくることはとてもできません。でも、そこで学んだこと、たくさんのグーグル先生に教えてもらった知識で、そこにあったようなたくさんのカウンタ回路例をつくってみたかった。

今回は、Dフリップフロップを使った同期カウンタ、2進~10進のバイナリアップカウンタをつくってみました。
冒頭に書いたように、verilogHDL によるシミュレーションは、論理式が正しいかどうかの確認をしているだけで、回路図には連動していません。じっさいに回路をつくっていませんので、回路図に間違いや不具合があるかもしれません。内容については保証できませんので、あしからず。
なお、間違いをみつけたら、こっそり直しておきます (;´Д`)

さて、ここまできたのですからもうひとふんばり。Dフリップフロップを使った 11進~16進カウンタもつくっておきたいと考えています。いつになるかわかりません。途中挫折もあり、です。

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