フィードバックとフリップフロップ

ここまでの講で、道具箱はずいぶん充実した。第6講「論理ゲートを作る」で AND・OR・NAND・NORの4つの論理ゲートとインバータが揃い、第7講ではそれらを組み合わせて、2進数の 足し算と引き算をする回路まで組み上げた。けれども、それらの回路にはひとつ共通の限界がある—— 人間がスイッチを動かしたときにしか、出力は変わらない。 では、回路が自分自身の出力を、自分の入力に戻したら何が起きるのだろうか。そして、そこから 「さっき何が起きたかを覚えている」回路は作れるだろうか。この講で扱うのは、計算する回路から 記憶する回路への跳躍である。 全5セクション・演習23問。回答はブラウザに保存されるので、途中でやめても続きから再開できる。

進捗 0 / 23 問(正解 0 問)

1. フィードバックと発振器

ここまでに組み立てた回路は、どれも人間がスイッチを動かしたときだけ出力が変わった。この講で最初に登場するのは、誰も触っていないのに動き続ける回路である。インバータの出力を、そのまま自分自身の入力へ戻す——配線としてはただ1本の輪を作るだけだが、これで出力は0と1を往復し続ける。鍵になるのは、第6講でバッファを紹介したときに脇に置いておいた性質、リレーが状態を切り替えるまでにわずかな時間がかかるという事実である。こうしてできる回路を発振器と呼び、出力が変わって元に戻るまでの間隔を周期、1秒あたりに何周期あるかを周波数と呼ぶ。

話は、家の中でうなったり鳴ったりしている道具から始まる。ブザーやベルは、電磁石が接点を引き寄せ、 接点が動いたことで回路が切れ、電磁石の力が抜けて接点が戻り、また回路がつながる——という往復を、 目にも留まらぬ速さで繰り返している。回路をぐるりと一周させて、出力が自分の入力に戻ってくるように 配線した結果である。この「出力を入力へ戻す配線」をフィードバックと呼ぶ。

同じことを、第6講で作ったインバータで表現してみよう。インバータは入力の0と1を ひっくり返して出力する部品である。その出力を、そのまま自分自身の入力につないだらどうなるか。 入力が0なら出力は1になり、その1が入力に戻ると出力は0になり、その0が戻れば出力は1になり……と、 いつまでも決着がつかない。ここで効いてくるのが、第6講でバッファを紹介したときに「後の講で意外な 主役になる」と書いておいた性質——リレーが状態を切り替えるには、わずかな時間がかかる ——である。矛盾はその遅れの分だけ引き延ばされ、出力は0と1を交互に繰り返し続ける。

この回路を発振器と呼ぶ。ここまで作ってきたどの回路とも、決定的に違う点がある。 人間が誰も触っていないのに、それ自身だけで動き続ける。入力デバイスも要らなければ、 操作する人も要らない。ただ電源をつないだだけで、0と1の往復が始まる。

発振器の出力が変わって、また元の値に戻るまでの間隔を周期という。周期の逆数、つまり 1秒あたりに何周期あるかを表す量が周波数である。周波数の単位は ヘルツ(Hz)で、これは電波の送受信を初めて実現したハインリッヒ・ルドルフ・ヘルツ (1857〜1894年)の功績を称えた呼び名として、1920年代のドイツから広まった。

周波数 = 1 ÷ 周期

発振器は、しばしばクロックとも呼ばれる。時計のように規則正しく時を刻むからである ——ただしこの講では、両者を最初から同じ言葉として扱うのではなく、まず「発振器」という部品として 理解しておく。クロックという呼び名が本当に必要になるのは、この後、記憶する回路にタイミングの指示を 与える段になってからである。

演習 1理解

インバータの出力をそのまま自分自身の入力につなぐと何が起きるか

演習 2理解

発振器がこれまでの回路(スイッチ・リレーの単純な組み合わせ)と本質的に異なる点はどれか

演習 3計算

ある発振器の周期が0.1秒であるとき、この発振器の周波数はどれか

演習 4理解

周波数の単位「ヘルツ(Hz)」という呼び方の由来はどれか

このセクション: 0 / 4 問正解

2. NORゲート2個のフィードバック — フリップフロップの発見

フィードバックは、出力を自分自身へ戻すものだけではない。2つのNORゲートを、左の出力が右の入力へ、右の出力が左の入力へと交差させてつなぐと、まったく別の性質が現れる。一方のスイッチを閉じると電球が点き、スイッチを開いても点いたまま。もう一方のスイッチを閉じると消え、開いても消えたまま。両方のスイッチが開いているという入力の見た目は同じなのに、出力には2通りある——2つの安定状態を持つこの回路がフリップフロップである。名前の由来は1918年、イギリスの無線物理学者ウィリアム・ヘンリー・エクルズとF・W・ジョルダンの仕事にさかのぼる。

フィードバックは、出力を自分自身へ戻すやり方だけではない。2つのゲートを用意して、 一方の出力をもう一方の入力へ、もう一方の出力を最初の一方の入力へと、たすき掛けに つないでみる。これも、信号がぐるりと一周して戻ってくるという意味では立派なフィードバックである。 使うゲートはNOR——両方の入力が0のときだけ出力が1になる、あのゲートだ。

交差接続した2つのNORゲートに、スイッチを2つと電球を1つ足して動かしてみよう。上のスイッチを閉じると 電球が点く。ここまでは驚くことはない。ところが、そのスイッチを開いても、電球は点いたまま になる。次に下のスイッチを閉じると電球は消え、そのスイッチを開いても消えたままである。

よく見てほしい。最初の状態と、上のスイッチを閉じて開いた後の状態は、 どちらも「両方のスイッチが開いている」というまったく同じ入力である。それなのに、 電球は一方では消えていて、もう一方では点いている。これまでの回路は入力が決まれば出力も決まった。 この回路は違う——同じ入力に対して、安定した出力が2通りある。

2つの安定状態を持つこの回路をフリップフロップと呼ぶ。行ったり来たりする性質に ちなんだ名前で、回路としての起源は1918年、イギリスの無線物理学者 ウィリアム・ヘンリー・エクルズF・W・ジョルダンの仕事にさかのぼる。 シーソーを思い浮かべるとよい。シーソーは右下がりか左下がりのどちらかで安定していて、水平の中間位置には 留まってくれない。

では、この2つの安定状態は何の役に立つのか。答えは「覚えている」ということだ。電球が 点いていれば、最後に閉じられたのは上のスイッチ。消えていれば下のスイッチ。回路が、最後に何が起きたかを 保持している。もし何も覚えられないなら、数を数えることすらできない——今どこまで数えたのかが分からなく なってしまうからだ。この後の講で作るあらゆる記憶装置は、ここから始まる。

演習 5理解

2つのNORゲートを交差接続した回路(左の出力が右の入力、右の出力が左の入力)の「奇妙な点」はどれか

演習 6理解

この回路(両方のスイッチが開いているときに2つの安定状態を持つ回路)に付けられた名前と、その由来はどれか

演習 7理解

このフリップフロップ回路が持つ機能として正しいものはどれか

演習 8理解

「フリップフロップは本質的に欠かせない道具である」と言われる理由はどれか

このセクション: 0 / 4 問正解

3. RSフリップフロップの真理値表

フリップフロップのうち最も単純なものが、RS(リセット・セット)フリップフロップである。2つの入力をS(セット)とR(リセット)、2つの出力をQとQ̄(キューバー)と呼ぶ。QとQ̄は常に互いの反対になる——これがこの回路の設計上の約束である。真理値表はたった4行しかないが、そのうち1行が「保持」という、これまでのどのゲートにもなかった振る舞いを持つ。そして最後の1行、SとRを同時に1にする組み合わせは、QとQ̄の両方が0になってしまうため、使ってはいけない状態として禁止(違法)とされる。

いま見た回路には、正式な名前がある。RS(リセット・セット)フリップフロップである。 4つの端子にきちんとラベルを付けよう。2つの入力はS(セット)とR (リセット)、2つの出力はQ(キューバー、Qの逆という意味)と呼ぶ。 Sを1にすることを「Qをセットする」、Rを1にすることを「Qをリセットする」と、動詞のように言うことも できる。

この回路の設計上の約束はただ一つ、Q̄は常にQの反対であるということだ。真理値表は 4行しかない。S=1・R=0ならQ=1、Q̄=0(セット)。S=0・R=1ならQ=0、Q̄=1(リセット)。 そしてS=0・R=0のときは、QもQ̄も直前の値のまま変わらない——これが 保持であり、S2で見た「覚えている」の正体である。出力が入力だけでは決まらず、 直前にセットとリセットのどちらが最後に働いたかで決まる。

残る1行、S=1・R=1はどうか。この場合、QもQ̄も両方0になってしまう。すると「Q̄はQの反対」という この回路の前提が崩れる。だからこの組み合わせは、禁止(違法)とされる。回路が壊れる わけでも、電気的に不可能なわけでもない——この回路を使う設計者の側が、あらかじめ避けなければ ならない入力という意味での禁止である。この「禁止をどう避けるか」という課題が、次の セクションの設計を導くことになる。

以降、RSフリップフロップは中身の2つのNORゲートを描かず、S・R・Q・Q̄という4つの端子を持つ 1つの箱として扱う。中身をいちいち描かずに部品として使い回せるようになると、回路はまた一段、 大きな仕事ができるようになる。

この真理値表を、実際に触って確かめよう。Setを一度ONにしてからOFFへ戻してもQが1のまま残る—— 「両方OFF=保持」こそがこの回路の主役である。SetとResetを同時にONにすると、 禁止状態でQとQ̄の「互いに反対」の約束が破れることも観察できる。

さわって確認RSフリップフロップ — SetとResetで1ビットを覚える

保持中(直前の状態を維持)

0
Q
1
SR動作
00保持(直前のQを維持)
10Set → Q = 1
01Reset → Q = 0
11禁止(同時ONは不可)

RSフリップフロップはNORゲート2つを互いにフィードバックさせただけの、最も単純な1ビットの記憶回路です。 SetでQ=1、ResetでQ=0にでき、両方OFFの間は最後にセット/リセットした状態を保ち続けます。 Setを一度ONにしてからOFFへ戻しても、Qが1のまま変わらない——この「保持」が、 コンピュータが1ビットを覚えておくための最小構成の原型です。

演習 9理解

RSフリップフロップの4つの端子S・R・Q・Q̄の役割として正しいものはどれか

演習 10計算

RSフリップフロップにS=1、R=0を入力したとき、出力QとQ̄はどうなるか

演習 11理解

S=0、R=0を入力したときの出力QとQ̄はどうなるか

演習 12理解

RSフリップフロップでS=1、R=1が禁止(違法)とされる理由はどれか

このセクション: 0 / 4 問正解

4. レベルトリガー型Dタイプフリップフロップ — ラッチとレジスタ

RSフリップフロップは「どちらを最後に押したか」を覚える。しかし実際に欲しいのは、「ある時点でのこの信号の値」を覚えてくれる回路である。そこでデータ信号とビット保持信号という2つの入力を考える。ビット保持が1の間はデータの値がそのまま出力に現れ、0に戻るとその瞬間の値が残り続ける。作り方はRSフリップフロップの入力側にANDゲートを2個足すだけ、そしてデータをセットへ、データの反転をリセットへ回すことで入力は2本のまま済む。こうしてできるのがレベルトリガー型のDタイプフリップフロップ、別名Dタイプラッチという1ビットのメモリであり、8個並べれば8ビットのレジスタになる。

RSフリップフロップが覚えているのは「どちらの入力が最後に1になったか」である。しかし実際に欲しいのは、 もう少し素直な機能だ——ある時点でのこの信号の値を、覚えておいてほしい。そこで入力を 2本に整理する。1本は覚えさせたい値そのものを運ぶデータ信号、もう1本は「今の値を 覚えろ」と指示するビット保持信号である。

目指す挙動はこうだ。ビット保持が1の間は、出力Qがデータの値をそのまま映し出す。ビット保持が0に戻ると、 その瞬間のデータの値がQに残り続ける。以降データがどう変わろうとQは動かない。 この挙動を関数表にすると、ビット保持が0の行は「データが0でも1でも結果は同じ」になるので、データの列を X(何でもいい)という記号ひとつにまとめて書ける。

作り方は驚くほど素直である。RSフリップフロップの入力側に、ANDゲートを2個置く。 ANDゲートは両方の入力が1のときだけ1を出すので、ビット保持信号が0の間は、セット側もリセット側も 出力が0に固定される——つまりフリップフロップに何も届かない。S=0・R=0は保持だから、 Qは直前の値のまま。ビット保持が1になって初めて、セット・リセットの信号が中まで通るようになる。

ただしこのままでは入力が3本(セット・リセット・ビット保持)になってしまうし、セットとリセットを 別々に操作できる限り、禁止のS=R=1が起きる余地も残る。そこで一工夫する—— データ信号をそのままセットへ、データ信号をインバータで反転したものをリセットへ回す。 こうすればデータが1のときはS=1・R=0、データが0のときはS=0・R=1と、常にどちらか一方だけが1になる。 入力は2本のままで、禁止状態は構造的に起こりえなくなった。

完成したこの回路をレベルトリガー型のDタイプフリップフロップと呼ぶ。Dは 「データ」の意味である。そして印刷物では通常、入力ラベルを「ビット保持」ではなく クロック(Clk)と書く——ここから先はその呼び名を使う。この回路には レベルトリガー型のDタイプラッチという別名もあり、要するにこれが 1ビットのメモリである。

1ビットで足りないなら、並べればよい。8個のラッチにクロックを共有させれば 8ビットラッチ、すなわちレジスタになる。第7講で作った8ビット 加算器の出力を、電球とレジスタのD入力の両方につないでおき、「保存」スイッチでクロックを制御すれば、 計算結果を保持できる。さらに加算器の一方の入力を、スイッチかレジスタの出力かで切り替えられるように すれば——押すたびに前の合計へ新しい数を足していくアキュムレータ(累算器)の できあがりである。ここに強制的にQを0へ戻すクリア入力を足せば、計算のやり直しもできる。

演習 13理解

「データ」信号と「ビット保持」信号を使う回路が目指す挙動として正しいものはどれか

演習 14理解

データ・ビット保持の関数表が「X(何でもいい)」という形に単純化できる理由はどれか

演習 15理解

RSフリップフロップの入力側にANDゲートを2個追加する目的はどれか

演習 16理解

入力の数を2つ(データ・ビット保持)に保ったまま、SとRが同時に1になる禁止状態を避ける仕掛けはどれか

演習 17計算

レベルトリガー型Dタイプフリップフロップに D=1、Clk=1 を入力したときの出力Qはどれか

演習 18理解

8ビットラッチ(レジスタ)を8ビット加算器と組み合わせて使う目的はどれか

このセクション: 0 / 6 問正解

5. エッジトリガー型フリップフロップ — 周波数分割とリップルカウンタ

レベルトリガー型は、クロックが1である間ずっと窓が開いていて、その間のデータの変化が出力へ届いてしまう。取り込む瞬間をもっと鋭く絞りたい——そこでクロックが0から1へ変わる瞬間だけデータを取り込むエッジトリガー型が登場する。中身はクロックを反転させた1段目と、反転させない2段目という2段のRSフリップフロップである。この部品はただの記憶装置にとどまらない。Q̄を自分のD入力へ戻せば周波数を半分にする分周器になり、その分周器を鎖のようにつなげば、出力の並びがそのまま2進数のカウントになる——リップルカウンタである。

レベルトリガー型には、ひとつ気になる性質がある。クロックが1である間はずっと「窓が開いている」ので、 その間にデータが変化すれば、その変化がそのまま出力に届いてしまう。取り込む瞬間を、もっと鋭く 絞りたい。そこで登場するのがエッジトリガー型である。こちらは クロックが0から1に変わる、その瞬間だけデータを取り込む。あとはクロックが1のまま でも、データがどう動いても出力は微動だにしない。この「0から1への遷移」は記号「↑」で表され、 回路図では入力側に小さな山形の印を付けて、エッジトリガー型であることを示す。

中身は2段のRSフリップフロップである。1段目はクロックを反転させた 信号で制御され、クロックが0の間にデータを取り込んでおく。2段目は反転させない クロックで制御され、クロックが1になった瞬間に1段目の値を受け取って出力へ渡す。この2段の受け渡しに よって、「0から1に変わる、ちょうどその瞬間だけ」という鋭い取り込みが実現する。

さて、この部品を記憶以外の用途に使ってみよう。発振器の出力をエッジトリガー型Dフリップフロップの クロックにつなぎ、Q̄をD入力に戻す。クロックが0から1になるたびに、Qは今の自分の 反対の値を取り込む——つまり毎回反転する。Qが1往復するにはクロックの立ち上がりが2回必要だから、 出力の周波数は元の半分になる。これが周波数分割器(分周器)である。

分周器を3個、鎖のようにつないでみる。各段の反転出力Q̄を、次の段のクロック入力へ つなぐのがポイントだ。すると3つの出力Q1・Q2・Q3の並びが、クロックのたびに 000→001→010→011→100→101→110→111→000 と変化する——これはまさに、第3講 「10進法は絶対じゃない」で学んだ2進数の位取りで 0から7まで数え上げる動きそのものである。記憶する回路を並べただけで、数を数える回路になってしまった。

この回路をリップルカウンタと呼ぶ。1段目の変化が2段目のクロックになり、2段目の変化が 3段目のクロックになり……と、変化が水面の波紋のように順番に段を伝わっていくからである。ビット数を 増やせば数えられる範囲も広がり、3ビットなら0〜7、8ビットなら0〜255まで数えられる。なお全段の出力が 同時に変わる、より洗練された「同期式」のカウンタもある。

電信のリレーから始めて、足し算と引き算、そして数を数えることまでできるようになった。ここで少し もの作りから離れて、次の講では記数法の話に戻る——8ビットをひとまとめにした「バイト」と、それを 簡潔に書き表すための16進法である。

1ビットの記憶から、数を数える回路へDタイプラッチの中身と、それを鎖状につないだ3ビットカウンタの動き1. レベルトリガー型Dタイプラッチの内部構成D(データ)Dの反転Clk(クロック)=ビット保持ANDANDSRRSフリップフロップQClk=1 の間はQ が D に追従するClk=0 に戻るとその時の値を保持する Clk が0の間は2つのANDゲートの出力が0に固定され、セット・リセットはフリップフロップに届かない Dをセット、Dの反転をリセットに使うので、SとRが同時に1・同時に0になることはない 2. 3ビットリップルカウンタのタイミング図(各段のQ̅を次段のクロックへ)Clk(発振器)Q1(1桁目)Q2(2桁目)Q3(3桁目)012345670カウント値Q3 Q2 Q1 と10進数2進10進00000011010201131004101511061117 各段は上の段のちょうど半分の頻度で切り替わる(=周波数が段ごとに半分になる) Q̅を次段のクロックにつなぐと 000→001→…→111→000 の昇順。Qをつなぐと降順になってしまう

リップルカウンタが自動でやっている数え上げを、下のカウンタで1ステップずつ手で回して確かめよう。 「+1」を押すたびに、一番右のビットの変化が左隣へ波のように伝わっていく——各段のQ̄が次の段の クロックを叩く、あの連鎖と同じ動きである(こちらは4ビット版なので0〜15まで数えられる)。

さわって確認4ビットカウンタ — 繰り上げが左へ伝わる様子を見る
Bit30
Bit20
Bit10
Bit00
2進数0000(2)
10進数0(10)

「+1」を押すと一の位(Bit0)から繰り上げが始まります。1だったビットは0に戻りつつ隣のビットへ繰り上げを渡し、0だったビットが1になったところで伝播は止まります。 4bitでは0〜15の16通りしか表せないため、1111の次は0000に戻ります(オーバーフロー)。コンピュータの整数演算が特定の値で「桁あふれ」するのはこの仕組みのためです。

演習 19理解

レベルトリガー型とエッジトリガー型のDフリップフロップの違いはどれか

演習 20理解

エッジトリガー型Dタイプフリップフロップの内部構成として正しいものはどれか

演習 21理解

発振器の出力をエッジトリガー型DフリップフロップのクロックにつなぎQ̄を入力Dに戻す回路(周波数分割器)で起きることはどれか

演習 22理解

このようなDフリップフロップの反転出力Q̄を次のフリップフロップのクロック入力に順につないだ回路が「リップルカウンタ」と呼ばれる理由はどれか

演習 23計算

3個のフリップフロップを鎖状につないだ3ビットのリップルカウンタで表せる10進数の最大値はどれか

このセクション: 0 / 5 問正解