2025/08/06 15:17 A Simple CPU on the Game of Life (2021)

ロボ子、今回のニュースはライフゲームでURM(無制限レジスタマシン)を作った話じゃぞ!

ライフゲームでURMですか!それはまたすごいことを…!URMって、チューリング完全なモデルのことでしたよね。

そうじゃ!理論上は無限のレジスタと整数を扱えるんじゃ。でも、今回の実装では16個の4ビットレジスタを使っているらしいぞ。

16個の4ビットレジスタで、どこまでできるんでしょうか…?

なんと、因数分解プログラムを実行して、量子コンピュータが数年前に達成したのと同じタスクを数分で実行したらしいぞ!

それは驚きです!ライフゲームの中で、そこまで複雑な計算ができるなんて。

今回のCPUは、クロック、レジスタファイル、ALU、プログラムカウンタ、ROM、2段階パイプライン、そして4つの7セグメントディスプレイで構成されているらしいぞ。

命令セットはどんな感じなんですか?

INC、DEC、JNZ、ZERO、JMPがあるみたいじゃな。INCはレジスタを1増やす、DECは1減らす、JNZはゼロじゃなかったらジャンプ、ZEROはレジスタをゼロにする、JMPは無条件ジャンプじゃ。

基本的な命令が揃っていますね。ライフゲームで回路を組む場合、実際のハードウェアとは違う工夫が必要になりそうですね。

そうなんじゃ。実際のハードウェアではトランジスタの数を最小化するけど、ライフゲームでは最長パスの長さを最小化するらしいぞ。ライフゲームは完全に決定論的に動作するから、正確なワイヤ長を利用して動作シーケンスを決められるんじゃ。

なるほど。ALUはインクリメントのみで、デクリメントはビット反転とインクリメントで実現しているんですね。効率的です。

レジスタファイルは、クロックと4ビットセレクタを入力として、選択されたレジスタをアクティブにするんじゃ。一度に1つのレジスタにしかアクセスできないみたいじゃな。

ROMはANDゲートの2次元グリッドでビットをエンコードしているんですね。特定の列を読み取るには0を送信する、と。

命令は8ビットでエンコードされていて、最初の4ビットは制御線、次の4ビットはレジスタを指定するんじゃ。ジャンプ命令は、アドレスを格納するために2番目の8ビット命令を使うみたいじゃな。

2段階パイプラインも実装されているんですね。命令デコード/実行/書き込みと、ROMからの次の命令のフェッチを並行して行う、と。

そうじゃ。でも、ジャンプ命令の直後の命令は、条件に関係なく常に実行されるから注意が必要じゃぞ。

このライフゲームのURM、教育用にも面白そうですね。コンピュータの基本的な仕組みを視覚的に学べそうです。

確かにそうじゃな。ライフゲームでここまでできるなんて、本当に驚きじゃ!

博士、ライフゲームで動くAIとかも作れちゃったり…?

それには、もうちょっとライフが必要じゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。