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

●あれま。ヒゲがある…

本日はCPUクロック回路のお話です。
CPUクロックについては[第137回]で説明をしました。
そのあと、続きを書くつもりだったのですが、だんだん軌道がずれていってしまって、なかなか戻ることができませんでした。

CPUクロックについては、回路としては、[第137回]で説明をした内容が全てなのですが、出力されるクロック波形について、お話しておかなければならないことがあります。
それが、今回のテーマ、「ヒゲ」について、です。

ヒゲがある、と言いますと、その昔の、「ウチの女房にゃヒゲがある」などという歌を思い出します。
想像するだに、身の毛がよだつ、まことに恐ろしい歌で…(ンなわけはないです。お若い方はご存知ないかと思いますが、お年を召した方なら一度や二度はお聞きになったことがお有りかと思います。コミカルな歌です)。

歌はコミカルなものなのですが、こちらのヒゲは、ときとして誤動作の原因ともなるやっかいなものです。
下の写真の矢印が問題のヒゲです。



スイープを拡大してみました。



うーん。10ns近くはありそうですね。
どうしてこんなヒゲが出来てしまったのでしょうか。

マシンクロック発生回路です。[第137回]でもお見せした回路図です。



オシロスコープの写真の上側(CH1)の波形は、回路図の@です。
下側(CH2)のヒゲのある波形は、回路図のA〜Eで見られました。

●同期カウンタと非同期カウンタ

「つくるCPU」では、このマシンクロック回路で使っているカウンタ74HC161のほかにも、PC(プログラムカウンタ)回路では74HC193を、そしてINC/DCR回路では74HC191というカウンタを使っていますが、いずれも同期(Synchronous)カウンタといわれる種類のカウンタです。
参考までに、74HC161のdatasheetをお見せします。

●74HC161のデータシート(部分)です


[出典]Texas Instruments社SN74HC161datasheet

●非同期カウンタと「ヒゲ」

これらの同期カウンタに対して、その昔の定番だった10進カウンタ74LS90や16進(バイナリ)カウンタ74HC93は非同期カウンタです。
かってカウンタICの代表格だった、この2つのICも今では定番から外れてしまいました。
時代が変わったなあ、としみじみ感じます。

実はこの同期、非同期と「ヒゲ」とは深い関わりがあります。
同期カウンタは出力のビット信号が同時に変化します。ですから「同期」カウンタです。
非同期カウンタは、出力にわずかな遅延があって、同時には変化しません。

非同期カウンタは単なるカウンタとして使う分には問題はないのですが、クロック周波数の高いロジック回路で使うときには注意が必要になります(そういうこともあって、74HC93などが使われなくなったのかも知れません)。
どういうことなのか、その説明は、今は使われなくなった74HC93などを引き合いに出すよりも、今回のマシンクロック回路で説明する方が、より具体的でよいと思います。

ちょっと待ったぁ。
ついさっき、「つくるCPU」の回路では同期カウンタを使っているって、言ったじゃないのぉ?
どこに非同期カウンタが出てくるって言うの?

もう一度、さきほどの、「マシンクロックの回路図」を見てください。
74HC161は同期カウンタですけれど、出力ビットが4ビットしかありません。
今回の回路としてはもう1ビット欲しいので、不足する1ビットをDフリップフロップ74HC74を利用して追加しています。
74HC74の出力(Qe)は、74HC161の出力(Qa〜Qd)とは同期がとれていません。
74HC161の出力を受けて、それから出力するために、どうしてもほんのわずか、遅れてしまいます。
ですから、ここが非同期なのです。

同期カウンタを使って4ビット以上の出力を「同期」して得るための回路方法もあるのですが、今回はわずか1ビットの追加なので、「ま、いいか」てな感じで、手抜き回路です。
やっぱり、余り良くはなかったみたい、です。

「非同期」だと、なぜ、ヒゲが出てしまうのか?
タイミングチャートで説明します。

下のタイミングチャートは、「マシンクロック回路」の74HC191からの出力Qa〜Qdと74HC74からの出力Qeと、それを受けて74HC238から出力される、T0〜T23、M0〜M7、W0〜W7の各波形を示したものです。
QeはQa〜Qdよりも少しだけ遅れて変化します。その様子を強調して示してあります(青色矢印の部分)。
QeがQa〜Qdよりも遅れることによって発生するヒゲを赤矢印で示してあります。
またヒゲではありませんが、逆にQeの遅れによって、本来の出力パルス幅よりも幅が狭くなってしまう部分を緑矢印で示しました。

たとえばT0はQe〜Qaが00000のときにHになります。それ以外のタイミングではH出力はないはずです。
ところが、本当はQe〜Qaが10000なので出力されないタイミングなのに、Qeが遅れて立ち上がるために、ほんのわずか00000の期間が発生してしまい、そのときヒゲが出力されてしまいます。
同様に、T16はQe〜Q0が10000のときにHになります。それ以外のタイミングではH出力はないはずです。
ところが、本当は00000なので出力されないはずなのに、Qeが少し遅れて立ち下がるために、ほんのわずか10000の期間が発生してしまい、そのときにヒゲが出力されてしまいます。

どんな場合でもヒゲが出てしまうかというと、そんなことは無くて、Qeの遅れの影響を受けない出力もあります。
上のタイミングチャートの出力波形で、赤矢印がついていない出力ラインはQeの遅れの影響をうけない出力です。
2番目の74HC238の出力である、T8〜T15はQeの遅れの影響をうけない期間に信号を出力するために、このICの出力にはヒゲは発生していません。

では、このようなヒゲは「つくるCPU」の回路の動作に影響を与えるのでしょうか?
普通の命令回路などでは、まず問題はありません。
しかし、カウンタやフリップフロップをセット、リセットしたり、レジスタにデータをWRITEするタイミングで、このようなヒゲがあると、ひょっとすると、それらの動作に影響を与えてしまうかも知れません。

幸いヒゲが出ているラインはわかっています。
T0、T16、M0、W0、W4です。
様子によっては、ヒゲをつぶしてしまう方が安心できます。たかだか10nsていどの幅の狭いパルスですから、多分、小さなセラミックコンデンサで十分つぶしてしまえると思います。
2009.1.20upload

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