NATUを作る(パート6)
HARUは失敗に終わってしまった。
だが、その悔しさをバネに、新たにNATUを作ることになった。
今回は、NX RED VIIIの実行ユニットの続きを作っていきたいと思います。
レジスタデリート
レジスタデリートとは、僕独自の高速化技術です。
条件分岐が読み出されたときも「フラグはオフだった」と仮定して次の命令を読み出し続けます。
フラグの信号がオンだった時、PCを指定した値に書き換えるということになるので、仮で読み出し実行した命令の演算結果を遮断する必要があります。
なので、今回は遮断する回路を作っていきたいと思います。
制作
フラグがオンだった時、その信号をレジスタの命令デコーダーに伝えることで、レジスタに保存させないようにして、なかったことにしたいと思います。
そのためには、レジスタの下部についている命令デコーダーと、ALUの上部にあるフラグを配線でつなぐ必要があります。
では、早速作っていきましょう!
まずは、既にあったアキュムレータの配線を少し変えて、左右のレジスタに配線を繋げました。
これで、レジスタの命令デコーダーにつながったので、今度はALUのフラグの方の配線を伸ばしていきます。
これで、フラグの信号がレジスタの命令デコーダーに伝わるようになりました。
では、実際に動かしてみて、遅延を調節していきたいと思います。
実際に動かした結果、3rt追加すればピッタリであることが判明しました。
また、実際に仮で読み出される命令は、1つではなく複数になります。
なので、複数回遮断できるように、回路を少し改造していきます。
改造後の回路が、上の画像です。
コンパレータのぐるぐるを追加したことで、指定した回数遮断させることが出来るようになりました!
これで、レジスタデリートはほぼ完成です。
そして、実行ユニットが完成しました!!
この実行ユニットは、個人的にバランスが取れていていい実行ユニットだと思っています。
ALU→ほぼなんでもできる
アキュ→8rt
スレッド→最大4スレッド
レジスタ→15Byte
I/Oポート→7ポート
一部分だけに特化しているわけではないので、今後も使いまわしたいと思っています。
前は、CPUを作る度に毎回ALUを0から作り直していましたが、最近はだんだん洗練されてきて、作り直しても頭打ちしてきているので、使いまわした方が色々といいはずです。
毎回作り直すということは、その分不具合が出てくる可能性があるということでもありますし。
まぁ、I/Oポートの接続方法だけ少し僕の赤石CPUとしては変わっていますが、許容範囲だと思っています。
それでは、今回はここまでです。
次回は何を作ろうかな~
今回は、約30分の作業でした。
お疲れさまでした。
それじゃあ、次回、また会いましょう