スポンサーリンク

私たちが何らかの計算問題を解こうとする時、途中の計算結果を紙にメモしたりすることがあると思います。コンピュータの中にも計算結果やその他いろいろな信号を保存しておくための記憶回路が存在します。1本の信号線があると仮定して、この信号線の状態がある瞬間に「1」であったのかもしくは「0」であったのかを記憶しておくことができるのがフリップフロップ回路です。

フリップフロップ回路も「NOT回路」「OR回路」「AND回路」の組合せで作ることができます。まずは以下の図を見てください。

 

フリップフロップ_0

図34.フリップフロップ回路

 

上に示した回路が状態を保存するのに重要な働きをします。入力端子のABと出力端子CDを持っていて、2本の出力信号が交差するように入力側へ戻っているのが特徴です。

まずこの回路の入力端子Aに「1」を、入力端子Bに「0」を入力した時の回路の動きを見てみましょう。

 

フリップフロップ_1

図35.フリップフロップ回路1

 

入力端子に与えられた信号はまず「OR回路」へと伝わりますが、上下2つの「OR回路」は片側の入力端子が出力側から戻ってくるような配線になっているため、この時点では「1」になるか「0」になるかは分からない状態です。

 

フリップフロップ_2

図36.フリップフロップ回路2

 

ですが「OR回路」はどちらかの入力が「1」であれば出力が「1」になる回路ですので、上側の「OR回路」の出力は現時点でも「1」になることが決まっています。

 

フリップフロップ_3

図37.フリップフロップ回路3

 

上側の「OR回路」の出力が「1」になると、その信号は次につながる「NOT回路」によって反転し、結果的に出力端子Cは「0」になることが分かります。

 

フリップフロップ_4

図38.フリップフロップ回路4

 

出力端子Cが「0」になるとその信号は下側の「OR回路」の入力端子へ伝わります。

 

フリップフロップ_5

図39.フリップフロップ回路5

 

この時点で下側の「OR回路」の出力は「0」になることが分かりました。

 

フリップフロップ_6

図40.フリップフロップ回路6

 

下側の「OR回路」の出力が「0」になると、その信号は次につながる「NOT回路」によって反転し、結果的に出力端子Dは「1」になることが分かります。

 

フリップフロップ_7

図41.フリップフロップ回路7

 

ここまでの話で入力端子Aに「1」を、Bに「0」を入力した時、出力端子Cは「0」、Dは「1」になることが分かりました。今度は逆に、この回路の入力端子Aに「0」を、入力端子Bに「1」を入力した時の回路の動きを見てみましょう。

 

フリップフロップ_8

図42.フリップフロップ回路8

 

先ほどと同じように入力端子の信号が「OR回路」へと伝わります。

 

フリップフロップ_9

図43.フリップフロップ回路9

 

今度は下側の「OR回路」の入力が「1」になっているので出力も「1」であることが分かります。

 

フリップフロップ_10

図44.フリップフロップ回路10

 

下側の「OR回路」の出力が「NOT回路」で反転し、出力端子Dが「0」であることが分かります。

 

フリップフロップ_11

図45.フリップフロップ回路11

 

出力端子Dが「0」になるとその信号は上側の「OR回路」の入力端子へ伝わります。

 

フリップフロップ_12

図46.フリップフロップ回路12

 

この時点で上側の「OR回路」の出力は「0」になります。

 

フリップフロップ_13

図47.フリップフロップ回路13

 

上側の「OR回路」の出力が「0」になると、その信号は次につながる「NOT回路」によって反転し、結果的に出力端子Cは「1」になることが分かります。

 

フリップフロップ_14

スポンサーリンク

図48.フリップフロップ回路14

 

ここまで見てきた回路の動作をまとめてみます。入力端子Aに「1」、入力端子Bに「0」を入力した場合には出力端子Cが「0」出力端子Dが「1」になることが分かりました。逆に入力端子Aに「0」、入力端子Bに「1」を入力した場合には出力端子Cが「1」出力端子Dが「0」になります。

この回路の入力側にある「OR回路」の入力は、片方の端子が出力側から戻ってくるような構造になっているため最初の段階では片方の端子の状態しか分からないのですが、「OR回路」の特性上、片方の端子でも「1」が入力されていれば出力が「1」になることが決まっているため、上で説明したような順番で回路の状態が決まっていきました。

しかし入力端子Aと入力端子Bが両方とも「0」の時には回路の状態はどうなるのでしょうか?上下の「OR回路」には両方とも片側の入力端子が「0」である、ということしか分からないため、この条件だけでは上下の「OR回路」は両方とも出力が決まらない状態になってしまいます。

 

フリップフロップ_15

図49.フリップフロップ回路15

 

そこで一度、入力端子Aに「1」、入力端子Bに「0」を入力した場合の回路の状態へ戻ってみましょう。入力端子Aに「1」、入力端子Bに「0」を入力した場合には最終的に回路の状態は次のような状態になったと思います。

 

フリップフロップ_7

図50.フリップフロップ回路7

 

この状態から入力端子Aを「1」から「0」へ変更するとどうなるでしょうか?入力端子Aが接続されている上側の「OR回路」はもともと両方の入力端子が「1」の状態であったため、片方の入力端子が「0」に変わったとしても出力は変わらず「1」のままです。結果、出力端子Cは「0」、出力端子Dは「1」のままです。

 

フリップフロップ_16

図51.フリップフロップ回路16

 

そして今度は入力端子Aに「0」、入力端子Bに「1」を入力した場合の回路の状態へ戻って考えてみましょう。入力端子Aに「0」、入力端子Bに「1」を入力した場合には最終的に回路の状態は次のような状態になったと思います。

 

フリップフロップ_14

図52.フリップフロップ回路14

 

この状態から入力端子Bを「1」から「0」へ変更するとどうなるでしょうか?入力端子Bが接続されている下側の「OR回路」はもともと両方の入力端子が「1」の状態であったため、片方の入力端子が「0」に変わったとしても出力は変わらず「1」のままです。結果、出力端子Cは「1」、出力端子Dは「0」のままです。

 

フリップフロップ_17

図53.フリップフロップ回路17

 

入力端子Aと入力端子Bが両方とも「0」の場合、その直前の回路の状態が維持されることが分かりました。この性質をうまく利用することでデジタル信号の状態を記憶する回路を作ることができます。

まずは「入力端子Aと入力端子Bが両方とも「1」になる状況を作らない」というルールを作ります。このルールに従っている限り、下記の条件で回路が動作することが分かります。

1:出力端子Cを「0」にしたい場合には入力端子Aには「1」を、入力端子Bには「0」を入力する。

2:出力端子Cを「1」にしたい場合には入力端子Aには「0」を、入力端子Bには「1」を入力する。

3:出力端子Cを現在の状態で維持したい場合には入力端子AとBの両方に「0」を入力する。

上記の条件を作るために下図のように回路を追加します。

 

フリップフロップ18

図54.フリップフロップ回路18

 

条件の3番の状態を作るために、マルチプレクサ回路の説明に出てきた「AND回路」の門番機能を使います。上図のように端子A、Bの前段に「AND回路」を接続すると、入力端子Eに「0」を入力することで端子Aと端子Bを強制的に「0」にすることができます。

逆に入力端子Eに「1」が入力されている状態では、入力端子Fの状態によって端子AとBの状態が決まります。

入力端子Fが「0」の場合には端子Aが「1」、端子Bが「0」の状態になり、反対に入力端子Fが「1」の場合には端子Aが「0」、端子Bが「1」の状態になります。

条件の1番と2番の状態を作るために入力端子Fと、端子Fを「NOT回路」で反転した信号で端子AとBの状態を作っていて、もともと端子Fという1つの状態から反転させた2つの信号を使うことによって「入力端子Aと入力端子Bが両方とも「1」になる状況を作らない」というルールも守られるようになっています。

その結果、回路全体では以下のような動作が実現します。これは入力端子Fの状態を入力端子Eの状態によって記憶する回路として使用できます。

入力端子Eが「1」:入力端子Fが「1」の時は出力端子Cは「1」。入力端子Fが「0」の時は出力端子Cは「0」。

入力端子Eが「0」:出力端子Cの状態を維持する(記憶する)。

 

入力端子Fの状態が記憶されるのは入力端子Eが「0」に切り替わった瞬間です。

 

フリップフロップ19

図55.フリップフロップ回路19

 

基本的には上記の回路で信号を記憶する回路として使えるのですが、使いやすさの面から以下のような2段重ねの回路にして使用されることが多いです。

 

フリップフロップ20

図56.フリップフロップ回路20

 

上図の回路では端子Eが「1」になった瞬間に記憶する回路(前段)と端子Eが「0」になった瞬間に記憶する回路(後段)を2段重ねにすることで端子Fの信号を2段階で記憶します。この回路では状態を記憶する時に端子Eへの入力信号を以下のように変化させます。

 

フリップフロップ21

図57.フリップフロップ回路21

 

上図の矢印で記した時点(信号が0から1へと変化する瞬間、「立上り」とも言う。)で端子Fの信号が前段の回路に記憶されます。これと同時に前段の回路が保持した信号の状態が後段の回路へも伝わります。その後端子Eの信号が0へと戻り、後段回路が保持の状態になります。次の信号の立上り時まで、後段の回路が記憶した信号を保持し続けます。

今回、端子Eへと入力したような0→1→0と状態が変化する信号のことを「クロック信号」と呼びます。クロック信号はフリップフロップ回路が信号を記憶するタイミングを指示するための信号として使用されます。

フリップフロップ回路は一般的に以下のような記号で表されます。上図での出力端子CはQの文字で表されています。端子Dは常に端子Cを反転した信号が出てくるので、Qに上線を引いた文字で表されています。入力端子のFはDの文字で表されます。クロック信号の入力端子Eは三角の矢印のような形で表されます。

 

フリップフロップ22

図58.フリップフロップ回路22

 

前のページで説明したようにコンピュータの中では「1」と「0」の組合せであらゆる情報を表現しています。ですので情報を記憶する回路であるフリップフロップ回路も単体で使用されることは珍しく、大抵は複数のフリップフロップ回路が1セットになって1つの情報を記憶しています。例えば8ビットコンピュータでは8つのフリップフロップ回路が1セットになって情報を記憶しています。8つのフリップフロップ回路が記憶できる情報の組合せは256通りになります。また、複数のフリップフロップが1セットになって情報を記憶する回路のことを「レジスタ」と言います。

 

レジスタ

図59.レジスタ回路

 

<戻る       次へ>

 

スポンサーリンク