シリーズ「コンピュータの記憶のしくみ」 第2回
回路が「迷う」とは?
両方、押したら?
前回の SR ラッチには、「つける」と「消す」の 2 つのスイッチがあった。 「消す」を押せばランプが消え、「つける」を押せばランプが点く。離しても、そのまま覚えている。
では、両方を押したらどうなるだろう。
前回のシミュレータで試した人は、黄色い注意書きを見たはずだ。 「禁止入力です。SR ラッチではこの入力の組み合わせは使えません。」
「つけて」と「消して」を同時に言われたら、回路が困る。それはなんとなくわかる。 けれど実際には、ランプは消えるだけだ。壊れもしないし、火花も出ない。 いったい何が、「禁止」するほどまずいのだろうか。
今回は、この「禁止」の中身をのぞいてみる。
押して、確かめる
前回と同じ回路に、ランプを 1 つ足した。 右下のランプは、下のゲートの出力を映している。前回は名前を出さずに、裏側に隠していたゲートだ。
SR ラッチ シミュレータ(裏側も見える版)
スイッチをクリックすると、回路が自動的に安定するまで評価されます
何も押していないとき、上のランプは点き、下のランプは消えている。 「消す」を押してから離すと、上は消え、下が点く。「つける」を押して離せば、また元に戻る。
2 つのランプは、いつも逆になっている。
そこで、上のランプの値を Q、下のランプの値を Q̄(キュー・バー)と呼ぶことが多い。 文字の上の横棒は「逆」という意味の記号だ。Q が 1 なら Q̄ は 0、Q が 0 なら Q̄ は 1。 ラッチは値を 1 つ覚えるたびに、その値と、その逆の値を、2 つそろえて持っている。
では、「つける」と「消す」を両方 1 にしてみてほしい。
2 つのランプが、両方とも消える。
Q も 0、Q̄ も 0。「出力とその逆」のはずの 2 つが、同じ値になってしまった。 ラッチがずっと守ってきた約束が、ここで崩れている。
両方消えるのは、なぜか
理由は、前回の NOR の表を思い出せばすぐにわかる。 NOR は、入力に 1 が 1 本でもあれば、出力は 0 だった。
- 上のゲートには「消す」の 1 が入っている。だから上のゲートの出力は 0。
- 下のゲートには「つける」の 1 が入っている。だから下のゲートの出力も 0。
どちらのゲートも、相手の出力を見るまでもなく 0 に決まってしまう。 前回見た「互いに相手の根拠になって支え合う」関係は、ここでは切れている。 2 つのゲートは、それぞれ外から押さえつけられているだけだ。
ただ、ここで1つ気づいてほしいことがある。 この状態は、揺れてはいない。両方押している限り、ランプは両方消えたまま、ぴたりと止まっている。
本当に困るのは、ここではない。離すときである。
離す順番で、答えが変わる
もう一度、両方 1 にしてほしい。そこから、今度は 1 つずつ離してみる。
- 「つける」を先に離し、そのあと「消す」を離す。上のランプ(Q)は消えたままになる。
- 「消す」を先に離し、そのあと「つける」を離す。上のランプは点く。
あとに離したほうが、勝つ。
片方を離した瞬間、まだ押しているほうのスイッチが、ふつうの「つける」や「消す」として働くからだ。 その結果を、最後の 1 つを離したあとも覚えている。
ここまでは、まだいい。どちらを後に離したかがわかっていれば、結果は予想できる。
では、まったく同時に離したらどうなるだろう。どちらも「後」ではない。
同時に、離したら
人間の指で、2 つのボタンをまったく同時に離すのは難しい。 そこで、シミュレータにボタンを付けた。
同時に離す シミュレータ
「両方を 1 にする」を押してから、「両方を同時に離す」を押してください
「つける」と「消す」を両方 1 にしてから(「両方を 1 にする」ボタンでもいい)、「両方を同時に離す」を押してほしい。 離したあとの様子が、1 ステップずつゆっくり再生される。
まずは、「先に反応するのは」をまったく同時にして試してほしい。
2 つのランプが、そろって点き、そろって消え、また点く。いつまでたっても止まらない。
1 ステップずつ追ってみよう。
- 離した瞬間、Q も Q̄ も 0。2 つのゲートの入力は、どちらも「0 と 0」になる。
- NOR は入力がどちらも 0 なら 1 を出す。2 つのゲートが同時に 1 を出す。
- すると今度は、どちらのゲートにも相手から 1 が届く。2 つとも同時に 0 を出す。
- 離した瞬間と同じ「両方 0」に戻った。あとはこの繰り返しになる。
2 つのゲートは、まったく同じ条件で、まったく同じことをしている。 どちらかが先に 1 を出せば、それが相手を 0 に押さえ込んで決着がつく。 ところが、いつも同時だから決着がつかない。 道で向かい合った 2 人が、同じ方向によけ続けて、いつまでもすれ違えないのと同じだ。
次に、「上のゲート」を選んで同じことをしてほしい。 今度は、上のゲートがほんの少しだけ先に反応する。
上のゲートが先に 1 を出す。その 1 が下のゲートに届き、下は 0 のまま押さえ込まれる。Q = 1 で落ち着く。 「下のゲート」を選べば、今度は下が先に 1 を出し、Q = 0 で落ち着く。
同時に離したとき、答えを決めるのは押した人ではない。ゲートの速さである。
このように、どちらの信号が先に届くかという「かけっこ」で結果が変わってしまうことを、競合(レース)という。
本物の回路では
シミュレータの「まったく同時」は、じつは理想の世界の話だ。 本物のゲートは、同じ種類のものでも 1 個ずつ、反応の速さがほんの少しずつ違う。温度や電圧によっても変わる。 だから本物の SR ラッチで両方を同時に離しても、ぴったり同じリズムで揺れ続けることはまずない。 いずれどちらかのゲートが競り勝ち、1 か 0 に落ち着く。
問題は、どちらに落ち着くかが、前もってわからないことだ。 しかも 2 つのゲートの速さが近いほど、決着がつくまでに時間がかかる。 そのあいだ出力は、0 とも 1 ともつかない、中途半端な電圧にとどまることさえある。 この「どちらにも倒れきれない」状態は、メタステーブル(準安定)と呼ばれている。
立てた鉛筆は、いつかは必ずどちらかに倒れる。 けれど、どちらに倒れるか、いつ倒れるかは、倒れてみるまでわからない。
覚えさせたいものを入れたはずの回路が、入れていない値を勝手に決めてしまう。 記憶の回路にとって、これほど困ることはない。 前回「禁止」と書かれていたのは、両方押すことそのものより、そのあと離したときに何を覚えるかわからないからだったのだ。
階段のスイッチと、何が違うのか
ここで、前回やり残したことを片づけておきたい。
前回、SR ラッチは「上階と下階にあるスイッチで、階段の照明を点けたり消したりできるもの」と似ている、と書いた。 どちらも、2 つのスイッチで 1 つのランプを点けたり消したりする。 けれど、この 2 つは中身がまったく違う。
階段の照明を回路にすると、こうなる。
階段の照明 シミュレータ
1 階・2 階のスイッチをクリックして、照明を点けたり消したりしてみてください
2 つのスイッチが食い違っているとき、照明が点く。「計算のしくみ」シリーズで何度も出てきた、XOR 1 個だけの回路だ。

いろいろ押して、1つ確かめてほしい。
2 つのスイッチを同じ組み合わせにすれば、それまでどう押してきたかに関係なく、照明はいつも同じになる。 2 階が 1、1 階が 0 なら、必ず点く。何回押したあとでも、どんな順番で押したあとでも。
照明を決めているのは、いまのスイッチの位置だけである。この回路は、何も覚えていない。 覚えているように見えるのは、スイッチのつまみが、倒された向きのまま残っているからにすぎない。
SR ラッチは違った。 「つける」も「消す」も 0 という同じ入力なのに、ランプは点いていることも、消えていることもあった。 それを決めていたのは、それまでにどちらを押してきたかだった。
| 階段の照明 | SR ラッチ | |
|---|---|---|
| 出力を決めるもの | いまの入力だけ | いまの入力と、それまでの経緯 |
| ゲートの出力が入力側へ戻ってくるか | 戻らない | 戻る |
| 2 つの入力を同時に動かすと | いまの位置どおりに点く | 決まらないことがある |
似ていたのは、見た目だけだったのだ。
そして、今回の迷いも、この違いから来ている。 出力が入力側へ戻ってくるから、回路は覚えられる。 戻ってくるから、2 つのゲートが互いの出方を待ち合って、決まらなくなることもある。 覚えることと迷うことは、同じ仕組みの表と裏である。
ボタンが、2 つあるから
では、どうすれば SR ラッチを迷わせずに済むだろう。 いちばん簡単なのは、「両方押す」をそもそも起こせないようにすることだ。
なぜ両方押せてしまったのか。 「つける」と「消す」という、2 つのボタンを別々に持たせたからである。 別々のボタンなら、別々に押せる。同時にも押せる。
けれど、私たちがラッチに本当に伝えたいことは、2 つしかないはずだ。
- 覚えてほしい値は、1 か 0 か。
- いま、それを覚えてほしいのか、ほしくないのか。
「つける」「消す」の代わりに、この 2 つをそのまま入力にしたらどうだろう。
次回は、この 2 本の入力で動くラッチを作ってみよう。
参考文献
- 松下俊介 著. 基礎からわかる論理回路. 第2版, 森北出版, 2021.7. 978-4-627-82842-1. https://ndlsearch.ndl.go.jp/books/R100000002-I031573740
- 馬場敬信 著. 算数で読み解くコンピュータのしくみ, 技術評論社, 2022.8. 978-4-297-12960-6. https://ndlsearch.ndl.go.jp/books/R100000002-I032268791
- ディビッド・マネー・ハリス, サラ・L・ハリス 著; 天野英晴, 鈴木貢, 中條拓伯, 永松礼夫 訳. ディジタル回路設計とコンピュータアーキテクチャ. 第2版, 翔泳社, 2017.9. 978-4-7981-4752-9. https://ndlsearch.ndl.go.jp/books/R100000002-I028478041