#はじめに
コンピュータシステムの理論と実装の3章において
CPUのクロック周波数とランダムアクセスメモリの性質について「なるほどな。」って思ったことがあったので共有します。
#ラムダムアクセスメモリ
RAM(Random Access Memory)
ランダムアクセスメモリってランダムにメモリにアクセスするわけではないんですよね。
初めて聞いたときは適当なアドレスに不規則でアクセスしまくるものかと思ってました。
ランダムに選ばれたワードに対して、そのワードが位置する場所に制限を受けることなく、書き込み/読み込みができる、ということからきている。つまりメモリ中のすえてのワードは-その物理的に存在する場所に関係なく-同じ時間で直接アクセスできなければならない
という記載があります。
つまりメモリのアドレスが先頭の[0x00]のものでも、終端の[0xFF]ものでもアクセス時間が等しいということを表しています。
ちなみに、このワードというのはレジスタを表していると考えてください。
メモリは複数個のレジスタを組み合わせることで構成されています。
レジスタの実装について
レジスタがどのように実装されているかというと、下図のようにマルチプレクサとD-フリップフロップにて構成されています。
このマルチプレクサ1のセレクタの値がtrue
の場合にはInput
の値を出力するようになり、セレクタの値がfalse
の場合には前回の出力Output(t-1)
をそのまま出力することになります。
この判定はクロックカウンタ毎に行われ、セレクタの値をfalse
にし続けることにより、データがメモリ上に保存されるということを実現しています。
#組み合わせ回路と順序回路
この時ポイントとなるのが、マルチプレクサは組み合わせ回路であり、D-フリップフロップは順序回路であるということです。
何が違うかというと、組み合わせ回路はInputに対して瞬時にOutputが切り替わります。
一方、順序回路はクロックカウンタ2のタイミングによってOutputが切り替わります。
これを踏まえ、レジスタの値をあるアドレスのメモリの値で書き換える場合を考えます。
case1:最寄りのアドレス[0x00]番地のメモリの値で書き換える
case2:一番遠いアドレス[0xFF]番地のメモリの値で書き換える
を考えたときに、アドレスによって値を参照する時間が若干異なるものとします。(電気的な都合上)
例えばアドレス[0x00]の値を取得するには100n[s]
必要で、アドレス[0xFF]の値を取得するには130n[s]
必要であるとした場合
マルチプレクサは組み合わせ回路であり、Inputに対して即座にOutputが切り替わるため、case1のほうが早くOutputが切り替わります。
これでは上で示したランダムアクセスメモリの性質に反します。
この時これを帳尻合わせしてくれるのがD-フリップフロップです。
D-フリップフロップは順序回路であり、クロックカウンタのタイミングでOutputを切り替えます。
そのため、例えばクロックカウンタの周期を150n[s]
としてあげると、[0x00]のメモリにアクセスした場合に100n[s]
のタイミングでマルチプレクサのOutputが変化した場合でも、D-フリップフロップのOutputは変化しません。
一番時間のかかるケースの時間にクロックカウンタの周期を設定することで、どのメモリにアクセスしても同じ時間でOutputが得ることができます。
このような仕組みによってランダムアクセスメモリの性質が実現されています。
#まとめ
- ランダムアクセスメモリの性質が実現できているのは順序回路のおかげ
- クロックカウンタの設定が大事
-
マルチプレクサについては前回記事参照:CPUの演算処理を司るALUの仕組み ↩
-
クロックカウンタというのはCPUのクロック周波数に依存するものであり、よくCPUのスペックに〇〇GHzとかいてあるあれの値に依存します。 ↩