世間ではCPUといえばM1ProチップやM1Maxチップなどの話題が熱いですが、この記事では昔に本当に存在した1bit CPUについて紹介します。
CPUのビット数とは
そもそもCPUのビット数とはどうやって決まっているのでしょうか?
ビット数と一言で言っても、ALUのビット幅を指しているのかデータバス・アドレスバスのビット幅を指しているのかが曖昧です。
以下の記事によると、次のように書かれています。
しかしどうやら長い歴史の中で、CPUのbit長はALU長でもなくアドレスバス長でもなく「レジスタ長とデータバス長のうち短い方」である、という常識が生まれたようです。
そのため、1bit CPUとはレジスタ長もしくはデータバス長が1bitのCPUということになります。
実在した1bit CPU
そのような1bit CPUは一見したところで使いみちがなさそうです。
そのため空想上の代物かと思いきや、実は1bit CPUが製品として売り出されていたことがありました。
それがMotorola MC14500Bです。
このCPUは機械式リレーやシーケンサで行われていた処理を置き換えるために開発されたそうです。
このチップが開発された1970年代はUVROMが世に出たばかりで、ROMといえばマスクROMが主流だったかと思います。(その時代に生きていないので間違っていたらご指摘ください)
そのため、小ロットの生産であればわざわざマスクを作成することなく、このCPUと数十個のCMOS ICでロジックを組むのがコスパが良かったのではないかと推測します。
現在であればEEPROMを内蔵したマイクロプロセッサがあるのでこのチップの存在理由は見つからないです。
実際に1990年代に生産中止になったそうです。
MC14500Bの内部アーキテクチャ
当時の資料を探していたら、内部アーキテクチャの説明が書かれているドキュメントが見つかったので、それを使って説明をしていきます。
出典: MC14500B Industrial Control Unit Handbook
MC14500Bは1bit CPUであり、レジスタは図の中央にある1bitのResult Reg.(RR)のみです。
Dataは双方向のデータバスでこれも1bitしかありません。
というか、この図にかかれている線は全て1bitの信号線です。
命令長が4bitもあるから1bit CPUではないといった野暮なことは言ってはいけません。
レジスタ長もデータバス長も1bitなので、これは1bit CPUなんです。
通常のCPUとは異なり加算や減算などの算術命令がないのが特徴的です。
レジスタに対する操作はビット演算しかありません。
さて、このあたりでカンの良い人なら気づいているかもしれませんが、このCPUにはプログラムカウンターが内蔵されていません。
そのため、プログラムカウンタを外付けする必要があります。
さらに、そのプログラムカウンタは通常は4bit以上の幅をもたせて、命令コード以外の残りの部分をオペランドにするのが一般的なようです。
そのため、トータルの命令長を何bitにするかということに関してはこのCPUを使った回路を設計する人次第になります。
この自由度はアドレス幅についても同様です。
さらに命令セットを見ていくとIENやOENというやや特殊な命令も見られます。
これらはそれぞれInput EnableとOutput Enableの略で、Data入力とWrite出力の有効化・無効化を切り替えます。
これらのレジスタを利用すると、簡易的な条件分岐機能が実現できます。
まとめ
1bit CPUという一見すると使いみちがないようなものでも、過去の歴史を紐解くと実在するということが分かりました。
単なる玩具のようなCPUかと思いきや、シーケンサの置き換えという明確な目的をもって作られたCPUでした。
命令セットは今のCPUと大きく異なりますが、目的を果たすために厳選されたわずか16個の命令は本当によく考えられていると感じました。