この記事はセルオートマトンによるCPU作成連載記事の17本目です。(2023/01/19)
これまではCPUのパーツとなる回路を作成してきましたが、これからはそれらをつないでいき、少しずつCPUに近づけていきます。
今回の回路はフィボナッチ数列を順番に表示していく回路です。フィボナッチ数列は次の式で表される数列で、0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ... と続きます。
$$ \begin{align} F_0 &= 0 \\ F_1 &= 1 \\ F_{n+2} &= F_n + F_{n+1} \hspace{10pt} (n \geq 0) \end{align} $$
回路の一番上はシグナルを供給するループです。左には8ビットのレジスタが2列並んでいます。レジスタは上からシグナルが来るごとに左からの入力で値が上書きされます。シグナルは2つのレジスタで別々ですが、入力は共通です。レジスタの右には8ビットの加算回路があります。加算器は2つのレジスタの値を加算した結果を右に出力しています。出力された結果は下を回り込み、レジスタの左からの入力になります。シグナルが来るごとに加算結果をレジスタに保存し直すことになります。右半分は加算結果を表示するディスプレイです。
面積でいえばディスプレイが半分以上を占めますが、この回路の要は加算回路と2つのレジスタです。2つのレジスタに交互にシグナルを供給することで加算結果を交互にレジスタに保存し、フィボナッチ数列を計算できるようになっています。
この回路をCPUだとみなしたとき(まだまだCPUにはほど遠いのですが)、演算は加算のみで、レジスタは2つあり、命令は加算結果をどちらのレジスタに保存するかの2択のみで、2つの命令を交互に実行しているとみなせます。
レジスタも加算器も8ビットですので、8ビットを超える整数になるとオーバーフローを起こし、フィボナッチ数列とは関係ない数字を表示し始めます。
この回路を今後CPUに近づけていこうと思います。