![見出し画像](https://assets.st-note.com/production/uploads/images/147699014/rectangle_large_type_2_974184c58139d530c2644557a1066417.png?width=1200)
NATUを作る(パート3)
HARUは失敗に終わってしまった。
だが、その悔しさをバネに、新たにNATUを作ることになった。
今回は、NX RED VIIIの実行ユニットを作っていきたいと思います。
ALU
まず、前世代であるNX RED VII(ver.3)の実行ユニットをコピーしてきました。
![](https://assets.st-note.com/img/1721293642078-UgHRWvcqVj.png?width=1200)
ALUは全く同じにしようと思っているので、NX RED VII(ver.3)のALUを使いまわした方が、作業も一瞬で終わるので、効率がいいです。
ALU自体はちゃんと動きますが、デコーダー部分は少し不安が残ります。
NX RED VII(ver.3)は失敗作なので、どこにその原因があるのかがまだわかっていません。
なので、実行ユニットが完成したら、その辺もしっかりテストしたいと思っています。
とりあえずは、動くと信じてそのままコピーして使います。
アキュムレータ
NX RED VII(ver.3)にはなかった回路ですが、今回はアキュムレータを実装したいと思います。
アキュムレータは、ALUの演算結果を高速にALUの入力部分に伝達する記憶装置です。
今回は、多段階アキュムレータではなく、通常の一つのアキュムレータで行こうと思っています。
その理由は、今回の場合は8rtの速度で動けば十分だと思ったからです。
ですが、NX RED VII(ver.3)の実行ユニットには、アキュムレータがないため、その部分を作り直す必要があります。
では、まずはその部分を作っていきたいと思います。
ちなみに、上の画像の黒のブロックは、アキュムレータをどこに通すか考えてるときに設置したものです。
制作
それでは、まずはNX RED VII(ver.3)の実行ユニットにメスを入れていきます。
具体的には、アキュムレータを設置するための改造を行っていきます。
![](https://assets.st-note.com/img/1721317991693-yotRIap0JU.png?width=1200)
そこで、僕は思いました。
中途半端に性能上げるくらいなら、上げる必要ないんじゃないか
まぁ、アキュムレータを取り付けるのが面倒なだけですが、そんな気がしました。
だって、性能を重視するなら、10HzのNX RED VIを超えるのを目指した方がいいわけですし。
まぁ、そんな疑問は置いておいて、アキュムレータを取り付けるために改造していきます。
~数分後~
![](https://assets.st-note.com/img/1721320482021-01ppY4K4xh.png?width=1200)
無事、アキュムレータを取り付けることが出来ました!
これで、8rt毎の演算が可能になったはず、、、
制御回路がんばらないとなぁ、、、
それじゃぁ、次はレジスタを取り付けていきたいと思います。
が、ここで問題が発覚しました。
GPU関係の命令を読み出した時、5つのレジスタの情報を読み出すのですが、5Hzで動作させる予定のため、1スレッドに与えられた猶予は2rtしかありません。
つまり、2rtの間に5つの情報を送らないといけないということになります。
3回に分かることも可能ですが、そうすると今度は速度が一気に遅くなってしまいます。
PCを巻き戻して…ROMの出力に反映されるまで待って…
としないといけないためです。
ですが、良い解決法が思い浮かびました。
それは、複数の配線を使うというものです。
レジスタから複数の配線を伸ばすことができれば、猶予が短くても、たくさんの情報を送ることができるようになります。
それでは、レジスタを設置していきたいと思います。
![](https://assets.st-note.com/img/1721359179390-NRqZxbZuJ7.png?width=1200)
レジスタとI/Oポート部分を、コピーしました。
まずは、B(11)番地の色をオレンジから緑にしたいと思います。
![](https://assets.st-note.com/img/1721359750033-T4ZrtCy58m.png?width=1200)
緑に置き換える作業が終わったので、次はレジスタとALUを接続していきたいと思います。
![](https://assets.st-note.com/img/1721360097724-wHX7Wdry6v.png?width=1200)
ALUとレジスタがつながりました。
アキュムレータを使った場合、8rtの速度で動作し、レジスタベースの場合は16rtの速度で動作します。
それでは、次はレジスタを増設していきたいと思います。
HARUの場合はレジスタは0番地がゼロレジスタ、1~14番地がレジスタ、15番地がI/Oポートに割り当てられていましたが、今回の場合はI/Oポートは別の場所に移動になるので、その代わり15番地をレジスタに割り当てることが出来るようになります。
それでは、作っていきたいと思います。
![](https://assets.st-note.com/img/1721360555862-rDovCEEGtz.png?width=1200)
まずは、I/Oポートを壊していきます。
NATUの場合、I/Oポートの位置や仕様が変更になるので、HARUで使われていたこのポートは使いません。
![](https://assets.st-note.com/img/1721360721964-hUl0VxkDcW.png?width=1200)
I/Oポートが無くなったので、ここにレジスタを取り付けていきたいと思います。
![](https://assets.st-note.com/img/1721361130998-tSQgX2UmtH.png?width=1200)
レジスタの取り付けが完了しました
赤石ブロックがおいてあるのは、負荷軽減のためです。
僕にも原理はよくわかりませんが、弱めの信号を与えておくことで、負荷が下がるらしいです。
次は、デコーダー部分を作っていきたいと思います。
![](https://assets.st-note.com/img/1721362639251-JupQPOhoxS.png?width=1200)
レジスタのアドレスを入力する部分の回路が完成しました。
入力は、信号強度で行います。
この回路が無いと、レジスタは正常に動作できません。
それでは、次はALUの入力部分からも配線を伸ばして、ちゃんと動作するか確かめてみたいと思います。
![](https://assets.st-note.com/img/1721363461334-jw5X7sbTgX.png?width=1200)
ちゃんと動作しました!
インクリメントはちゃんと動作したので、他の演算も試してみます。
では、デクリメントを行ってみます。
あ
動かないと思ったら、配線がつながっていませんでした。。。
![](https://assets.st-note.com/img/1721363643191-om6q71NGpW.png?width=1200)
当然、このままでは動きません。
なので、修正しておきました。
![](https://assets.st-note.com/img/1721363778322-gS0FzEimfL.png?width=1200)
デクリメントも動作しました!!
映像で伝えられないのが残念ですが、ちゃんと動作しています!
他の演算(XORなど)も動かしてみましたが、問題なさそうでした
そして、右シフトを指定した時、、バグりました。
遅延が1rtずれていただけだったので、修正しました。
![](https://assets.st-note.com/img/1721364830842-k2wWKjEWzr.png?width=1200)
これで、実行ユニットは完成、、、!
、、、と言いたいところですが、まだアキュムレータの制御回路が残っています。
それは次回作りたいと思います。
今回は、約1時間半の作業でした。
お疲れさまでした。
それじゃあ、次回、また会いましょう