Turing Complete【Turing Complete編】
目次
はじめに
いつもブログをご覧いただきありがとうございます。
コーストFIRE中のIPUSIRONです😀
Turing Completeステージ
Turing CompleteステージはCPU ARCHITECTUREセクションの最終ステージであり、ステージのゴールはCPU回路を完成させることです。
Conditionモードがまだ実装されておらず、過去にアンロックしたCONDコンポーネントを組み込むことになります。
※ここをクリアすると、コンピューターがアンロックされて、以降はPROGRAMMINGセクションに進みます。
Conditionモードを実現するCONDコンポーネント
Instructionビット列の上位2桁が11bならConditionモード
例えば、Instructionビット列が1100 0011bだった場合は、Conditionモードで処理されます。
下3桁で条件式を区別します。
Conditionモードが指定された場合は、REG 3のバイトデータを対象に条件式を満たすかを判定し、満たしたらREG 0のバイトデータをプログラムカウンターに上書きします。
Conditionモードの目的
通常プログラムカウンターはインクリメントした値を出力し、その結果プログラムメモリーを1番地ずつずらしながらバイトデータを取り出し、CPU回路(のコア部分)に送り出していきます。
Conditionモードは条件が満たされると、プログラムカウンターの値が上書きされるといいました。上書きされるということは、プログラムメモリーにおいて隣の番地ではなく、別の番地にジャンプしてバイトデータが取り出されます。つまり、プログラムは通常逐次的に処理されますが、条件によって処理が分岐して、処理先が飛ぶ場合があります。これを実現するための回路なのです。
※アセンブリ言語の世界では、比較命令と条件ジャンプ命令をセットで使います。比較命令を実行すると、フラグレジスター内の一部のフラグが切り替わります。次の条件ジャンプ命令によって、フラグの状態を見てジャンプして処理を進めるか、そのまま逐次的に処理に進めるかが決まります。
CONDコンポーネントの入出力
入力 | ・Conditionピン・・・8ビット。Instuctionビット列。 ・Inputピン・・・8ビット。(0との大小比較を比較する)対象バイトデータ。 |
出力 | ・Resultピン・・・1ビット。比較結果。大小比較の条件式が真(True)ならON、それ以外ならOFF。 ※常にONやOFFになるパターンもある。 |
CONDコンポーネントが内部で判定している条件式
Instructionビット列の下3桁 | 条件式(満たせばResultからONを出力) |
---|---|
000b | 常にOFFを出力 |
001b | 「REG 3 = 0」ならONを出力 |
010b | 「REG 3 < 0」ならONを出力 |
011b | 「REG 3 ≦0」ならONを出力 |
100b | 常にONを出力 |
101b | 「REG 3 ≠ 0」ならONを出力 |
110b | 「REG 3 ≧ 0」ならONを出力 |
111b | 「REG 3 > 0」ならONを出力 |
※Conditionsステージの記事を読み直すと、CONDコンポーネントやConditionモードの理解を深められるはずです。
Turing Completeステージを解く
1:CONDコンポーネントの入力をワイヤリングする
REG 3の右側にCONDコンポーネントを配置します。
CONDコンポーネントはREG 3が保持するバイトデータを対象とするので、入力として受け取る必要があります。そこで、「CONDコンポーネントのInputピン」と「REG 3のAlways outputピン」をつなげます。
どういった条件で判定するのかはInstructionビット列に含まれているので、これも入力として受け取らなければなりません。ALUのInstructionピンまでInstructionビット列が届いていますので、ここからワイヤーを伸ばして、「CONDコンポーネントのConditionピン」につなげます。
※当該ステージのワイヤーとして黄色を採用しました。
2:CONDコンポーネントの出力をワイヤリングする
CONDコンポーネントの出力であるOutputピンは条件判定の結果が流れます。条件式が満たされればONが出力されますが、そのときだけ、プログラムカウンターの上書きを有効にします。
ここで、プログラムカウンターを実現している8 Bit Counterコンポーネントの入出力を見ておきます。
プログラムカウンターの出力は接続済みですが、入力はまだ何もつながっていません。
「プログラムカウンターのIncrement / Overwriteピン」と「CONDコンポーネントのOutputピン」を接続します。
ただし、Conditionモード以外のときは「Increment / Overwriteピン」につながるワイヤーが常にOFFになるようにします。そのためには、DECコンポーネントで制御します。DECコンポーネントの3番ピンの接続がまだであり、このピンがONになるのはConditionモードとして解読できた場合になります。
次のように8 Bit Switchコンポーネントを挟むことにしました。
プログラムカウンターのOverwrite valueピンには、上書きするためのバイトデータが入ります。
REG 0のAlways outputピンからバイトデータを持ってくるようにワイヤリングします。
3:テストする
テストに通過すると、Turing Completeコンポーネントがアンロックします。
おわりに
ここまでのクリアしてきたステージは次の通りです。
おめでとうございます!そして、お疲れ様でした!
NANDゲートからスタートしてCPUまで設計してきました。
デジタル回路の世界には慣れたでしょうか。
シミュレーター上でCPUの自作までを体験できたことになります。
デジタル回路や自作CPUに興味を持ったのであれば、実物の回路を組んでみるのもよいでしょう。実物は物理的な特性を理解する必要があり、学習すべき内容も多いですが、Turing Completeを通じてここまで到達した方であれば基礎知識は十分に習得済みなので学習のスタートダッシュはできるはずです。
次のステージからはプログラミングのセクションに入ります。