あんたCPUなんか創ってどうするのよ?! Vol.1 第6章 第3節

~TD4とかいうCPUがあまりにも残念だったので拡張してみた~

2016/8/14
コミックマーケット C90 3日目 西g16b

第6章 第3節 今後の拡張へ向けての検討

既に何度か述べている通り、本シリーズでは最終目標として電卓の製作を掲げています。その目標を達成するために、今後TD4EX2 をどのように拡張すれば良いのでしょうか?

第1節の命令コード表に示した通り、TD4EX2 の命令はTD4 と同じくわずか6 種類しかなく、オペランド(アドレシング)の種類もレジスタとイミディエイトデータの2 種類のみです。一般的なCPU に比べると機能的に大きく劣ることは一目瞭然ですが、ここで具体的な数字を挙げて比較してみたいと思います。

以下の表をご覧ください。

メーカー型番命令数命令ビット長説明
渡波郁TD468 ビット固定長わずか10個のICで製作された4bit CPU
ExitTD4EX268 ビット可変長TD4を拡張して4KBのプログラムエリア(ROM)を実現したCPU
インテル4004398ビット可変長世界初の商用4bitマイクロプロセッサ。ほとんどの命令が8bit。一部が16bit
ザイログZ80678 ビット可変長8bit CPUのベストセラー。多くのPCに採用された
モス テクノロジー6502568 ビット可変長Apple IIに採用された8bit CPU
モトローラ6809768 ビット可変長究極の8bit CPU。日立BMシリーズや富士通FMシリーズなどに採用された
マイクロチップ・テクノロジーPIC187916 ビット可変長PICのハイエンド8bit CPU。ほとんどの命令が16bit。一部が32bit
AtmelAVR811816 ビット固定長Arduinoに採用された8bit CPU
インテル80861158 ビット可変長ご存じインテルの16ビットCPU
モトローラ680007516ビット可変長8086のライバルと言われたCPU。MacintoshやX68000などに採用された

主な8 ビットCPU および初期の16 ビットCPU の命令数を比較した表です。この表の命令数は筆者が各CPU のデータシートから、ニーモニックの種類を指折り数えて調べたものなので、公式発表やWikipedia と食い違っている部分もありますのでご了承ください。

さて上記の表を見て最初に気づくのはTD4とTD4EX2の命令数の少なさです。僅か10個および14個のICで作られているだけあって、一般的なCPU に比べると命令数が極端に少ないことが分かります。

しかし筆者がここで述べたい事は別にあります。

それは一般的なCPU の命令数がそれほど極端には違わない事です。さすがに4004 の命令数は少ないですが、それ以外では6502 の56 命令が最小、AVR8 の118 命令が最大と、2 倍程度の差しかありません。しかも16 ビットCPU である68000 は75 命令と、比較的少ない部類に含まれています。

もちろんニーモニックの数と命令コードの数は違うわけですが、それでもある程度の傾向は見えるはずです。つまりCPU のビット数と命令数は比例している訳ではなく、多少の相関関係が見られる程度だと言う事です。

これをCPU を設計する立場から捉えるとどうなるでしょうか?

一般的に、CPU の命令コードはオペコードとオペランドから構成されます。オペコードは演算や分岐などの動作を表し、オペランドは演算対象や分岐先を表します。そしてCPU を設計するときに必ず問題となるのが、オペコードやオペランドをそれぞれ何ビットにするか、という判断です。

前ページの表から一般的なCPU のオペコードのビット数を計算すると以下のようになります。

命令数の最も少ない4004 の場合
39 命令なので、オペコードは6 ビット
命令数の最も多いAVR8 の場合
118命令なので、オペコードは7ビット

ビット数で表すと1 ビット分の差しかありません。

実際の4004 やAVR8 がどうなっているのかはさておき、4 ビットCPU であろうと8 ビットCPU であろうと、さらには68000 のような16 ビットCPU であろうと、必要なオペコードのビット数は概ね6~7 ビットだと言う事が分かります。

これはCPU を設計する上での重要なキーファクターとなります。

なぜなら設計しようとしているCPU の1 命令が何ビットかに関係なく、6~7 ビットをオペコードに割り当てる必要があるからです。これは4 ビットCPU のような、命令コードのビット数が少ないCPU で特に問題となります。

そしてTD4 では僅か4 ビットしかオペコードに割り当てていないので、命令数が少ないのは当然ですし、今後拡張する上で大きな制約となることが予想できます。