コアメモリについて

non object

コアメモリはランダムアクセス可能で不揮発性だが破壊読み出しであるといった性質があり、なかなかおもしろい動作原理です。まずは、実物の写真を。コアメモリ時代の末期に作成されたコアメモリアレイのためコアのサイズが非常に小さくなっています。

core memory array
約11 cm×8.5 cmのアルミ基板上に直径約0.3 mm強のコアが73728個(18 bit/Wordで4 KWord分)配線されています。一つ一つのコアには3本の電線が通されています。左側の一部にカメラのフラッシュを電線が反射してしまって赤っぽく光っているところがありますね。コアばかりか電線も密集しています。その拡大写真を次に示します。上の全体写真で黒くベタになっている長方形部分の一部を拡大したものです。
core memory zoom image
縦糸というか縦に走っている電線に影ができてしまって見にくくなっていますが、コア1個に対し1本の電線が縦に通っています。横には2本の電線が通っていることがわかるでしょうか。右側のすきまでクロスしている赤い電線と、まっすぐ走っている銅色の電線なんですけど。全体写真で黒くしか見えない縦長の領域には64×32個のコアが含まれています。拡大写真では横に32個並んでいるのが数えられます。実物ではコアの密集部分の横幅は7 mmくらいです。ですからコアの小ささも想像できるでしょう。この写真の電線も、髪の毛より細いくらいのものですし。

もちろんこれ以外に大量の増幅回路や駆動回路がないと、コンピュータのメモリとしては使えません。そういったメモリボードの形になっているものについては、HITAC-10IIで使われているコアメモリボードとして、御覧に入れます。
それでも意外と小さいという印象をもたれるのではないかと思います。1970年代の初期、256 bitスタティックメモリや1 KbitダイナミックメモリのLSIが使われるようになっても、サイズ的にはほぼ互角、アクセスタイムでは少しコアメモリが有利、信頼性では実績でコアメモリ、価格的にはLSIメモリが有利になる傾向があるという状況でした。n-MOSの1 Kbitスタティックメモリや4 Kbitダイナミックメモリが使われるようになると、不揮発性という面を除けば圧倒的にLSIメモリが有利になり、特殊用途以外はコアメモリが使われなくなります。

これからコアメモリの動作について書いていこうと思います。まずは書き込み特性について扱い、それから読み出しの原理を見て、最後にランダムアクセスの仕組みについて考えます。
書き込み動作の説明のため、もっとも単純なコアと信号線の配置について、図を作成してみました。

core memory configuration 1
図1: コアと電線

はい、最初は強磁性体粉末をドーナツ状に固めたトロイダルコアがひとつだけです。そのトロイダルコアの中央に1本の電線を通した配置について考えます。この図で電線に左から右へと電流を流すと、その周囲に右回りの磁場が生じ、コアを右回りに磁化しようとします。逆向きに電流を流せば左回りの磁場が生じます。
コアの内部に右回りの磁束が生じているか、左回りの磁束が生じているかで、0か1かを記憶させるのがコアメモリの記憶の原理なんですが、では電流をどれだけ流すとどのような磁束が生じるのかってことが問題になります。コアの材質が磁気ヒステリシス特性を持つ強磁性体であるため、その点が少々複雑になっています。次の図を見てください。

H-B chart 1
図2: H-Bグラフ

これはコアメモリのコアに使用されるような材質について、与えられた磁場Hを横軸に取り、それによって材料内部に生じる磁束密度Bを縦軸に取ったグラフです。えーと、反磁場係数が充分に小さいとか、細かいことを省略してしまうと、横軸はコアの中心を通る電流に比例したもので縦軸はコアの磁石としての強さと考えることができます。横軸は図1の電線に流した電流の大きさに対応していて、そうですね、図1で左から右へと電流を流したものが正の向きとしましょうか。ですから、グラフの左半分の領域は電線に右から左へと電流を流したことに対応します。縦軸は大まかにいえばコアの磁石の強さに対応しているとしましたが、右回りの磁束密度が大きくなればなるほど上の方へ、左回りの磁束密度が大きくなるほど下の方へ来るということになります。コアの中心を通る電流に応じて、コア内部の磁束密度はグラフの曲線上のどこかの点に対応した大きさとなります。
さて、電流を流していない状態、つまりHが0のとき、コアの状態はA点かB点のどちらかが有りえます。コアの材質は何もなくても磁石になっていられるようなものが選ばれていますから、右回りの磁束を持つ磁石(A点に対応)か、左回りの磁束を持つ磁石(B点に対応)の、どちらかの状態になっています。このように、安定した状態が二つ存在するような性質を、双安定性と呼びます。双安定性を持つもの(材料や回路や機構など)は、その一方の安定状態を0に、もう一方を1に対応させることにより、デジタル的なメモリとして利用することができます。本質的に双安定性に支えられたメモリをスタティックメモリの定義とすることもできますね。
最初、コアがB点で表されるように左回りに磁化されていたとします。これをA点の状態に変化させるにはどうすればよいかといえば、当然ながら電線に電流を流してその電流によって生じる磁場でコアを逆向きに磁化します。B点から徐々に電流を正の向きに流していくと、E点を経由してさらにC点のあたりまできます。C点よりも電流を増加させても、もう磁束がそれ以上増加しなくなります。その状態で電流を切断すると、E点を経由して再びB点に戻るのではなく、A点の表す状態になります。C点を越えて磁化すると、必ずA点の安定状態に移動し、B点に戻らないというのがミソです。ただし、B点から出発してE点のあたりまで電流を流した状態から再び電流を0に戻すとB点に戻ってきます。磁束密度が飽和したC点付近まで到達するかどうかが、分岐点になります。
A点の状態からB点に状態を変化させるには、同様にD点を越えるだけの電流を、先ほどと逆向きに流せばよいわけです。このように、ある値より大きな電流を中心の電線に、左から右、あるいは右から左へと短時間流すことによって、電流を切ったあともコア内部に右回りか左回りかの磁束が保持されます。これで電源を切断した後も記憶が残る不揮発性メモリとして、コアメモリに情報を記録できたわけです。

1 bitの情報を、コア内部の右回りの磁束と左回りの磁束に0と1を対応させることによって安定に保持し、その内容を書き換えられることはわかりました。では、どうやって読み出せばよいのでしょうか。磁束はトロイダルコアの内部に保持され、外部にはほとんど漏れてきませんから磁気センサのようなもので読み出すことはできません。そもそも速度や感度で実用的な磁気センサの大半は半導体製品で、そんなものが大量に使用可能なら半導体メモリを実用化できるはずです。コア内部にだけしか存在しない磁束を検出する方法としては、アハラノフ・ボーム効果の応用で電子線干渉法を用いて測定する方法というのも現在は確かに存在しますが、大がかりな装置が必要でメモリ向きではありませんね。静的な磁束の状態をそっと検出するのは難しそうです。
では、実際にどのようにして情報を読み出しているのかというと、次のようにコアに通す信号線を1本増やして、電磁誘導を利用して磁束の向きを調べています。

core memory configuration 2
図3: 読み出し線を加えたコアメモリ

左の図では図1のときから存在した信号線を書き込み線(w)とし、さらに赤で示された読み出し線(r)が追加されています。これだけでは周辺回路の関係とかの想像がつきにくいですが、右にトランス風に書き直してみました。書き込み線wはパルス発生回路から駆動されて、書き換えに必要な電流を流せるようになっています。読み出し線rは抵抗が接続されているように書かれていますが、検出用増幅回路(センスアンプ)の入力インピーダンスを抵抗に代表させていると考えてください。抵抗の両端に生じる電圧を増幅して、コアメモリの出力信号として扱います。トランス風の絵ではwもrも3回ほどコアに巻き付けてありますが、左の図のように中心に通しただけでも1回巻きのコイルになっていることに注意してください。
コアメモリ用のトロイダルコアでなくてトランス用の磁性材を使用していたとすると、パルス発生回路からの電流でコア内に磁束が発生し、その磁束の変化分によって2次側のrの回路に起電力が発生し、負荷抵抗に電流が流れるはずです。電磁誘導を用いたトランスの原理ですね。おっと、コアメモリ用の磁性体とトランス用の磁性体が異なるような書き方をしてしまいました。実はかなり異なる特性を持っています。図2ではB点からC点へ行くグラフとA点からD点へ行くグラフが、かなり離れている材料でした。トランス用の磁性体では、これらの曲線ができるだけ一致するような、できれば重なって同一の1本線になるような材料を選びます。というのは、電力伝送に使用する場合、B-H曲線で囲まれた部分の面積が大きいとそれだけ多くの電力損失が発生し、コアで熱に変わってしまうためです。信号伝送に使用すると、コアメモリ用の材質では信号歪みが大きくなります。
では、定常状態では常に右回りか左回りの磁束を保持しているコアメモリのコアに対して、書き込みパルスを加えたときに読み出し線にどれだけの起電力が発生するでしょうか。誘導起電力はコイル内を横切る磁束の変化量に比例します。コア内部の磁束密度が一様だとすれば、コアの断面積を磁束密度に掛けることによって磁束が求まりますから、磁束密度Bの変化量に比例した電圧が読み出し線に誘導されるはずです。そこで、次の図4をご覧ください。

H-B chart 2
図4: A状態とB状態を始点とする読み出し時の磁束密度変化量

これは先ほどの図2とほぼ同じものです。ここでそれぞれA点が0、B点が1を、保持している状態だとします。そうして、書き込み線wに0を書き込むパルス電流を流したとします。コアの状態が最初はA点の0を記憶した状態だとすると、0を書き込むパルス電流によって状態がA - C - Aと変化します。すると、磁束密度はd2だけ正に変化してから(A - Cの変化分)d2だけ負に変化します(C - Aの変化分)。ところが、コアの初期状態がBにあったとすると、0を書き込むパルス電流によってB - C - Aという状態変化が生じます。つまり磁束密度はd1だけ正に変化してからd2だけ負に変化します。
この磁束密度の変化分に比例した誘導起電力が読み出し線に生じるわけですから、コアが1を記憶していた場合に限り、大きな電圧パルスが読み出し線に出力されることになります。これで、コア内の磁束の向きを読み出すことができました。
ただし、この方法にはひとつだけ解決すべき問題があります。読み出した後、コアメモリの記憶が書き換えられてしまって、再び同じデータを読み出すことができないのです。このような読み出し方法を破壊読み出しと呼びます。破壊読み出しになっているメモリは現在でも大量に使われています。俗にいうDRAMの類はすべて破壊読み出しといってよいでしょう。破壊読み出しでは1回読み出すとデータが消えてしまうというのに、実用になっていますね。破壊読み出しのメモリでは、読み出した直後、読み出したばかりのデータを再び同じアドレスのメモリに書き込んでいるのです。そうやって、次の読み出しに備えています。コアメモリの場合、メモリ制御回路によって自動的に書き込み操作が行われるようにするのが普通です。そのため、データを読み出した直後にメモリにアクセスすることのできない時間が生じます。内部回路で書き込みを行なっている時間ですね。DRAMでも同じことで、LSI内部で自動的に特別な書き込みサイクルが起動されています。ただ、最近のDRAMは多数のビットを同時に読み出して出力ラッチに保持し、それを順次出力できるようにするなどして、無効時間の影響を減らす工夫をしていますけど。

コア1個に対しての読み書きの方法はわかりました。しかし、多ビットのメモリ装置を構成する上では問題がまだあります。上記の例では、コア1個についてパルス駆動回路とセンスアンプが専用に必要となります。パルス駆動回路やセンスアンプを真空管やトランジスタで製作すると、どちらも数個の素子が必要なそれなりに複雑な回路になります。これではコアを使わずに周辺回路の分の真空管やトランジスタで記憶回路を構成した方が安価で高性能になってしまいます。読み書きのための素子も含めスタティックメモリを構成するフリップフロップ回路はトランジスタやダイオード数個、パルス駆動回路とセンスアンプで必要な素子の合計の数分の1の規模の回路で製作できますから。多数のコアに対し、少数のパルス駆動回路やセンスアンプしか必要としないメモリモジュール構成でないと実用的ではないのです。
まずはセンスアンプの側から見ていきます。書き込みパルス電流を流したコアだけが読み出し線に信号を出力して、書き込みパルス電流を流していないコアからは何も信号が出ないことを考えれば、複数のコアに1本の読み出し線を通しておいて、その出力信号を増幅するセンスアンプをひとつだけ配置することができそうです。ちょうど、下の図5のようになります。

core memory configuration 3
図5: センスアンプの共用

ドライバは1回の読み書き操作について、ただひとつだけがパルス電流をコアに流します。他のドライバは書き込み線と電気的に切り離された状態になっています。駆動されていないコアは読み出し線に流れる信号にどのような影響を与えるでしょうか。それらのコアは読み出し線が1次側で書き込み線が2次側となる一種のトランスのように働きますが、駆動されていない書き込み線は電気的に切り離されていて電流が流れませんから、エネルギーロスを発生させる心配はありません。さらにコアを通っている分だけ、読み出し線の自己インダクタンスが増加します。この自己インダクタンスはパルス状の読み出し信号の通過を妨げるように働きますが、極端に多数のコアを通さなければ読み出しに影響を与えないはずです。実際には、1024個とか4096個とかのコアについてセンスアンプ1回路で済ますことができたようです。
これなら、コア自体は磁性体粉末を焼き固めただけの単純で安価な部品ですから、トランジスタや真空管でフリップフロップを構成するよりは安価にメモリモジュールを構成できそうです。多数のフリップフロップの特定の回路の出力だけを読み出し線に出力するスイッチに半導体素子1個だけが必要だとしても、4096 bitのメモリなら4096個のスイッチ用半導体素子が必要になるのですから。
おっと、コアメモリで個別のコアの選択を行なっていたのはドライバ回路の功績ですね。このままだとドライバ回路は記憶容量のビット数と同じだけ必要になります。では、ドライバ回路の数を減らす方法について見ることにしましょう。
ドライバ回路を減らすために使われる回路構成を図6に示します。書き込み線は今まで1本でしたが、これからは行と列の2本に別れています。

core memory configuration 4
図6: ドライバ回路の2次元的配置

なお、図5ではドライバやセンスアンプとコアの間にループ状の電線をきちんと描きましたが、この図6では絵が見にくくなるのでコアの中に通る電線だけを描いてあります。もちろん実際には図5と同じようにループ状に配線が行われています。最初のほうに示した拡大写真では、縦方向に書き込み線の一方が、横方向に書き込み線の残りと読み出し線の2本が、コアに通されているのを実際に読み取れるかもしれません。
このように、ちょうどグラフのような見方をすれば、x軸とy軸に並行となるように2種類の書き込み線がドライバによって駆動されています。さらに、ドライバの駆動能力に重要な変更があります。今までは図2でHが0の位置からC点に相当する電流を流していましたが、今回の回路ではE点に相当するあたりまでの電流です。C点に相当する電流の半分より少し大きい電流までです。これが、ドライバ回路の数を減らすのに本質的な工夫です。
行と列のドライバのうちのそれぞれひとつが、それだけのパルス電流を流したとします。駆動された書き込み線に属するコアの内、交点に存在するコアを除いた多数のコアはE点に相当するだけの書き込み電流の影響を受けますから、パルス電流が消失した場合には初期状態に復帰します。初期状態がA点であろうとB点であろうと、E点に相当する電流を流しただけでは最初の状態に復帰するだけで、書き込みが行われないことに注意してください。ところが交点のコアだけはE点に相当する電流を2倍流されることになります。つまりC点よりも少し右側まで励磁されます。すると、初期状態がA点であろうがB点であろうが、パルス電流がなくなるとA点に状態が変化します。つまり交点に存在したコアだけに情報が書き込まれるのです。B点の状態にするには、行と列のドライバによって大きさは同じだが向きが逆の電流を同時に流します。
読み出しは、原理は1個のコアに対するものと同じです。もっとも、B点からE点にだけ駆動されたコアもそれなりに大きな磁束変化を起こしていることは確かです。ただし、この場合にはB - E - Bという過程を経ますから、正負同じ大きさのパルスが発生します。交点のコアがB点の状態にあった場合にはB - C - Aという変化ですから、B - CとC - Aの過程で非対称のパルスが発生します。そのため、一定の時間積分して、非対称成分だけ検出することにすれば、交点の情報を読み出せます。
さて、この方法でどれだけドライバ回路を節約できるのでしょうか。図では4×4のマトリックス状のコア合計16個に対し、8回路のドライバ回路が使用されていて、半分の節約にしかなっていません。しかし、仮に1024個のコアをマトリックス状に正方形に並べると32×32ですから64個のドライバ回路ですみます。1個のコアに1回路のドライブ回路を割り当てるのと比べれば、1/16で、相当な節約になっています。また、4096個のコアについてなら64×64で128回路のドライバで、1/32です。仮にドライブ回路に10個のトランジスタが必要だとしても、1 bitの情報についてどれだけのトランジスタがドライブに必要か考えてみれば1個以下となり、コアに比べて高価なトランジスタや半導体の数を、フリップフロップ回路で記憶するのと比較して劇的に少なくできたことがわかると思います。さらに、ランダムアクセスタイプのメモリでは、多数の記憶素子(素子1個が1 bitを記憶するとして)の情報のうちのひとつだけをアドレス情報から選択して出力しなくてはならないために、記憶用とは別に多数のスイッチ回路が本来は必要となります。そのスイッチ回路の規模が小さくて済むのも、コアメモリの利点でした。
現在使用されているメモリLSIも、メモリセルを2次元的に配置してランダムアクセスのための選択回路の規模を減らしています。ただ、それでも各セルに記憶用とは別に読み書きのためのデータ入出力スイッチ用トランジスタを組み入れなくてはなりません(例:現在のいわゆるDRAMは記憶用のコンデンサ1個と入出力スイッチ用トランジスタ1個でメモリセルが構成される)。それと比べると、データ入出力スイッチ用の(当時は高価であった)能動素子を必要としないコアメモリは、確かにランダムアクセスメモリ向きのメモリであったと言えるでしょう。
また、コアの構造は単純で(磁性体を焼き固めたものですから)、真空管やトランジスタの故障率や不良率が高かったのと比べれば故障しにくく、当時のメモリ素子としては信頼性が高かったのも利点です。まぁ、設計が悪いと特定のコアに読み書きが集中したときにコアの温度が上昇して、磁気的な性質が変化するために誤動作することがあるなんて悪口もありましたが。あ、私は若いので体験したことはありません。噂です。原理的には、設計が悪いとありえることなんですが。