標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第12回]

●またまた大変なことをみつけてしまいました

昨日お伝えした、新しい企画、4ビット版TTLでつくるCPU組立キットMC4(仮称)の設計作業をしていて、またまたとんでもないミスを発見してしまいました。
8080版のメイン基板は基板図の最終チェック作業まで完了していたので(完了していたつもりだった)、ガーバーデータを基板屋さんにメール添付で送ればよいばかりになっていたのですが、多少まだ躊躇していることもあってそのまま送らずにいました。

ところが、ところがです。送らなくてよかった、のです。
かんじんのプログラムカウンタ部分にとんでもないミスを発見してしまいました。4ビット版CPU組立キットの設計作業をしなければ、多分基板ができあがってくるまで、気がつかなかったと思います。
下がそのPC(プログラムカウンタ)の部分の回路図です。



実際の回路図のうち、一部分だけを切りとって再編集してあります。
8080のプログラムカウンタは16ビットですから4ビットカウンタが4個必要です。ここではそのうち下位8ビットの部分だけを示しています。
本当はこんなにすっきりした回路ではなくて、もう少し回りにいろいろな回路があるのですが、かえって理解しにくくなってしまいますから、この図では余計なものははぶいてあります。

さて、この回路図のどこがとんでもない、のでしょう?
これもまたなんだか「IQサプリ」の問題のような感じですね。

回路のつなぎ方、配線に問題はありません(のつもりです。まだ実際に基板になっていませんから、確実とは言えません)。
CPUの動作について、そこそこ理解してみえる方でしたら、この図をよーく見ていると、

「あれぇ、おかしいじゃぁないの?」

と、きっとお気づきになると思います(私はまったく気がつかなかった。おばかです)。

●フリーの回路図エディタ

この回路図のどこが、お馬鹿なのか、それを説明する前に、回路図エディタについてご紹介をいたします。

基板図作成ソフトと同様に、回路図エディタについても、私は長い間自作のソフトを使ってきました。
何でも自分で作らないと、気が済まない。困った性格です(標準仕様では痒いところに手が届かないことが多く、そんなとき自作ソフトならば必要に応じて作りかえることができる、というのが、自作ソフトにこだわる本当の理由です)。

しかし今回、TTL版8080組立キットの企画に際して、回路図が膨大なものになることが予想され、自作の回路図エディタにはちょいと荷が重過ぎる、と思ったので、使えそうな回路図エディタを探してみました。
そこでみつけたのが、上の回路図に使用した、フリーの回路図エディタBSch3Vです(ご存知の方も多いと思います)。
これもまた、自作ソフトなどはるかに及ばないすぐれものです。ラインの描画やパーツの貼り付けが簡単で、特にありがたいのが、パーツ(ライブラリ)の編集や新規作成が容易な点です。
これは特筆すべき利点で、標準仕様だけではまず満足できない、自作派の私にとっては、願っても無いツールです。

上の回路図で使用した74HC191は、BSch3Vのライブラリにもとからある74191を、自分の回路図用に一部手直しして新規に作成したパーツです。
最初は少し戸惑いましたが、ちょいと慣れてくると、新規パーツの作成も容易にできます。
パーツの作成はBSch3Vの関連ソフト、部品ライブラリエディタLCoVで行います。

ついでながら標準ライブラリの74191にはミスがあります。74191のpin5はUP/DOWNコントロール端子ですが、D/U_が本当です(HのときDOWN、LのときUP)。ライブラリでは、U/D_になっています。

回路図エディタBSch3V、部品ライブラリエディタLCoVは、水魚堂さまのページで、ダウンロードできます。
水魚堂さまに感謝!です。

●実は、「回路図」は一番最後に出来あがる!

もっとも今回の設計作業でも、回路図エディタはプリント基板の設計作業が完了してからが、やっと出番です。
製品に添付するドキュメントの一部として、清書するときに使います(それとか、今回のようにホームページなどで、皆様に回路を見ていただくときなどにも使います)。

じゃあ、実際に回路を設計するときには、どうするのか?
と言いますと、もっぱらノートかコピー用紙のウラ、折込チラシのウラなどに、エンピツで殴り描きをします。
そうしないと、頭のスピードに図が追いついていかなくて、そのうち頭に浮かんでいた回路が消えてしまいます。消えてしまわないうちに(!)、エンピツで殴り描き、です。

●プログラムを書くときも、ぶっつけ本番!

PICとかZ80のプログラム(マシン語アセンブラ)を書くときも同様で、フローチャートなどという、かったるいものは書きません(そんなものは、頭の中にフツーにある)。
頭に浮かぶフローにしたがってPOPUPしてくるニーモニックを、これまた消えてしまわないうちに(!)、エンピツやボールペンで殴り書き、します。

そうやって、Z80のオリジナルソフト、倍精度浮動小数点BASIC、ZB11V3(マシン語プログラムサイズ48KB)もフローチャート無しで作り上げたものです。もっともこれは2ヶ月や3ヶ月ではとてもできなくて、もっともっと長い時間をかけて作ってきたものですが、フローチャートは、無し。
いつもぶっつけ本番です。現場は教科書とは違うのです(学校の先生方、申し訳、ありませーん)。

参考までに、昔のノートを一部お見せします(なんだかどんどん本題から離れていってしまいますが、取扱説明書などと違って、ブログの気軽さでつい脱線してしまいます。お許しあれ)。



ついでに別のページももう一枚。


ずっとこんな調子です。
昭和61年(1986年)のノートです。内容からするとなんだかコードをデコードしているらしい、ように思えますが、何をやっているのか、さっぱりわからん!(もうすっかり忘れてしまいました)。

●PC(プログラムカウンタ)の回路図(お馬鹿)の答えです

どこが、お馬鹿かというと、カウンタクリアが、どこにも無いのです!
CPUはリセット信号を入力すると、プログラムカウンタをリセットします(そうしないと、プログラムの最初からスタートすることができない!)。当たり前の話です。
その当たり前の回路が図のどこにも、無いのです!
完全に忘れていました!(ほんとうに、お馬鹿です。試験なら、これだけで、落第です)

ところが、そもそも74HC191には、もとからクリア端子なるものが無いのです!

じつはプリセッタブルな(パラレルデータを入力可能な)、バイナリカウンタを選択する時点で、74HC191と74HC193のどちらにしようかなー、と迷ったのです。
どちらも機能はほとんど同じ。ただ74HC191はUPカウントとDOWNカウントを5番ピンのH/Lだけで選択でき、UPカウントでもDOWNカウントでも同じクロックでいける。74HC193だと、UPカウントとDOWNカウントのクロックを別々に与える必要があって、回路がちと面倒になる。
PC(プログラムカウンタ)はUPカウントとLOADのみで、DOWNカウントは必要ない(プログラムは決して後戻りはしない。させたいときは、ジャンプしたいアドレスをPCにLOADしてやる)のですが、SP(スタックポインタ)はUP/DOWN両方が必要なので、まあ、PCもSPも同じ石にしておいた方がよいか、とUP/DOWNのことが先に気になって、74HC191にはクリア端子が無い、という重要なことを、つい忘れてしまいました。

なお、ついでながら、SP(スタックポインタ)の方は、リセットによってクリアしなければならない、というわけではありません。
Z80の技術資料を調べてみたのですが、どこにも書いてありません。
面倒なので、そこのところがどうであるのか、実際に確認はしていませんが、普通は、プログラムの先頭で、LD SP命令を使って、スタックアドレスを指定します。私は以前からそのようにしているので、多分、SP(スタックポインタ)はリセットによってクリアされない、のだと思います。

●PC(プログラムカウンタ)には、74HC193を使う(74HC191では、だめです)

ということで、74HC191の代わりに74HC193を使うことにした、PC(プログラムカウンタ)の回路図です。



幸いにして、74HC191と74HC193のピン配列はほぼ同じですから、必要な基板配線の変更作業はそれほどたくさんではありませんが、なにしろもう一本も通らんというところをさらにむりやり配線しているものですから、1、2本の配線の変更でもなかなかに大変です。


こういう具合に配線の引きなおしです(疲れた!)。
2008.7.19upload

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