Control Unit【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Control Unitレベル
プログラムは一連の命令から成り立ちます。そして、各命令はそれを決定するビットフラグの集まりであり、次の内容が確定します。
・実行するALU演算
・どのレジスターを入力として使用するか
・どのレジスターに演算結果を格納するか
そして、コンピューターはALU命令に加えて、データ命令もサポートしなければなりません。データ命令では、命令値が直接Aレジスターに書き込まれます。
Control Unitレベルのゴールは、命令Iの最上位ビット(0スタートの15ビット目)に応じて、データ命令またはALU命令のどちらかを実行する回路を組むことです。最上位ビットが0ならデータ命令、1ならALU命令を意味します。
[1]ALU命令の場合、出力RはALU演算の結果になります。
[2]データ命令の場合、出力Rは入力lであり、送信元はAレジスターになります。つまり、当該回路の出力であるaフラグは1、dとa*とjの3フラグは0でなければなりません。
Control Unitレベルを解く
1:ALU命令を処理する回路を実装する
ALU命令を処理するにはalu instructionコンポーネント(以降、aluコンポーネントと略す)の力が必要です。そこでキャンバスにaluコンポーネントを配置します。
aluコンポーネントの4入力については、当該回路の4入力と名前が同じことからも推測できますが、直結して構いません。
次にaluコンポーネントの出力ピンのワイヤリングを考えます。
ところで、当該回路の出力に関しては、ALU命令かデータ命令かによって変わってきます。これまで実装してきたテクニックによって、どちらの処理もやっておいて、それらの処理結果のどちらを出力するのかを制御するのです。そのためには出力側にセレクターを配置します。
入力Iの最上位ビットが1のときにALU命令になることを考慮すると、次の回路になります。
select 16コンポーネントのD1ピンが、aluコンポーネントの出力ピンとつながっています。
2:データ命令を処理する回路を実装する
select 16コンポーネントのD0側にデータ命令を処理する回路をつなげることになります。
仕様どおりに、入力Iをそのまま出力Rに渡し、aフラグだけ1固定、その他のフラグは0固定とします。
回路にすると次のようになります。
この回路は7つのコンポーネントが使わており、内部的に2,635個のNandゲートで構成されています。
以上によりレベルクリアになります。