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

●TK80の資料をいただいてしまいました!

前回、「資料をなくしてしまったので、TK80ではどのような回路になっていたのかは、わかりません」と書いたところ、お読みいただいた方が、TK80のユーザーズマニュアルを送ってくださいました。回路図もいただきました。感謝です。
S様、ご親切ほんとうにありがとうございました。

●TK80の7segLED表示回路

さすがに30年近くも前のことになると、記憶違いもあって当然ということでしょうね。
前回、TK80はLED表示回路に「74LS90」を使っていた、と書きましたが、記憶違いでした。
今回いただいたTK80の回路図(およびユーザーズマニュアル)を見ると、74LS90ではなくて、7493(μPB223)になっています。
おお、LSではなくて、スタンダードTTLだったのですね。時代を感じさせてくれます。

そしてTK80では7segLED表示回路のクロック発振にタイマーICのNE555を使っています。
NE555で、約1KHzの幅の狭いパルス(数μS)を出力し、それをCPUへのバス開放要求信号(HOLD信号)にするとともに、同じ、そのNE555からの約1KHzのパルスを、7493で受けて、DMA用のメモリアドレス出力としています。

[出典]NEC TK80ユーザーズマニュアル

図の上側のチャートは、NE555からの出力パルスと、それをうけて7493から出力される、A0〜A2(DMAアドレスの下位3ビット)との関係を模式的に示したものです。
図の下側は、NE555から出力されるパルスがCPUに対するHOLD要求信号になり、CPUが一時停止してバスを開放している期間に、アドレスバスに強制的にDMAアドレスが挿入され、メモリから出力されるデータをラッチして、LED表示データとする様子を示したものです。

CPUがHOLD要求によってホールトしている間はアドレスバスとデータバスは開放されます。
そこに7493からの信号がアドレスバスのA0〜A2として出力されます。
上位のA3〜はプルアップされているため、DMA期間中は、RAMの83F8〜83FF[*注1]をアクセスすることになります。

[*注1]
TK80はメモリアドレスを完全にはデコードしていません。A15=1のときはRAMが、A15=0のときはROMがセレクトされます。
83FFでもFFFFでも同じRAMが選択されますが、TK80ではRAMアドレスを8000〜83FFとしてあつかっています。

●「つくるCPU」のLED表示回路の説明です

まずは、最初に[第120回]で紹介した、改良前のLED表示回路で、LEDがダイナミックドライブされる、各桁の表示タイミングを模式的に示します。

LEDに表示するデータをラッチするM1信号は、実行される命令の長さによって周期が異なります。
そのため、上の図のように、桁ごとに表示する時間が異なってきてしまいます。
多分LEDの各桁がチラチラするような表示になってしまうのではないか、と思います。
これは、やっぱり、よくありませんね。

そこで、お待たせしました。
やっと、前回、[第124回]で改良したLED表示回路の説明です。
改良前は、LED表示データアドレス(下位3ビットのアドレス)を出力するバイナリカウンタ74HC191のCK入力にM1[*注2]が入っていましたが、それを74HC04回路からの信号に変更しました。
この74HC04回路はRC発振回路です。約400Hzで発振します。
M1の代わりに、この信号が入るとどうなるのでしょうか。図で示します。

[*注2]
改良前の回路図([第120回])では、74HC191のCK入力にはT3が入っていましたが、ここはその後、誤りに気づいたので、M1に訂正([第122回])しました。

LED表示データがM1のタイミングでラッチされることは、改良前と同じなのですが、改良前は74HC191から出力される表示データアドレスもM1のタイミングで変化していました。改良後はM1とは関係無く(厳密にはほんの少し関係するのですが)、約400Hzで変化します。

LEDの表示データが変化するのは、HC191の出力が変化した後の、最初のM1のタイミングになります。
厳密にはこれでも、M1の長さの差は残るのですが、HC191の出力が変化する期間(約2.5mS。2500μS)に比べて、M1はCPUクロックが2MHzの場合で、4μS〜25μSと短いので、目立つほどの差にはならないと思います。

約400Hzのパルス(74HC191のCK入力)と、M1との関係は、図では模式的に示しています。
実際のM1の期間は、HC191の入力クロックに比べて、図よりもはるかに短い間隔です。
各桁の表示期間の差は最大で(25−4)/2500=0.8%程度です。

TK80ではLED表示のためのDMAを行うのに、HOLD信号(バス開放要求信号。CPUがこの信号を受けつけると、実行を一時停止して、アドレスバス、データバス、その他の出力信号をハイインピーダンスにして、外部に開放します)を使用しています。
この方法ではLED表示データを取得するために、実行中のプログラムを一時停止させる必要がありますから、ほんのわずかですがプログラムの実行時間が遅くなります(1%程度)。

今回の「つくるCPU」でのLED表示は、CPUを停止させることなく、CPUがメモリからデータを取得し終わって、バスが空いている期間を利用して、メモリからデータを取得する、サイクルスチールによるDMAを行っていますから([第121回]参照)、LEDに表示させるデータを取得していても、プログラムの実行速度は変わりません。
またTK80では、DMAの期間だけアクティブになるような幅の狭いパルスが必要なため、NE555のようなオシレータICを使っていますが、今回の「つくるCPU」での方法では、幅の狭いパルスは必要ありませんから(デューティ比は無関係です)、簡単なRC発振回路を利用することができます。
2008.12.13upload
2008.12.14一部加筆&訂正

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