2020.12.16
前へ
次へ
ホームページトップへ戻る

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第278回]



●4ビットCPUとは?

当社の組立キットを色々ご購入いただいておりますお客様からメールでご質問をいただきました。
ご質問の要点がうまくまとめられていますので勝手ながら原文のまま転載させていただきます。

「お世話になります。
4ビットCPUにとても興味があります。
しかし最近わからなくなってきました。

4ビットCPUとは。8ビットCPUとは。

4ビットCPUとは、レジスタが4ビットのCPUのことですか?
メモリ1つの大きさ(データの大きさ)は、4ビットでも8ビットでもいいのでしょうか?
メモリの大きさ(アドレスの最大値)は8ビットでしょうか?
手元にある ”CPUの創り方”の本の 4ビットCPU は メモリアドレスが 16個ですが、1つのアドレスは 8ビットデータです。

お時間がある時に教えてください。」

お尋ねの文面からしますと大体のところはおわかりになってみえるようです。
ただ4ビットCPUなのになぜデータが8ビットなのか、またメモリアドレスが16個というのは納得できるが4ビットでもアドレスが8ビットになってもよいのか?
というあたりでお迷いのようです。

一般にCPUが4ビットであるとか8ビットであるとかという場合には、ご質問のようにレジスタのサイズを言うことが多いようです。
もう少し突き詰めて言いますとただのレジスタを言うのではなくてCPUのコアの部分、ALU(数値論理演算回路)のビット数を言います。
普通はAレジスタが演算用レジスタとして使われていて、複数のレジスタがある場合にはそれらのレジスタもAレジスタのビット数と同じであるのが普通です。
レジスタが8ビットの場合CPU内部でレジスタ間にデータを転送するための内部バスラインも8ビットになります。
この場合には外部メモリのデータラインが通常は8ビットなので素直に理解できると思います。
ところが当連載のMYCPU4のようにレジスタが4ビットなのにそれに接続しているメモリのデータ幅が8ビットだったりするとそれでもなぜ4ビットCPUなのだ?という疑問が出てきてしまいます。
この場合にはCPUの「外」なのか「内」なのかということが判断の決め手になります。
MYCPU4はCPUの入口では確かにメモリから8ビットの「データ」を読み込みますが、実はその8ビットのうち上位4ビットは命令コードでレジスタに入れるデータではありません(上位4ビットは内部データバスにはつながっていません)。
下位4ビットだけがレジスタ間転送や演算に使われる「本当のデータ」です。
MYCPU4のAレジスタ、Bレジスタ、WレジスタとOUTポート、INポートは全て4ビットでしたがって各レジスタ、ポート間を接続する「内部バスライン」も4ビットです。
ここまではご理解いただけたことと思います。

それではCPUに接続するメモリのアドレスはCPUのビット数と関係があるのか?と言いますとこれはCPUのビット数と切り離して考えていただいたほうがよいと思います。
別の例として8ビットCPUの代表的存在である8080やZ80について考えてみます。
演算レジスタとして使われるAレジスタは8ビットなので、そのことからは8ビットCPUであると言えます。
しかし8080やZ80には16ビットの加算命令(ADD HL,BC)などがあります。
この場合にはHLレジスタが演算レジスタとして使われていますので、それならば16ビットCPUといえないのか?ということなのですが、一般にはそれをもって16ビットCPUであるとは言いません。
8080やZ80の内部バスは8ビットです。
拡張機能として8ビットレジスタを連結して16ビットの加算機能をもたせてはいますが、あくまで特定の機能のために8ビットレジスタを連結しているだけでやはりCPUとしては8ビットであるというべきでありましょう。
参考までに8080のCPU内部ブロック図を下に示します。

[出典]Intel 8080 Microcomputer Systems User’s Manual September 1975

ちょっと見にくいですけれど INTERNAL DATA BUSのところに(8 BIT)と書かれています。
またARITHMETIC LOGIC UNIT(ALU)のところにも8bitであることを示す(8)の表記が見えます。

ところで、Z80や8080が8ビットCPUであるのに、それではアクセスできるメモリアドレスは何ビットなのかと言いますとご存知のように16ビット(A0〜A15)です。
これはZ80や8080のPC(プログラムカウンタ)が16ビットだからです(上図のPROGRAM COUNTERのところには(16)の表記が見えます)。
PCが16ビットであっても演算レジスタ、内部バスが8ビットならばそれは8ビットCPUであると言えます。

MYCPU4は「トランジスタ技術」版4ビットCPUの仕様に合わせるためにPCを4ビットにしましたから直接アクセスできるメモリアドレスは4ビット16アドレスです。
そのままの仕様のまま、もう少し大きいメモリアドレスにもアクセスしたいと思ったために当連載のようにCPUの外にMMU回路を設けました。
もしも独自の仕様にするならば、たとえばPCのみを8ビットにすれば4ビットCPUのままで256アドレスまでアクセスできますし、PCを12ビットにすれば1024アドレスまでアクセスできることになります。
同様にたとえばデータ幅が12ビットのメモリを外部に接続して、そのうちの上位8ビットを命令コード、下位4ビットをデータとするようなCPUを考えた場合、このCPUは12ビットではなくて4ビットCPUということになります。

トランジスタでCPUをつくろう![第278回]
2020.12.16upload

前へ
次へ
ホームページトップへ戻る