前回は D フリップフロップを試してみました。
今回は、JKフリップフロップをみてみたいと思います。が、そのまえにちょっと、RS フリップフロップについて、もう一度おさらいしましょう。
JKフリップフロップを使ったカウンタについては、以下の記事をご覧ください。
RS フリップフロップ (RS ラッチ)
呼び方は「RS ラッチ」に、今後はしようと思います。
図 1 の上側、これまで実験してきた NAND で構成した RS ラッチの回路です。
下側は、それを図記号にしたもの。中身はどうであれ、機能としてRSラッチの動作をします。回路がだんだん複雑になってくるので、この記号も使うことにします。
基本ラッチ回路
Qn | S | R | Q |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | X |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | X |
さて、ちょっと難しい話、します (;´Д`)
図 2 が RS ラッチの真理値表。Qn は現在の出力の状態、S、R は入力、Q は次の出力の状態です。S=R=1 は don’t care とします。
この真理値表から、カルノー図を作ります。
と、論理式は
Q = S + R・Qn
この式を論理回路にすると、図 4 になる。これが、基本となるラッチ回路。これを、あ〜してこ〜してこ〜変換すると、図 1 の RS ラッチ回路になります。途中省略 m(_ _;)m
かなりすっ飛ばしてるけど、これが考え方の基本です。
JKフリップフロップ
さて、JKフリップフロップです。
JKフリップフロップは、RS ラッチで禁止されていた S=R=1 を可とするフリップフロップです。このとき出力はトグル、つまり “0” ならば “1” に、”1″ ならば “0” にすることとします。
Qn | J | K | Q | S | R |
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 1 |
図 5 が真理値表です。
Qn は現在の出力の状態、J、K は入力、Q は次の出力の状態です。S と R は、Q の出力を得るための RS ラッチの入力です。
JKフリップフロップは、基本となる RS ラッチの入力に付加回路をつけて構成しますので、S、R になにを入力するか、を考えます。
まず、主加法標準形により S=1 のときをみると、
S = Qn・J・K + Qn・J・K = Qn・J
同様に R=1 では、
R = Qn・J・K + Qn・J・K = Qn・K
ってことで、これを論理回路にすると、図 6 のようになります。
なるほどね、互いの反転した出力を、インターロックとして帰還させるわけだ。
たとえば Q=0 のとき、J=K=1 となっても、R=0 のまま、と。いや、でも、S=1 になって Q=1 になると R=1 になるぞ。
(;´Д`) あれれ?
回路の動作
回路の動作を確認してみましょう。
- J=0、K=0、Q=0、Q=1 のとき、J=1 になると、S=1、Q=1 となる。が、同時に Q=0 になるので S=0 に戻る。S=1 になるのは、回路の遅延時間の一瞬だけだが、Q=1、Q=0 で保持。
- J=0、K=0、Q=1、Q=0 のとき、J=1 となっても、S=0 のまま。Q、Q は保持。
- J=0、K=0、Q=1、Q=0 のとき、K=1 になると、R=1、Q=1 となるが、Q=0 になるので R=0 に戻る。
- J=0、K=0、Q=0、Q=1 のとき、K=1 となっても、R=0 のまま。Q、Q は保持
- J=1、K=1、Q=0、Q=1 のとき、S=1、R=0、Q=1、Q=0 となる。と、S=0、R=1、Q=0、Q=1 となる。また、S=1、R=0、Q=1、Q=0 となって、これを繰り返す。つまり、発振する。
発振するってことは、Q がトグルしている、ってことか? いやぁ、それ、違うよね。
実験回路では、Q=1、Q=1 となります。スイッチをすばやくオンオフすると、ときどき発振することもありました。
これは、押しボタンを押したとき、すぐに出力が帰還されてしまうのが問題のようです。だから、プライマリ・レプリカ型にして、入力をプライマリでラッチして、次のタイミングでレプリカが出力、これを入力に帰還させればよさそうです。
よさそうです、なんて言ってますが、そうするんですよ、とグーグル先生に教えてもらったんです。JKフリップフロップをバイステーブル (二安定) で動作させるには、プライマリ・レプリカ型にするんだよ、と (^_^;)
プライマリ・レプリカ型 JKフリップフロップ
プライマリ・レプリカ型については、すでに試してみています。同じように、JKフリップフロップをプライマリとレプリカの 2 段構成として、動作タイミングを分ける、ようにします。
図 7 が、構成したプライマリ・レプリカ型 JKフリップフロップです。
CLK | J | K | Q | Q |
0 | X | X | Qn | Qn |
↓ | X | X | Qn | Qn |
↑ | 0 | 0 | Qn | Qn |
↑ | 0 | 1 | 0 | 1 |
↑ | 1 | 0 | 1 | 0 |
↑ | 1 | 1 | Qn | Qn |
図 8 が真理値表です。
クロックが “0” のとき、プライマリが開きますが、レプリカは閉じていますので、出力は変化しません。クロックの立ち下がりで、プライマリ出力がラッチされます。
クロックが “1” のとき、プライマリは閉じ、レプリカが開きます。
クロックの立ち上がりで、レプリカがプライマリの出力を入力します。プライマリ出力は保持されていますので、クロックの立ち上がりに同期して出力が変化することになります。
実験回路
実際に組み立ててみたプライマリ・レプリカ型 JKフリップフロップの実験回路 (図 9) です。
レプリカの入力ゲートは、RS ラッチ部の入力の NAND ゲートと統合しています。プライマリの入力ゲートは、RS ラッチ部の入力の NAND ゲートと、追加した AND ゲートとで 3 入力 NAND ゲートを構成しています。機能的に同じであることは、簡単にわかると思います。
回路の動作
J=K=1 のときについて、確認してみましょう。
- CLK=0、Q=0、Q=1 のとき、J=1 が有効で、プライマリの出力 Qm=1、Qm=0
- CLK=1 になると、レプリカ出力 Q=1、Q=0
- CLK=0、Q=1、Q=0 のとき、K=1 が有効になり、Qm=0、Qm=1
- CLK=1 になると、レプリカ出力 Q=0、Q=1
となって、両方の押しボタンを押しているあいだ、クロックに同期して LED3 と LED4 が交互に点滅します。でも、押しボタンを離すと、どちらが点灯するかは運次第。離すのが遅れたほうが点灯する? いやぁ、クロックのタイミングも影響するので、どーなるんでしょ (^_^;)
後記
JKフリップフロップの、基本的な動きはわかったように思います。でも、部品箱にある JKフリップフロップ IC CD4027B のデータシートをみていると、なんだかちょっと違うような。それはまた、今度、実際に使うときに確認してみましょ。
ところで、D フリップフロップの後記で、出力 Q を入力 D に戻すとクロックが入るたびに出力が反転する、ってのを書きました。「分周回路」ってやつ。
JKフリップフロップでも、J=K=1 にしておくとクロックが入るたびに出力が反転します。同じですね。こういうのを T フリップフロップといいます。トグルの T です。
これで、だいたいのフリップフロップのおさらいができたので、さて、つぎはフリップフロップを使ったロジック回路を、いくつかみていきましょうか。