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

●こんどこそ、やっと、本当に回路の説明にはいります

こういったものの説明のアプローチはいろいろあります。
普通はまず基本的な概念とか、全体のアウトラインとかを説明しておいてから、だんだんと細部に説明を進めていくことが多いようです。その方がわかりやすいでしょうね、多分。
でも、基礎とか概念とかは、たいてい退屈でつまらない。

映画なんかでも、シチュエーションとか登場人物の性格とか日常とかを延々と20分もやられたのでは、たまりません。
面白くもなんともない。
ここは、やっぱり、わかっても、わからなくても、開幕一番、いきなり、ゴジラのギャオーが、画面いっぱいに大写し、てのが楽しくていいと思います。

●なので、まずインパクトのある回路図から、どどっとお見せいたします

前々回(第23回)に、レジスタの回路図をお見せしました。結構インパクトがあったと思いますが、いかがでしたでしょうか?

●周辺部(データバス、アドレスバス)およびOPコードレジスタです



この回路図もインパクトがありますでしょう。
ここはCPUが外部のメモリやI/Oとデータのやりとりをする、入り口、出口の部分です。
LEDがずらっと並んでいて、壮観です。

●回路図の簡単な説明です(2008.8.3追記)

●まずはデータバスです


図の左上から一段下あたりにある74HC245が外部とCPUとの間でデータ(8ビット)をやりとりする「門」の部分です。
74HC245はデータの流れをコントロールするために使います。
74HC245の左側が、外部のコネクタにつながっている部分です。
□で囲った名前はコネクタ端子であることを示しています。D0〜D7が外部データバスといわれているラインです。
CPU外部のこの端子の外側にメモリ(RAMとかROM)やI/Oを接続します。

CPUとメモリやI/Oとの間でデータは、行ったり来たりします。
つまりD0〜D7は双方向なのです。ラインの右から左へ流れたり、逆に左から右に流れたりします。
一般道の交差点と同じで交通整理をしないとぶつかってしまいます。

じつは、この回路はさらに複雑です。
74HC245の左側のD0〜D7(外部データバス)は、それ自体が双方向です。必要に応じてデータの向きが変わります。
それだけではなくて、74HC245の右側のiB0〜iB7(内部データバス)も双方向なのです。
この2つのラインの間にあって、必要なときだけ外部データバスから内部データバスへ、あるいは逆に、内部データバスから外部データバスへ、8ビットのデータの受け渡しをしているのが、74HC245なのです。

G(19pin)がL(アクティブ)のときだけ、74HC245の「門」が開きます。
DIR(1pin)がHのときはデータの向きがA→B(この回路図では外部データバス→内部データバス)になります。逆にDIR(1pin)がLのときには、データの向きがA←B(外部データバス←内部データバス)になります。
(書いていると、簡単な説明のはずだったのに、だんだん詳しい説明になってきてしまいます)

G(19pin)がL(アクティブ)のときだけ、門(gate)が開きますから、そのときだけ外部データバスと内部データバスは一致します。
しかしG(19pin)がHのときは、門(gate)が閉じていますから、外部データバスと内部データバスには、それぞれ別の要因により別のデータが流れます。
そこで外部データバスD0〜D7と、内部データバスiB0〜iB7のデータのLED表示は、それぞれが別の内容になっても表示できるように、74HC245の外側と内側で、別々に分離して行っています。

●アドレスバス

データバスの下方、図の左側部分のA0〜A15がアドレスバスです。
このラインは主に外部に接続したメモリのアドレスを指定するために使われます。
データバスは双方向でしたがアドレスバスはCPU→外部の方向のみです。

8080やZ80はメモリアドレスを指定するラインをA0〜A15の16本もっています。
このラインで指定できるメモリアドレスは0000〜FFFFで、2の16乗=65536byte(正確には約65Kバイトですが、一般に64Kバイトといいます)のメモリアドレスをアクセスできます。

またA0〜A7のアドレスバス下位8ビットを使って、00〜FFの256通りのI/Oをアクセスすることができます。

A0〜A15(またはA0〜A7)を指定することによって、メモリやI/Oから出力されたデータがデータバスD0〜D7から74HC245を経由してCPUの内部バスiB0〜iB7に運ばれたり、逆にCPUからD0〜D7に出されたデータがメモリやI/Oに書き込まれたりします。

図の左側、で囲ったA0〜A17がCPU内部から出力された信号で、左から右に向かう信号であることを示しています。
その右側、図では中央になりますが、□で囲ったA0〜A17は外部メモリやI/Oに接続するためのコネクタ端子であることを示しています。

この回路図は筆者のきまぐれで、先ほど説明したデータバスは外部バスが左側でCPU内部バスが右側に位置するように描いてあります。
それに対して今説明したアドレスバスは、CPU側が左で、外部アドレスバスコネクタ端子が図の右側に位置するように描いてあります。
データバスとアドレスバスとではCPUと外部バスとの位置関係が左右逆になっていますが、別に深い意図はありません。
たまたま筆者の感性で、そのように位置してしまっただけです。

●d0〜d3、s0〜s3は何の信号か?

アドレスバスの右にd0〜d3、s0〜s3という信号があって、アドレスバスと同じように、74HC04でインバートしてその先にLEDがつながっています。
これは?

これから少しずつ説明する予定のOPコード解読回路や命令回路で作り出されるレジスタアドレス信号です。
この信号については、もう少し後の方で詳しく説明いたします。

●OPコードレジスタ

図の一番上部にある74HC373はOPコードレジスタです。
メモリからデータバスを経由して読みこまれたOPコード(命令コード)は、この8ビットレジスタにラッチされます。
ラッチされた命令コードはOPコードバスOP0〜OP7に出力されます。
OPコードバスに出力された命令コードは次の命令がラッチされるまでの間、ずっと変わらずに出力され続けます。

OPコードもその他のデータも同じ外部データバスD0〜D7から74HC245を介して読み込まれます。
OPコードだけは、OPコードレジスタ74HC373にラッチされることによって、その他のデータと分離されます。
OPコードはOPコードバスOP0〜OP7に出力され、その他のデータは内部データバスiB0〜iB7に出力されます。

OPコードかそれ以外のデータかの区別は、データの中身によって選別されるのではありません。
メモリアドレス上の位置によって、機械的に選別するように回路を組んであります。
その回路についても、もう少し先のところで説明いたします。
以上、 ●回路図の簡単な説明です から、ここまでの部分、2008.8.3加筆いたしました。

●LEDを山ほど使います!

今回の基板はせっかくですから「見て楽しみたい」と思い、思い切りLEDをてんこもりにしました。
150個くらいは軽く使うことになるのでは!
とりあえず試作基板用にLEDも赤、黄、緑と3色どっさり購入済です。



青色LEDは使いません。値段が違います。これだけたくさん使うと価格が少し違うだけでもかなり影響がでてきてしまいます。
そこで、残念ですが、昔ながらの赤、黄、緑3色です。

●LED回路について

昔はLEDも消費電流が大きくて、それなりに大変でした。今は2〜3mAでも十分明るく光りますから、特に気にしないで手軽に使うことができます。

ところで、お見せした回路図をよく見ていただくと、LEDの表示回路に2通りあることにお気づきでしょうか?

レジスタのデータ出力ラインについているLED回路と、アドレスバス、データバスなどの74HC04からの出力ラインについているLED回路とでは信号に対するLEDの向きが反対になっています。
レジスタからの出力信号に対しては、LEDのアノードが接続されています。
これに対して74HC04の出力に対してはLEDのカソードが接続されています。

●TTLの出力にLEDのアノードはつなげない

その昔のスタンダードのTTL(7404など)やLSTTL(74LS04など)ではもっぱらカソード接続が常識でした。
スタンダードのTTLやLSシリーズでは、出力がHの時とLの時とで、流し出せる(流し込める)電流値に大きな差がありました。
LSTTLでは出力信号がLの時はなんとか数mA流し込むことができますから、カソード接続でLEDを点灯させることができます。

出力がHの時も、取り出そうとすれば数mA取れないことはないのですが、それをやると、ICにダメージを与える恐れがあります。

そもそもLSTTLの出力はHレベル電圧が低いのです。Vccが+5Vだというのに、LSTTLのHレベル出力はせいぜい3.5Vていどしかありません。しかも少し多めに電流を取ろうものなら、2Vとか2.5Vとかという電圧にまで下がってしまいます。
LEDは最低でもアノードとカソードの間に2V以上の電圧差が必要ですから、こうなってくると、とても使えたものではありません。

ですから以前はLED表示回路は、一度ラインの出力をインバータ(7404、74LS04など)で反転させてからLEDのカソードにつなぐようにしていたのです。
私もそのクセが抜けなくて、74HCシリーズを使うのが普通になってからも、つい74HC04でインバートしてからLEDのカソードにつなぐという回路にしてしまいます。

もっとも今回の回路は、そういうクセで74HC04でわざわざインバートしているわけではありません。
その理由についてはのちほど(多分また次回以降になってしまいそうです)、説明します。

●74HCシリーズの出力にはLEDのアノードをつなぐことができる

7404などのスタンダードTTLや、74LS04などのLSTTLではLEDのアノード接続ができなかったのに、74HC04などのHCタイプではなぜ、そうすることができるのでしょうか?
その理由は、じつは、74HCは、74シリーズや74LSシリーズとは構造が全く違うからなのです。
そのことは、名前にはっきりと示されています。
TTLとは、トランジスタ・トランジスタ・ロジックの略(だったと思います)で、トランジスタで構成されたロジックだったわけです。

TTLの出力段を模式的に簡略化して示すとこんな感じになります。
コレクタ側に抵抗が入っていますから、どうしてもH出力が弱くなります。

ではLSTTLはどうなのか、といいますと、これもTTLですから基本的な違いはありません。
LSというのは、ローパワー・ショットキーの略語で、ショットキーバリアダイオードを使って高速化を図ったのだそうで、スタンダードTTLに比べて消費電流の減少とファンアウト(1個の出力がいくつのゲートを駆動できるか、という接続可能な最大ゲート数のこと)の増加によって、広く使われるようになりました。

いっぽうHCはどうかといいますと、ハイスピード・CMOSの略で、その名の通り、CMOSのICなのです。
さきほどのTTLにならって、出力段を模式的に示すとこんな感じです。

P型FETとN型FETが組み合わされて出力段を構成しています。H出力の時は上側のP型FETがONしてOUTにVDDからの電流を供給し、L出力のときは下側のN型FETがONしてOUTからGNDへと電流を流します。互いに動作を分け合って補うような働きから、complementary(相補型)と言われる理由はそこにあります。

TTLなどと異なり、H出力はほぼVDDと同じ高さの電圧値の出力が得られ、L出力もほぼ0Vです。
74LSなどではできなかった、LEDのアノードを接続してのLED表示も、この特性だから可能になりました。

●オープンコレクタまたはオープンドレイン

なお今回の回路で多用している74HC03および74HC05はちょっと変わった出力をしています。
今までの説明のまったく逆のようなお話になります。
じつは74HC03や74HC05の出力には、上側のFETが無いのです。

このような出力のICゲートをTTLではオープンコレクタと呼びます。
出力トランジスタのコレクタ側がオープンになっている、という意味です。
74HCではFETですからオープンドレインと言ったりしますが同じ意味です。

上側のトランジスタがありませんから、H出力が出せません。
それじゃあ、困るだろう?

そりゃあ普通の回路には使えません。でも、これでなくては困る、という回路もあるのです。
じつは、そこのところが、今回の回路のキモとも言うべきところですから、その辺のお話については、次回以降に詳しく説明をいたします。

●TTLとHCは違うじゃないの

あ、そう言えば、今、気がつきました。
そうでした。HCはCMOSなので、TTLとは違う別物でした。

すると、このお話のタイトル「標準TTLだけで…」というのは、正確な表現ではありませんですね。
正確に言うと「標準的な74HCシリーズだけで…」ということになります。

74HCはTTLではない、と説明しておきながら、肝心のタイトルでそれを混同しているなど、技術的な解説をしようなどという姿勢とはおよそ縁遠い不正確きわまりない表現です。

でも、もう1ヶ月近くこのタイトルでやってきてしまいましたので、いまさら全部変えるっていうのも、なんですし、ここは、曲げて、TTLもHCもこの際、同じなのだ!といういきあたりばったりな表現に、なにとぞご賛同をお願いいたします。

うう…。やっぱりみっともない話ですね。近日中にタイトルはなんとか直すように考えます。
2008.8.2upload
2008.8.3加筆訂正

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