トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第179回]
●INC/DEC REGISTER(2)
前回からの続きです。
前回はインクリメントカウンタとデクリメントカウンタの動作の違いについてビット単位で確認してみました。
インクリメントはパルスが入力されるごとにカウンタの値が+1されていきます。
ごく普通のカウンタの動作です。
デクリメントはそれとは全く逆の動作になります。
パルスが入力されるごとにカウンタの値が−1されていきます。
ところがインクリメントカウンタとデクリメントカウンタの動作をビット単位で見てみると、どちらも同じ動作をしていることがわかります。
それなのに一方は値が+1されていき、もう一方は−1されていきます。
ちょっと考えるとありえないように思えます。
しかしさらにもっと深く考えてみると、インクリメントもデクリメントも下位桁からのキャリーまたはボローによってカウント動作をすることから考えると、これはつまりキャリー(ボロー)の与え方(言い換えるとそのタイミング)にあるとしか考えられません。
キャリーとボローは違うように思えるかも知れませんが、どちらもただのパルスです。
そのパルスのみを見ただけではどちらがキャリーかボローかは判断できません。
さて。
ということで、前回の2ビットのカウンタの動作を今度はパルス波形として見てみることにします。
すると下の図のようになります。
図からわかるように、INCは下位桁からのパルスがHからLになるときに、上位桁がカウントアップされます。
それに対してDECは下位桁からのパルスがLからHになるときに「カウントアップ」されます。
そういうことなのです。
なんと。
デクリメントはカウントダウンのように思えますが、実はインクリメントもデクリメントもどちらもカウントアップをしているのです。
上記のタイミングでどちらも下位桁の2倍の長さのパルスが発生しています。
それでありながら、両者のQ1、Q0を2ビットのカウンタ出力だと考えてその値を読んでみますと。
INCは00→01→10→11→00と変化しています。
DECでは00→11→10→01→00と変化しています。
まるできつねにつままれたみたいで、手品のようにも思えます。
でも波形を見る限り、どこにもタネも仕掛けもないようです。
トランジスタCPU回路の試作カウンタ回路の動作を確認していて、偶然このように動作するということをみつけたときは、思わず「おおおっ!」と叫んでしまいました。
何か新しい法則を発見したような心地でありました。
ここまでわかってくると、どういう回路にすればよいのか、ということはもう簡単にわかってしまいます。
上図の右側がその回路です。
定番の74HC74で考えてみました。
74HC74はクロックの立ち上がりでD入力をラッチしますから、INCカウンタの場合には図のように下位桁のQ出力をインバートしてCK入力にします。
多段回路の場合には下位桁のQ_出力を利用することができますから、インバータを使う代わりにその右の図のようにすることもできます。
DECカウンタの場合にはCKに下位桁のQ出力を入れるだけで済みます。
いかがでしたでしょうか。
コロンブスの卵といいますか、目からウロコという気分になっていただけましたでしょうか。
次回に続きます。
トランジスタでCPUをつくろう![第179回]
2019.11.18upload
前へ
次へ
ホームページトップへ戻る