あんたCPUなんか創ってどうするのよ?! Vol.1 第6章 第3節
~TD4とかいうCPUがあまりにも残念だったので拡張してみた~
2016/8/14
コミックマーケット C90 3日目 西g16b
第6章 第3節 今後の拡張へ向けての検討
既に何度か述べている通り、本シリーズでは最終目標として電卓の製作を掲げています。その目標を達成するために、今後TD4EX2 をどのように拡張すれば良いのでしょうか?
第1節の命令コード表に示した通り、TD4EX2 の命令はTD4 と同じくわずか6 種類しかなく、オペランド(アドレシング)の種類もレジスタとイミディエイトデータの2 種類のみです。一般的なCPU に比べると機能的に大きく劣ることは一目瞭然ですが、ここで具体的な数字を挙げて比較してみたいと思います。
以下の表をご覧ください。
メーカー | 型番 | 命令数 | 命令ビット長 | 説明 |
---|---|---|---|---|
渡波郁 | TD4 | 6 | 8 ビット固定長 | わずか10個のICで製作された4bit CPU |
Exit | TD4EX2 | 6 | 8 ビット可変長 | TD4を拡張して4KBのプログラムエリア(ROM)を実現したCPU |
インテル | 4004 | 39 | 8ビット可変長 | 世界初の商用4bitマイクロプロセッサ。ほとんどの命令が8bit。一部が16bit |
ザイログ | Z80 | 67 | 8 ビット可変長 | 8bit CPUのベストセラー。多くのPCに採用された |
モス テクノロジー | 6502 | 56 | 8 ビット可変長 | Apple IIに採用された8bit CPU |
モトローラ | 6809 | 76 | 8 ビット可変長 | 究極の8bit CPU。日立BMシリーズや富士通FMシリーズなどに採用された |
マイクロチップ・テクノロジー | PIC18 | 79 | 16 ビット可変長 | PICのハイエンド8bit CPU。ほとんどの命令が16bit。一部が32bit |
Atmel | AVR8 | 118 | 16 ビット固定長 | Arduinoに採用された8bit CPU |
インテル | 8086 | 115 | 8 ビット可変長 | ご存じインテルの16ビットCPU |
モトローラ | 68000 | 75 | 16ビット可変長 | 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 ビットしかオペコードに割り当てていないので、命令数が少ないのは当然ですし、今後拡張する上で大きな制約となることが予想できます。