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

●ダイオードOR

[第45回]のRSフリップフロップの回路図にダイオードORがありました。
もう一度、回路図をお見せします。

74HC00のpin2の入力のところです。
ダイオードでつくったOR回路です。
今回のように、改造のために、あとからORを追加しなければならない場合には重宝します。
しかし、はじめからこれを使うのは余り感心しません。
本来はきちんとロジックICを使うべきです。

ダイオードORは、ワイヤードORと同じものだといえる、と思います。
ワイヤードORは、この「つくるCPU」回路でめちゃめちゃ多用しています。
すると、ワイヤードORも使っちゃいかんのではないか、というお話になってしまいそうですが…。

●ワイヤードOR

そこで、話の順序から、まず、ワイヤードORについて、説明をしなければなりません。
普通のOR回路は下の形をしています。

左は正論理(H信号に意味がある)で右は負論理(L信号に意味がある)のOR回路です。
ところが、今回の「つくるCPU」回路では、このスタンダードのOR回路は使えないのです。

●なぜ普通のOR回路は使えないのか?

今まで説明してきた、MOV命令のタイミングチャートには命令の最後にMclrという信号がありました。
T、M、Wのマシンクロックを作り出す、バイナリカウンタ74HC161をクリアする信号です。
命令の最後のタイミングでこの信号を出すことによって、命令のクロックパルスがゼロクリアされるので、またOPコードフェッチサイクルから始めることができます。

ということは、このMclr信号は、命令の数だけ、出力されるということになります。
これを全部ORで受けていたら、大変なことになります。
OR入力が50とか100とかというお化けのようなORゲートが必要になってしまいます。

そんなORゲートなどありませんし、仮にあったとしても、どうやって配線すればよいのでしょう。
Mclrの配線だけで基板を占領してしまいます。

Mclr信号だけではありません。
regRDも、regWRも、いろんな命令によって、いろんなタイミングで出力されることは、多分想像がつくと思います。

このようにやたら信号線が多くなるのがCPU回路の特徴です。

●CPU回路のほとんどは、いつも止まっている

しかしCPU回路の特徴はそれだけではありません。
もうひとつの、大きな特徴は、あるタイミングで見てみると、「ほとんどの回路は動いていない」ということです。

ある命令を実行しているときは、その命令のための回路は動いていますが、それ以外の命令回路は全く動いていないのです。
ということは、たとえばMclrの配線が100本あったとしても、ある瞬間で見てみると、アクティブになるのは1本だけか、あるいは全くアクティブにならないかのいずれかだけで、その間は残りのMclrの配線は全く使われていないのです。

●ワイヤードORは複数の出力線を1本にしてしまう

それなら、いっそ1本の線にしてしまえるのではないか、という考えから、ワイヤードORという発想に行きつきます。
ワイヤードORとは、複数のゲートの出力をたばねて1本の線にしてしまう接続法です。

こんな感じです。

いや。だめ。これはだめです。
LSでもHCでもこの接続法は許されません。

●ゲートの出力同士はつなぐことができません

たとえば上の図で、74HC04の上側のゲートの出力がH、下側のゲートの出力がLだったとします。
するとHの出力からLの出力(Lは実際には電流が流れ込む)に出力ショート電流が流れてしまいます。
74HC04の場合、多分20mA以上流れてしまうと思います。
最悪の場合、ゲートが焼き切れてしまいます。

そうならないとしても、回路としては使い物になりません。
出力がショートすると、その出力ラインは、HとLの中間電位に近くなります。Vccが5Vの場合、2〜3Vです。これでは、使えませんね。

そこで登場するのが、オープンコレクタ(オープンドレイン)ゲートなのです。

●CPU回路では74HC03と74HC05が大活躍

オープンコレクタ(オープンドレイン)出力とは、ゲート出力回路の、H出力とL出力をそれぞれ分担している2個のトランジスタ(HCの場合にはFET)のうち、上側(H出力)のトランジスタ(FET)が無いような出力のことをいいます(74HCゲートの出力構造については[第25回]で説明しています)。

74HC00のオープンドレインタイプが74HC03です。
74HC04のオープンドレインタイプが74HC05です。
H出力用のFET回路がありませんから、H出力はできません。できるのはL出力だけです。

H出力のときはどうなるか、というとハイインピーダンスになります。つまり、H出力のときは、ラインに出力がつながっていないのと同じことになります。
これなら、出力同士をつないでしまっても大丈夫です(下図)。

この「つくるCPU」回路では普通のゲートとオープンドレインのゲートを区別するために、オープンドレインのゲートには、図のように、出力端子に*をつけて示すことにしました。

●ワイヤードORにはプルアップ抵抗が必要

出力ラインに抵抗がついています。プルアップ抵抗です。
オープンコレクタ(オープンドレイン)出力回路はLアクティブにはなりますが、H出力がありません。ラインにつながっているすべての出力ゲートが非アクティブのとき、ラインはハイインピーダンスになってしまいます。

HCなどのCMOS回路ではラインをハイインピーダンスにすることは許されません。
ラインがハイインピーダンスになると、そこにつながっている入力ゲートICが、最悪の場合破損してしまいます。
それを防いで、アクティブなL出力がないときに、Hレベルを維持するけれど、出力がLになっても、L出力のゲートに対して許容量以内の電流しか流さない程度の抵抗値のプルアップ抵抗をつけます。

その目的から考えると、プルアップ抵抗は、出力側よりも、できるだけ入力側の近くにつけることが望ましいと思います。
抵抗値はHCなどのCMOS回路では、電圧さえあればよいわけですから、極端なことをいうと1MΩでもよいことになります。
しかし、余り抵抗値が大きいと、ノイズに弱くなりますし、ラインの浮遊容量などのCが無視できなくなって、LからHへの立ち上がりが遅くなってしまう可能性がでてきます。
常識的にいうと、1KΩ〜100KΩ程度の値がよいのではないか、と思います。
「つくるCPU」回路では、1KΩでプルアップしています。

●やっと、ダイオードORの説明です

以上の説明の通り、ワイヤードOR回路にするには、普通のゲートICである74HC00や74HC04は使うことができません。
しかし、ちょうど今回のMOV回路の改造のように、予期しない事情で回路を変更する必要が生じたとき、OR回路が必要なのだけれど、基板上には利用できるORゲートが無い、などという場合に、窮余の一策として登場するのが、ダイオードORなのです。
あくまで窮余の一策ですから、正攻法ではない、と心得ておいてください。

先に説明したように、


という回路は許されませんでしたが、
ダイオードを使って下のようにすると、立派なワイヤードORになります。

このようにすると、出力がLの場合にはライン(抵抗)から、その出力に向かって、ダイオードを通して電流が流れますから、ラインはLになります。
しかし出力がHの場合には、H出力からLを出力するゲートに対して流れ込もうとする電流は、ダイオードのために止められてしまうので、オープンコレクタ(オープンドレイン)と全く同じ働きをすることになります。

しかし全く同じか、というとそうは言えないのです。
こういう使い方にはまことに重宝な1N60というゲルマニウムダイオードがありましたが、今はゲルマニウムダイオードは特殊な用途にしか使われなくなってしまい、みんなシリコンダイオードになってしまいました。
シリコンダイオードは、上の図で出力がLの場合に、抵抗からゲートに流入する電流のために、アノードとカソードの間に電圧差が生じます。
どのくらいか、というと、これが以外に大きくて、0.6Vから0.8Vもあります(ゲルマニウムダイオードは0V)。

HCのスレッショルド電圧はVccの1/2近辺ですからVcc=5Vの場合、約2.5Vです。
それが上の回路では、入力側がダイオードを介して得られるL入力電圧は、0.8V近くまで浮き上がってしまいます。
ふつうのHCゲートのL出力電圧はほとんど0Vですから、ノイズマージンが2/3になってしまうことになります。
ダイオードORは、通常は使わない方がいい、というのはそういう理由からです。

●ダイオードORをLSTTLで使うのはまずい

HC回路では、ダイオードORは窮余の一策としては、使うことができます(それほど厳格に考える必要がない回路ならば、まあ、いいか、という調子で使ってしまうこともできます。よほどひどい環境でなければ、使っても多分問題はありません)。
しかし、LSTTL回路では、ちょいと問題です。

なぜならLSTTLのスレシッショルド電圧はHCよりも1V近くも低いのです(1.5V近辺)。
ということは、ダイオードOR回路では、ノイズマージンが1/2に減ってしまい、ダイオードを介したL入力電圧とスレッショルド電圧の差が、わずか0.7V程度になってしまうことを意味します。
これじゃあ、危なくて、使えません。
LSTTLでは、ダイオードORは使わない方が無難です。

●ワイヤードORは負論理にしなければならない

今まで説明してきたダイオードORは、74HC05や74HC03で置き換えができる、ワイヤードORと同じ機能の回路でした。
じつはダイオードORにはもうひとつ別の形の回路があります。

こんな回路です。

今まで説明してきたダイオードOR回路とは、ダイオードの向きや抵抗の接続が逆になっています。
これも立派なダイオードOR回路です。

今まで説明してきたワイヤードORやダイオードORは負論理が前提でした。
無信号はH(実はハイインピーダンス)で、信号有りがLです。

上の回路は、正論理で使えるダイオードORです。
出力がLのときはダイオードがあるために、入力側には何も伝わりません。つまりハイインピーダンスです。
このとき入力側のゲートには抵抗を通じてGNDレベル、つまりLが入力されます。
出力がHのときにはダイオード、抵抗を通して電流がGNDに流れます。この結果、ダイオードと抵抗の交点の電圧は4.2V程度になるので、H信号として入力側に伝わります。

ところが、普通のHCには、この回路と同じ機能にするための、74HC03や74HC05のようなICが無いのです。
L出力がハイインピーダンスになるのですから、オープンコレクタ(オープンドレイン)ではなくてオープンエミッタ(オープンソース)ということになるのでしょうか。L出力のための、下側の出力FETが無いようなゲートICは、残念ながらありません。

そこで、どうしても、正論理のワイヤードOR回路が欲しい場合には、図のようなダイオードOR回路にするほかはありません。
しかし、ダイオードORはノイズマージンが低下するので、やむをえない場合を除いて、使うべきではない、というような意味のことを書きました。
その考えを回路設計の原則とするならば、ワイヤードORは、負論理の回路でしか実現できないことになります。

ノイズマージンについては無視したとしても、正論理のワイヤードORはダイオードORにするしかない、となると、ダイオードだらけになってしまって、基板サイズも大きくなってしまいますし、コストも余計にアップしてしまいますから、無理に正論理のワイヤードORにするメリットはなにもありません。

「つくるCPU」回路では、目的によって、正論理の信号と、負論理の信号をともに使っていますが、ワイヤードORが必要な回路では、全て負論理になっているのは、そういう理由からでもあります。
2008.8.26upload

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