わっふるぶろぐ

わっふるが日々の出来事をただただ書いていきます~

『CODE』第14章 フィードバックとフリップフロップ

第14章では、フリップフロップと呼ばれる回路をいくつか紹介します。この言葉はまた、ビーチサンダルや政治家の戦術にも使われたりします。

 

その前に、フリップフロップで使われるインバータというゲートを紹介します。

f:id:waffle202:20200305150757p:plain

インバータ

インバータは、0を1に、1を0に逆転します。

f:id:waffle202:20200305150415p:image

インバータの機能を持つリレーは、実は第11章で既に紹介しています。↓のような回路でした。

f:id:waffle202:20200229132435p:plain
f:id:waffle202:20200229132357p:plain

このインバータを応用したのが↓の発振器です。

f:id:waffle202:20200305203034p:plain

発振器は、出力が次の入力になります。つまり、一種のフィードバックです!スイッチを閉じると、入力0がインバータにより出力1となり、次の入力1がインバータにより出力0となり…と、0と1を交互に繰り返します

さて、それではフリップフロップ回路をいくつか紹介します!

 

まずは、一番基本的なRSフリップフロップです。↓の左図のような回路です。

f:id:waffle202:20200305160109p:plain
f:id:waffle202:20200305160118p:plain

右図は真理値表といいます。入力の各組み合わせに対する出力を示しています。フリップフロップ回路は少し理解が難しいため、ここではこの真理値表を理解して貰えれば大丈夫です。

2つの入力はS(セット)とR(リセット)と呼ばれています。出力Qの隣の出力は¬Qとも表され、Qの逆の出力になります。Sが1のとき、Qは1にセットされ、Rが1のとき、Qは0にリセットされます。SとRの両方が1になる状況は許されていません。表の3行目のQと¬Qは、SとRの両方が0になる前の値のままであることを意味しています(ココが一番重要!)。例えば、Sが1、Rが0の状態から両方を0にすると、1行目と同様にQが1、¬Qが0のままになります。

つまり、フリップフロップ回路は情報を保持することができるのです!この本では、この事を「シーソー」に例えて説明されています。

シーソーは2つの安定状態を持ち、シーソーを見れば、どちら側が最後に押し下げられたのかがわかります。同じように、Qの値を見れば、SとRのどちら側が最後に1だったのかがわかります。つまり、両方が0になる前の情報を保持しているんです!

 

次は、レベルトリガー型Dタイプフリップフロップです。

f:id:waffle202:20200305220246p:plain
f:id:waffle202:20200305194631p:plain

この回路も複雑なので右図の真理値表さえ理解できれば十分です。

表中のXは0と1のどちらでもいいことを意味しています。Dはデータのことで、Clkはクロックと呼ばれるものを表しています。クロックはデータを保持するかどうかを決め、0のときにデータを保持します。「レベルトリガー」は特定のレベル(この場合0)のときにデータを保持することを意味しています。

この回路はまた、レベルトリガー型Dタイプラッチとも呼ばれています。次に使うまで施錠(ラッチ)しておくことを意味します。このラッチを8個用意し、ボックスに組み込んだものが↓です。

f:id:waffle202:20200305214316p:image

Clk入力を0にすると、出力Qの8ビットを保持し、データ入力をどう変えてもQは変化しません。つまり、このラッチは一度に8ビットを保存できます!このボックスは今後よく使います。

ここで、Dタイプフリップフロップを少し改造してORゲートとクリアと呼ばれる入力信号を追加します。

f:id:waffle202:20200306000854p:image

クリア信号は、他の入力信号にかかわらずQを強制的に0にします。

さて、8ビットラッチと8ビット加算器を次のようにつなぎます。

f:id:waffle202:20200306003915p:image

この装置は複雑に見えますが、それぞれの機能を理解してれば何が起こるかわかるはずです。まず、クリアスイッチを閉じて出力Qと入力Bを全て0にし、電球を消します。次に、最初の数をAから入力して加算スイッチ(Clk入力)を押すと、その数が電球に現れます。そして、加算スイッチを開いてそれを保持しておきます。2番目の数をAから入力して、また加算スイッチを押すと、入力Bの前の合計と加算され、それが電球に現れます。これを繰り返すと、いくつもの数を加算することができます!

 

最後に、エッジトリガー型Dタイプフリップフロップを紹介します。回路は↓のようになります。

f:id:waffle202:20200306123343p:plain
f:id:waffle202:20200306124050p:plain

この回路は、クロックが0から1に変わるときにデータ入力が保存されます。表中の↑は、クロックの0から1への遷移を表しています。

これと先程紹介した発振器をつなげると、カウンタと呼ばれるものになります。カウンタは文字通り2進数をカウントしてくれます。

 

この本では、それぞれの回路の挙動をより詳しく説明されています。また、その他のフリップフロップ回路や、カウンタについても解説されてたので、ぜひご確認ください!

 

第15章では、もの作りを離れて、また別の記数法について見ていきます。

 

waffle202.hatenablog.com