Instruction【NandGame編】
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Instructionレベル
Instructionレベルのゴールは、ALU回路とCondition回路(条件判定回路)を内蔵した回路を組むことです。
※将来的に当該回路(Instruction回路と呼ぶことにする)は複合メモリーと組み合わせてコンピューターを構成することになります。
入力 | ・I:ALUやCondition回路への命令。 桁に注目して0~11ビット目には、指定の動作が割り当てられている。 12ビット目については、ALUへの入力YがAか*Aを指示する。12ビット目が0ならA、1なら*Aになる。 ※ALUの入力XはDになる。 ・A:Aレジスターへの入力値。 ・D:Dレジスターへの入力値。 ・*A:RAMに保存するデータ値。 |
出力 | ・R:ALU演算の結果。 ・a:複合メモリー(Combined Memory)の制御用フラグの1つ。 ・d:複合メモリーの制御用フラグの1つ。 ・*a:複合メモリーの制御用フラグの1つ。 ・j:ALUの出力が、0~2ビット目で指定された条件を満たしているかどうか。 |
Instructionレベルを解く
1:ALU周辺の回路を実装する
splitterコンポーネントを使って、入力Iを各桁ごとにワイヤーに分岐します。これで各コンポーネントにフラグピンに接続できます。
aluコンポーネントを配置します。入力Iの仕様より、splitterコンポーネントの6~10はaluコンポーネントの各フラグにそのまま接続されます。
当該レベルの説明で、ALUの入力Xと入力Yについて言及されています。ALUの入力Xは当該回路の入力D、入力YはIの12ビット目でAか*Aのどちらかになります。
先にALUの入力Xの配線をしてしまします。これは単純に入力Dと直結すればよいだけです。
aluコンポーネントの入力Yは、Aか*Aのどちらかになります。Iの12ビット目(0スタート)で切り替えるということは、splitterコンポーネントでいう12番ピンで切り替えることになります。水道管に例えると、切り替え弁でYへのルートを制御することに相当します。それを実現するためにselect 16コンポーネントがぴったりです。
aluコンポーネントの出力が残っています。これについては、当該回路のOutputに自然に接続できます。
2:condition回路周辺を実装する
キャンバスにconditionコンポーネントを配置します。
conditionコンポーネントのltピン・eqピン・gtピンを使って、0と比較して条件内容を指定します。これはsplitterコンポーネントの0~2とそのままつなげます。
conditionコンポーネントのXピンには、判定対象となるデータ値を与えます。当該回路でいえば、aluコンポーネントの出力ピント接続します。
そして、conditionコンポーネントの出力ピンは、当該回路の出力j端子と接続します。
これでcondition回路周辺の実装は完了になります。
3:未配線のところを完了させる
当該回路の出力の3端子については、Iの4~6ビット目、すなわちsplitterコンポーネントの3~5ピンに対応するので、直結するだけです。
以上で当該レベルのクリアとなります。