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

トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆


[第183回]



●INC/DEC REGISTER(6)WRITE回路(2)

前回の続きです。
INC/DEC REGISTER回路のデータWRITEで問題が発生したことについては[第180回]で書きました。
その後に何がおきているのか、どこがいけないのかを追求した結果、トラブルの原因がわかったように思います。
原因は2つありました。
前回はそのように書きました。
原因のひとつはクロック信号の入力回路にありました。
わかりやすく説明をするために前回お見せした回路図を再掲します。

下はコントロール信号回路です。


こちらはカウンタ回路です。


カウンタの動作をさせるために入力するクロックのHまたはLの期間中にフリップフロップ回路のトランジスタのベースにはAのT3、T4の出力かT5、T6の出力のどちらかが加えられます。
T3、T4かT5、T6のどちらがアクティブになるかは@の回路の動作で決ります。
問題は@の回路に入力されるQIN、Q_INとコントロール回路のD/U_信号回路の状態によって、常にT3、T4かT5、T6のどちらがアクティブになっているところにありました。
WRITE動作はAのT1、T2のトランジスタ出力がBのT1、T2のベースに加えられることによって行なわれますが、そのAのT1、T2のトランジスタ出力はAのT3、T4の出力と同じラインになっています。
そのときカウントアップ、またはカウントダウンのためのクロック入力はなかったとしても、入力クロックのHかLのどちらかは必ずあるわけで、さらにはD/U_の入力のH、またはLの状態もまたどちらかは必ずあるということから、もしもAのT3、T4の出力がアクティブな状態のときにWRITEが実行されたならば、WRITE回路の出力がAのT3、T4の出力とショートする結果、書き込みは正しく行なわれないことになります。
そのことがわかったため、WRITE信号がアクティブな期間中は@の回路の出力を禁止するように回路を改めました。
@の回路の出力段のT5、T6、T7、T8のエミッタはもとの回路ではVcc、GNDにつながっていたのですが、そこをWRG(WR_GND)、WRV(WR_Vcc)に変更しました。
よく見ていただくと、T5、T7(A1015)のエミッタにはWRG(WRITE動作時はGND、それ以外はVcc)が接続されていて、T6、T8(C1815)のエミッタにはWRV(WRITE動作時はVcc、それ以外はGND)が接続されていて、そのためにWRITE動作時は@の回路は非アクティブになります。
その結果、WRITE動作の期間中はAのT3、T4、T5、T6は非アクティブになります。

ところがそのように回路を変更したのですが、それでもまだWRITEのときに誤動作が発生します。
問題はもうひとつありました。
これは回路図からはわかりにくいかもしれません。
説明をすることもなかなかに難しいところがあります。
もとの回路ではAのT7、T8の回路はありませんでした。
もとの回路では何がおきていたかといいますと。
まずWRITEによってデータがBのT1、T2、T3、T4のフリップフロップに書き込まれます。
上で行なった回路の変更によってWRITE時はAのT3、T4、T5、T6は非アクティブになります。
当然WRITEが完了したあとはT3、T4かT5、T6のどちらかがアクティブになります。
T5、T6がアクティブになったときは問題は発生しません。
そのときはWRITEによって書き込みが行なわれたデータのQ_がBのT7、T8、T9、T10のフリップフロップにも書き込まれるからです。
問題はWRITEのあとでAのT3、T4がアクティブになったときです。
そのときはBのT7、T8、T9、T10のフリップフロップのデータがBのT1、T2、T3、T4のフリップフロップに書き込まれてしまいます。
そこにはその直前にWRITEによって書き込まれたデータがラッチされていたのですが、それが旧データによって上書きされてしまうことになります(BのT7、T8、T9、T10のフリップフロップにはWRITEによる書き込み前のQ_がラッチされています)。
これは悩ましい問題でした。
この解決はほとんど不可能に思えて、頭を抱えてしまったのでしたが。
ロジックをよくよく整理して考えてみた結果、今回の回路図のようにBのT7、T8、T9、T10のフリップフロップにも同じWRITEデータを与えればよいことがわかりました。

上と同じように、WRITEのあとでまずはAのT5、T6がアクティブになった場合について考えてみます。
その場合には、上の説明のときの動作と全く同じで、新たに追加した下側のWRITE回路によってBのT7、T8、T9、T10のフリップフロップに書き込まれたデータは上側のWRITE回路によってBのT1、T2、T3、T4のフリップフロップに書き込まれた新しいQ_によって上書きされてしまいますから、何も問題は発生しません。
それでは上で問題になったWRITEのあとでAのT3、T4がアクティブになった場合はどうでしょうか?
上側のWRITE〜フリップフロップと下側のWRITE〜フリップフロップは同じロジック回路になっていますから、WRITEの直後には上側のフリップフロップと下側のフリップフロップには同じ値がラッチされています。
するとそこでAのT3、T4がアクティブになると、上側のフリップフロップにはラッチされているのと同じ値が書き込まれるため、何も問題は発生しないことになります。

なんだかわかったようなわからないような説明ですけれど、一応の裏付けはしてあります。
かなり手間でしたが、現行の試作基板を改造して動作テストを行い、正しく動作することを確認しました。
そのあたりのことについては次回に書くことにいたします。

トランジスタでCPUをつくろう![第183回]
2019.12.4upload

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