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

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


[第178回]



●INC/DEC REGISTER


また間が空いてしまいました。
書かなければならないことはたくさんあるのですけれど、やらなければならないこともたくさんあって、ついUPできないまま日が過ぎていってしまいます。

さて今回のテーマなのですが。
CPUレジスタの基本形ともいうべきレジスタ試作基板については[第163回]で基本回路と一応の試作基板について書きました。
データを記憶するレジスタ回路はCPUを構成する回路の中でも重要な回路ですが、その回路はビット単位で見ればただのラッチ回路なので、回路としては比較的シンプルです。
しかしそこにカウンタの要素が加わると途端に複雑な回路になってしまいます。
カウンタ回路もCPU回路ではいろいろなところに使われています。
そのうちで最も基本的な回路として、CPUクロック回路について前回まで説明をしてきました。
カウンタ回路は言い換えればデータインクリメント回路です。
クロックの入力ごとに値が1ずつ増えていくレジスタ回路であるとも言えます。
その観点からすれば、たとえばプログラムカウンタもまさにインクリメントレジスタそのものであるといえます。
それは今までのCPUクロック回路の応用といいますか、変形として作ることができます。

ということで、CPUクロック回路の試作ができた段階で、次はプログラムカウンタ回路にいくつもりで、プログラムカウンタについてもすでに試作基板はできているのですが。
その前に、ちょっと気になっていて、やっぱり先に考えて試しておきたい回路がありました。
プログラムカウンタ回路はCPU回路にとってなくてはならない重要な回路なのですが、それは上で書きましたようにすでに試作を行なって動作確認済みのCPUクロック回路の応用として考えることができます。
プログラムカウンタはすなわちクロック回路、インクリメントレジスタ回路です。
CPU命令の中のINC命令も、そのCPUクロック回路をベースにして考えることができます。

しかし、デクリメント(DEC)については?
今まで考えてきたクロック回路、カウンタ回路は、クロック入力によって+1ずつ値が加算されていくインクリメント回路です。
それではその逆にクロックの入力にともなって値が−1されていくようなカウンタ回路はどのようにしたら実現できるのでしょうか?
ちょっと考えてみると、それはメチャメチャ難しそうな回路のように思えます。

基本的なモデルとして2ビットのカウンタで考えてみます。
インクリメントカウンタの場合はクロックの入力ごとに下のようになります。

00→01→10→11→00

デクリメントカウンタの場合にはちょうどその反対の動作になります。
クロックの入力ごとに下のようになります。

00→11→10→01→00

両者は全く逆の動きのように見えるので、どうすればデクリメント回路を作ることができるのか、考え込んでしまいそうです。
不可能なんじゃないの?
いえいえ、ちゃんとロジックICでもUP/DOWNカウンタがあるのですから、ロジック回路で実現は可能なはずです。
それではどうやって?

その手がかりを得るために、まずは下位ビットに注目してみます。
するとインクリメントは
0→1→0→1→0
デクリメントは
0→1→0→1→0
あれ?
同じですねえ。

それでは上位桁はどうでしょうか?
インクリメントは
0→0→1→1→0
デクリメントは
0→1→1→0→0

うーん。
よく似てますねえ。

どこが違うのでしょうか?
下位ビットも上位ビットも、そのビットだけに注目すると同じように見えます。
すると違いは上位桁に対するキャリー(ボロー)にありそうです。
キャリーもボローも上位桁に対するクロックパルスであるという点では同じです。
すると、結局のところは、キャリー(ボロー)が発生するタイミングが違うのではないか?
という考えに行き着きます。
キャリー(ボロー)はどういうときに発生するのか?

おお、見えた!
見えましたよ。

さて、皆様はおわかりになりましたでしょうか?
次回に続きます。

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

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