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

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


[第411回]



●バイナリカウンタ回路の改良

当テーマについて最後に書きましたのは2021年10月ですからそれからもう3年以上が経ってしまいました。
現在はPICBASICコンパイラについて書いています。
PICBASICコンパイラについてはまだ途中なのですが一区切りついたところですので、久し振りにトランジスタロジック回路について書くことにします。
ことのきっかけは当社の組立てキットを何点かご購入いただいたお客様からメールをいただいたことでした。
そのお客様(愛知県H様)からいただいたメールで、[第167回]の回路についての改良の提案をいただきました。
2019年10月の記事ですから5年以上も前の記事です。
同記事ではカウンタ回路のQ_出力がなまってしまう原因がR15にあるということがわかったのでそのR15をショートしたこと、またその次の回ではそれにともなってCLR回路を変更したためトランジスタ回路が増えてしまったことについて書いています。
H様からはR15をショートする代わりにR15に並列に「スピードアップコンデンサ」を入れたらどうでしょうか、とのご提案をいただきました。
それならCLR回路のトランジスタ追加は不要になるのでは?
なるほど。
それには気付きませんでした。
時間ができたら試してみますとご返事いたしました。
H様からはその次のメールでR15にCを追加した場合のコンデンサ容量の計算値などをいただきました。
またダイオードOR回路にすることでトランジスタを削減できるのではとのご提案もいただきました。
私は「デジタル屋」で「アナログ」については不勉強なのでよくわかりません。
トランジスタ回路の定数やコンデンサ容量の計算などは全くできませんのでそこは大体の見当であとはカットアンドトライで値を決定しています。
トランジスタロジック回路は基本的にはトランジスタを飽和領域で動作させるため難しい計算は不要になります。
ですからそんな程度の頭でもなんとか設計できています。
しかしそのように計算をしてフォローしていただけるととても助かります。
ダイオードOR回路は以前は私も使っていましたが(過去記事参照)その後は回路の安定動作のために使わないことにしました。
それだけトランジスタを余計に使うことになりますがそれについては仕方がないことと考えています。
ダイオードORは魅力的ではありますがシリコンダイオードではLレベル電圧が0.8Vほど浮いてしまいます。
簡単な回路ならばそれでもよいのですがトランジスタを1000個も使う回路になると誤動作の可能性が出てきます。
ダイオードの代わりにトランジスタのコレクタエミッタを使うという手も考えられますがそれだとトランジスタ数の削減にはなりません。
ですのでダイオードは使わず正攻法でトランジスタ回路を使うことにしました。
ずっと昔にはそういう場合にシリコンダイオードではなくてゲルマニウムダイオードを使うなんてウラ技を使ったこともありましたが、さすがにいまどきゲルマニウムダイオードを使うというのはありませんでしょう。

さてそれで。
せっかく貴重なご提案をいただきましたのでなんとか時間を作って試してみるつもりだったのですが。
回路を眺めているうちにそもそもの回路自体がどうにも面白くない、と思えてきました。
このカウンタ回路はその後にそのままMYCPU4TRのプログラムカウンタの基本回路になりました([第369回])。
もうトランジスタのオンパレードです。
当時はこれしかないと思ったのですが。
今あらためてその回路を見ると「なんとかならんかいな」と思ってしまいます。
で。
回路図を眺めていましたら、ひとつの案が浮かびました。
いけるかもしれないということでさっそくテスト用の回路を作って試してみた結果は狙った通りの結果になりました。
当記事ではそのあたりのことについて書くことにいたします。
H様からはせっかくのご提案をいただいたのですが、新しい案を考えましたのでその結果R15はショートしたままということになりました。
H様にはせっかくのご提案についてテストしないままになってしまいましたことをお詫びいたします。
今後ともご協力いただきますようお願い申し上げます。

ということで何を思いついたのかということについて説明することになるのですが。
その説明をするためには先に補足的に説明をしておかなければならないことがあります。
[第167回]の回路を変更するすることで最終的に[第169回]の回路になったのですが、実はそれは「最終」ではありませんでした。
その回路にはまだ問題がありました。
そのことに気が付いたのは[第200回]でした。
トランジスタの逆接続問題です。
当初はその問題を解決するためにトランジスタのエミッタにダイオードを追加したのですが上のほうで書きましたように最終的にはダイオードは使わないことにして正攻法でトランジスタ回路を追加することにしました。
そのほかにももとの回路にはロジックが逆になっているところがあることにも気がつきました。
下は[第169回]の回路に対してそれらの点を直したあとの回路図です。



R15についてはCLR信号とぶつかってしまうことが問題だったのですが、ここではCLRをトランジスタ出力にすることで解決しました。
この時点では「R15問題」を解決するためだったのですがその後にダイオードORは使わないことを原則とすることにしたため、結果的にこのCLR回路はこれで正解ということになりました。
つまりR15は結果的にショートするというのが正解になりましたので、H様からご提案いただいたR15にCを追加するという考えはなくなってしまいました。

それにしても今この回路を見ると「なんとかならんのか」と思ってしまいます。
もとはTTLのRSフリップフロップに対してなんとかトランジスタ数を減らしてトランジスタ版のRSフリップフロップをつくろうというところから出発したはずなのに、それではCLKがHのときにデータが筒抜けになってしまうのでカウンタ動作ができないという問題にぶつかってしまいました。
その問題を解決するために考えたのが上の回路でした。
RS回路の後ろにもう1段RS回路を置くことでCLKがHの間でも値を保持するようにしたものです。
この時点ではそれは「理にかなった回路」だと思ったのですが、今見てみるとどうにも「面白くない」のですよねえ。
本来RS回路で値を維持できるはずなのにそれができなくてRS回路を2段使わなければならないというところがどうにも面白くありません。
なんとかならないものかと上の回路図と終日にらめっこしておりました。
いやあ。
頭は生きているうちに使うものであります。
おお、これは、という妙手を思いついてしまいました。
まさに逆転の発想であります。
ある意味禁断の発想であります。
下がふとひらめいてしまった回路です。



上でお見せした「最終的」だったはずの回路ではトランジスタを24個使っています。
突然ひらめいてしまった上図の回路で使っているトランジスタは17個です。
なんと3割の削減です。

しかしこんな回路で本当にいいのか?
これでよいのです。

次回に続きます。

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

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