General-purpose Memory【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
General-purpose Memoryレベル
General-purpose Memoryレベルのゴールは、一般的な用途のメモリー回路を実装することです。
ここでいう一般的な用途とは、あるアドレスへ読み込み・書き込みでき、別のアドレスにも同時に読み込み・書き込みができることを指します。
今回のメモリー回路は4つの16ビットレジスターを備えており、2ビットのアドレスでアクセスできます。
基本的な仕様は次のとおりです。
・a1とa0の2ビットでアドレスAを指定する。
・出力*Aには、アドレスAに格納されている値とする。
・st=1の場合、入力XをアドレスAに格納する。
・出力Iは、pc0とpc1で与えられたアドレスPCに格納された値とする。
・clはクロック信号。
General-purpose Memoryレベルを解く
1:4つの16ビットレジスターを配置する
解説どおりに4つの16ビットレジスターを配置します。
2行2列のメモリーセルと考えるとわかりやすいので、2×2の形で並べます。
clについては直結するだけです。
入力のX端子を各レジスターのXピンに接続します。st=1にならなければ、レジスターの内容は書き換わらないので、すべてを単純に直結して問題となりません。
2:メモリーアドレスの指定をワイヤリングする
a1とa0をそれぞれ、メモリーセルの列と行を指定するものとして考えます。これは3つのデマルチプレクサー(switchコンポーネントで代用)で実現できます。
stをONにしてから、a0とa1のON・OFFを手動でテストしてみて、各レジスターのstピンに1が入力されていることを確認します。
3:出力の*A端子をワイヤリングする
各レジスターからの出力をアドレス値によって振り分けます。そのために、3つのセレクターを使います。
セレクターのワイヤリングについては、ステップ2のデマルチプレクサーのワイヤリングを参考にしてください。
4:出力のI端子をワイヤリングする
ステップ3ではA端子で振り分けていましたが、ここではPC端子で振り分けます。
同様にして3つのデマルチプレクサーを配置して、同様のワイヤリングで実現できます。
5:テストする
テストにパスすると、クリアになります。
※テストパターンが少ないらしく、I端子の実装をしていなくてもクリアになります。