  
2.記憶回路
(きおく かいろ)
2.1 シーソーみたいなスイッチ(フリップフロップ)
正スイッチや逆スイッチは、電流を流さないと元に戻ってしまいました。
ところが、次のようなスイッチがあります。
図2-1 フリップフロップの原理
すなわち、
A側に電流が流れると、スイッチはA側に引き寄せられ、
RP間がオンになります。
B側に電流が流れると、スイッチはB側に引き寄せられ、
RQ間がオンになります。
どちらにも電流が流れないと止まったままになっています。
電流が流れ出すと,シーソーみたいにパタパタ動きます。
このため、このスイッチは、シーソーという意味の英語
「フリップフロップ」
と呼ばれます。
フリップフロップは、A,Bともに電流が流れないと、止まったままです。
今、Q側には何もつながず、P側に豆電球をつないでいます。
最初、A、B共にオフだとします。
スイッチはPかQのどちらかにありますが、
Aのスイッチをオンにすると、P側にスイッチが傾きますので、
確実に豆電球が点灯します。
@) A側に電流が流れると,スイッチはP側に引き寄せられ,豆電球がつく。
A) B側に電流が流れると,スイッチはQ側に引き寄せられ,豆電球が消える。
図2-2 フリップフロップによる記憶
電流が流れないと、止まったままですから、
スイッチAをオフにしても豆電球はついたままです。
今度は、Bのスイッチをオンにします。すると、スイッチがQ側に傾きます。
Qは豆電球とつながっていませんので消えてしまいます。
Bのスイッチをオフにしても消えたままです。
電流が流れている状態を1、流れていない状態を0としていますから、
Aのスイッチは1を記憶させ、Bのスイッチは0を記憶させることになります。
  
図2-2でA、B両方ともスイッチをいれたら?
両方から引き寄せられて中途半端になってしまします。
記憶で必要なことは、
@) 0を書き込む
A) 1を書き込む
B) 書み込みしない
の3通りですから、もっとも単純には3つの端子をもつスイッチを使います。

図2-3 フリップフロップによる記憶
図2-3で、スイッチがまん中にあったら、
どちらの電磁石にも電流は流れません。
ですから書き込まれません。
スイッチがA側に倒れたら、P側の電磁石に電流が流れ、
1を書き込むことになります。
スイッチがB側に倒れたらQ側の電磁石に電流が流れ、
0を書き込んだことになります。
  
前に述べたように、3つに分ける方法もありますが、
今までの話では、スイッチは必ず0か1でした。
すなわち2通りで済ませてきたのですが、
ここだけ3通りでは、話が複雑になってしまいます。
そこで、書き込むか書き込まないかを、別スイッチにすることにします。
そうすると、書き込むか書き込まないかで2通り。
書き込むときには、0を書きこむか、1を書きこむかの、2通りとします。
すなわち,1ビットメモリの考え方を
図2-4のように,フリップフロップで表現してみます。

図2-4 スイッチを分けた書込み
図2-4は、ちょっと複雑に見えるかもしれませんが、
スイッチDで書き込む値を指定して、
スイッチCをオンにすると書き込まれます。
スイッチCをオフにすると、スイッチDをオンにしてもしなくても動きません。
[この動きを詳しく知りたい方は,こちらから]
すなわち、スイッチDは書き込むデータ、
スイッチCは,書き込むかどうかを示すスイッチとなります。
[この動きを詳細に知りたい方は,こちらから]
図2-4は,複雑ですので,
例によって、単純化した記号を使うことにします。
電源を省略し、入力と出力の2本線をひとつにします。
図2-4の点線枠内をひとつの箱(1ビット記憶)で示し、
D、C、R端子を記号で指定します。
ここで,D端子を「書込みデータ端子」、C端子を「書込み制御端子」、
R端子を「読込みデータ端子」等と呼ぶことにしましょう。
図2-4 記憶回路の単純化表現
  
今、2個のビット記憶があります。
データをどちらに書き込むかを指定するには、
書き込むビット記憶のC端子をオン(1)にし、
そうでないビット記憶のC端子をオフ(0)にすれば、
区別することができます。
図2-5 2個のビット記憶の書込み
ビット記憶を4個にしてみましょう。
4個のどれかを指定するには、Aのスイッチを増やして、
4種類を指定するようにします。
4種類を指定するには、2個のスイッチを使います。
図2-6 4種類分離
図2-6と4個のビット記憶を組み合わせると、
4個のビット記憶の中からひとつを選んで書き込むことができます。

図2-7 ビット記憶4個のどれかに記憶
A0とA1で4個のビット記憶どれかを選択していることになりますから、
4個のビット記憶に対して、
番地(アドレス)付けを行っていることになりますから、
A0, A1をアドレスと呼びます(この場合は2ビットアドレス)。
図2-6は、アドレスから書込み制御信号を生成していることになります。
更に、書込みを番地(A0, A1)と
書き込むデータ(In)の組で表現できたことにもなります。
同様に、図2-6の回路を使って、
ビット記憶のR端子からのデータも番地と値の組で表現できます。

図2-8 読込みデータ端子からのデータ取出し
図2-8のC0〜C3では、いずれかが1、その他は0になっています。
ですから1とAND演算したビット記憶だけのデータだけが有効となり、
その他はすべて0となります。
これらを、すべてOR演算するとA0、A1で指定されたビット記憶の
RがOut信号となります。
さて、4個以上になったらどうなるのでしょうか。
一例として16個の場合を示してみよう。
16個の場合、2×2×2×2=16ですから、
図2-9のように、4ビットのアドレス(A0,
A1,A2,A3)を使います。
このように、アドレスから書込み制御端子用の信号に変換する場合は、
AND素子とNot素子を配列状に並べた形になります。
この出力C0〜CFを、
図2-7と同じように16個のビット記憶の書込み制御端子に連結します。
更に、図2-8と同じようにAND素子、OR素子と連結することによって、
アドレス線によるビット記憶の参照ができます。

図2-9 ビット記憶16個のアドレス(4ビットアドレス)
  
図2-6、図2-7のように1個1個の素子を描いていると大変です。
そこで、更に単純化した図を使います。
書込み用のアドレス線、読込み用のアドレス線、
書込み用のデータ線(In)、読込み用のデータ線(Out)を除く部分を
ひとつのボックスで示します。
以下、これをアドレスつきビット記憶と呼ぶことにします。
図2-10 記憶回路の簡略化(ビット記憶4ビットアドレスの場合)
コンピュータでは、
1ビットではなく8ビット(1バイト)などの単位で扱いますので、
図2-10のような簡略化図で描くと、
図2-11のようにまとめて取り扱われます。
アドレスも16ビット、32ビットと長くなります。

図2-11 バイト記憶4ビットアドレス
  
図2-12のように、
アドレスつきビット記憶MのOut、
最も単純なビット記憶Xのデータ端子を連結し、
XのC端子にタイミングスイッチをつけてみよう。
@) まず、タイミングスイッチをオフ(0)としておく。
A) 読込みアドレスを設定する。
B) タイミングスイッチをオン(1)にする。
タイミングスイッチをオンにすると、
Mの該当するアドレスのデータが、Xに移動することになる。
図2-12 記憶の移動その1
逆に、図2-13(a)のようにアドレ付きビット記憶に、
タイミングスイッチを用意します。
単純なビット記憶のR端子と、
拡張されたアドレスつきビット記憶MのInをつなぎ、
タイミングスイッチを用意します。
書込みアドレス線にアドレスをセットして、
タイミングスイッチをオンにすると、
R端子からデータが移動することになります。

(a) アドレスつきビット記憶の拡張

(b) 単純ビット記憶からアドレスつきビット記憶への移動
図2-13 記憶の移動その2
以上は、メインメモリとCPU内のレジスタとの転送の原理です。
すなわち、アドレスに値を設定して、専用のスイッチをオンにすることで、
メインメモリとレジスタの転送がなされるわけです。
 
|