見出し画像

NATUを作る(パート3)

HARUは失敗に終わってしまった。
だが、その悔しさをバネに、新たにNATUを作ることになった。

今回は、NX RED VIIIの実行ユニットを作っていきたいと思います。


ALU

まず、前世代であるNX RED VII(ver.3)の実行ユニットをコピーしてきました。

NX RED VII(ver.3)の実行ユニット

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)の実行ユニットにメスを入れていきます。

具体的には、アキュムレータを設置するための改造を行っていきます。

改造中

そこで、僕は思いました。

中途半端に性能上げるくらいなら、上げる必要ないんじゃないか

まぁ、アキュムレータを取り付けるのが面倒なだけですが、そんな気がしました。

だって、性能を重視するなら、10HzのNX RED VIを超えるのを目指した方がいいわけですし。

まぁ、そんな疑問は置いておいて、アキュムレータを取り付けるために改造していきます。

~数分後~

アキュムレータ接続完了

無事、アキュムレータを取り付けることが出来ました!

これで、8rt毎の演算が可能になったはず、、、

制御回路がんばらないとなぁ、、、

それじゃぁ、次はレジスタを取り付けていきたいと思います。

が、ここで問題が発覚しました。
GPU関係の命令を読み出した時、5つのレジスタの情報を読み出すのですが、5Hzで動作させる予定のため、1スレッドに与えられた猶予は2rtしかありません。

つまり、2rtの間に5つの情報を送らないといけないということになります。

3回に分かることも可能ですが、そうすると今度は速度が一気に遅くなってしまいます。

PCを巻き戻して…ROMの出力に反映されるまで待って…
としないといけないためです。


ですが、良い解決法が思い浮かびました。

それは、複数の配線を使うというものです。

レジスタから複数の配線を伸ばすことができれば、猶予が短くても、たくさんの情報を送ることができるようになります。

それでは、レジスタを設置していきたいと思います。




レジスタを召喚

レジスタとI/Oポート部分を、コピーしました。

まずは、B(11)番地の色をオレンジから緑にしたいと思います。

11番地を緑にしました

緑に置き換える作業が終わったので、次はレジスタとALUを接続していきたいと思います。

ALUとレジスタを接続

ALUとレジスタがつながりました。

アキュムレータを使った場合、8rtの速度で動作し、レジスタベースの場合は16rtの速度で動作します。

それでは、次はレジスタを増設していきたいと思います。

HARUの場合はレジスタは0番地がゼロレジスタ、1~14番地がレジスタ、15番地がI/Oポートに割り当てられていましたが、今回の場合はI/Oポートは別の場所に移動になるので、その代わり15番地をレジスタに割り当てることが出来るようになります。

それでは、作っていきたいと思います。

HARUのI/Oポート

まずは、I/Oポートを壊していきます。

NATUの場合、I/Oポートの位置や仕様が変更になるので、HARUで使われていたこのポートは使いません。

I/Oポートを消しました

I/Oポートが無くなったので、ここにレジスタを取り付けていきたいと思います。

レジスタ取り付け完了

レジスタの取り付けが完了しました

赤石ブロックがおいてあるのは、負荷軽減のためです。
僕にも原理はよくわかりませんが、弱めの信号を与えておくことで、負荷が下がるらしいです。

次は、デコーダー部分を作っていきたいと思います。


レジスタのアドレス入力部分

レジスタのアドレスを入力する部分の回路が完成しました。

入力は、信号強度で行います。

この回路が無いと、レジスタは正常に動作できません。

それでは、次はALUの入力部分からも配線を伸ばして、ちゃんと動作するか確かめてみたいと思います。






ALUの出力部分

ちゃんと動作しました!

インクリメントはちゃんと動作したので、他の演算も試してみます。

では、デクリメントを行ってみます。






動かないと思ったら、配線がつながっていませんでした。。。

配線がつながっていない

当然、このままでは動きません。

なので、修正しておきました。

ALUの出力部分

デクリメントも動作しました!!
映像で伝えられないのが残念ですが、ちゃんと動作しています!

他の演算(XORなど)も動かしてみましたが、問題なさそうでした

そして、右シフトを指定した時、、バグりました。

遅延が1rtずれていただけだったので、修正しました。

ALUの命令デコーダーの一部

これで、実行ユニットは完成、、、!

、、、と言いたいところですが、まだアキュムレータの制御回路が残っています。

それは次回作りたいと思います。

今回は、約1時間半の作業でした。
お疲れさまでした。

それじゃあ、次回、また会いましょう

この記事が気に入ったらサポートをしてみませんか?