第16章では、いよいよメモリを構築していきます。メモリは、情報を保持できる装置です。
第14章では、フリップフロップ回路を紹介しました。
レベルトリガー型Dタイプフリップフロップは、1ビットの情報を特定のレベルの場合に保持することができました。よって、これを複数用いることでメモリを構築していこうと思います。また、これに合わせて入出力の呼び方を↓のように変えます。
出力Qを「データアウト」と呼び、クロック入力を「ライト」と呼びます。
ライト信号は、データイン信号を回路に保存(書き込み)します。普段は0で、データを保存しています。書き込みをするときに1にし、新しいデータの書き込みを終えると0に戻して保存します。
第14章でも言ったように、この回路はデータに錠を掛けるのでラッチとも呼ばれています。ボックスで表現すると↓です。
ここで、今回やりたいことを↓にまとめます。
8個の1ビットラッチをつなぎ、そこへ1つのデータイン信号を使って個別に保存すること(書き込み)と、その各々の値を1つのデータアウト信号を使って調べること(読み込み)ができるようにします。
それには、ラッチと次に紹介する8線-1線セレクタと3線-8線デコーダを使います。
8線-1線セレクタは、8個のデータ入力と3個のセレクト入力を持っています。セレクト入力は、どのデータ入力を出力するか選びます。8つの入力から1つの出力を選ぶので「8線-1線セレクタ」と呼ばれます。ボックスで↓のように表現します。
真理値表は↓です。
例えば、セレクト入力が000なら出力はD0と同じになり、101なら出力はD5と同じになります。回路図はかなり複雑なのでここでは割愛しますが、この本では詳しい解説付きで図が載ってるので、ぜひ読んでみてください!
8線-1線セレクタを使って、8個のラッチの1つからデータアウト信号を選ぶことができるようになりました。↓がその回路です。
これで、読み込みができる出力側が完成しました。あとは、書き込みができる入力側を設計します。
入力側はライト信号とデータイン信号があります。各ラッチに個別に書き込めるようにしたいので、8線-1線セレクタに似た、8個のラッチから1つを選んでWrite入力と同じ値をそのラッチに出力する回路が必要です。
この回路は、3線-8線デコーダと呼ばれます。例えば、左の上と下のスイッチを閉じると、セレクト入力は101となり、右から6番目のラッチのライト信号とWrite入力が同じになり、他のラッチのライト信号は0になります。これのお陰で、データイン信号を1つにつなげても問題ありません。
これで、全ての準備が整いました!次のものが今回の要件を満たす完全な回路です!
デコーダとセレクタへの3つのセレクト信号を同じにし、「アドレス」というラベルを付けます。この3ビットアドレスは8個の1ビットラッチのうち、どのラッチが参照されているのかを決定しています。
- デコーダ側のアドレス入力は、ライト信号がどのラッチのデータイン信号を保存させるかを決定しています。
- セレクタ側のアドレス入力は、8線-1線セレクタを制御してどのラッチのデータアウト信号を出力するかを決定しています。
今回の回路は、アドレス入力を変えるだけで、8個のラッチのそれぞれをランダムに読んだり書いたりできるため、ランダムアクセスメモリ(RAM)と呼ばれています。今回設計したRAMは8アドレスに1ビットを保存できるので、8×1のRAMと呼ばれます。
この章の後半では、このRAMを複数組み合わせることで、より大きな容量のメモリを構築していますが、尺の都合上ここでは割愛します。ぜひこの本で確認してみてください!
これまで、コンピュータを構成するほとんどの要素を説明してきました。正当なコンピュータと呼ぶためには、自動化をする必要がありますが、今回の『CODE』紹介はここで終わりにします。理由は最後の記事で説明します↓