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

●INT(割込み)、EI命令、DI命令の回路です

割込み(INT)とEI命令、DI命令の回路は一体になっています。
なかなかに複雑な回路です。


INTとEIとDIの回路はそれぞれを切り離してしまうことはできません。
でも全部を一度に説明するのはちょっと難しいので、まずはINT回路の動作部分から説明することにいたします。

●割込みのタイミングチャートです

割込みのタイミングチャートは[第177回]でもお見せしています。
話を分かり易くするために、EI命令がすでに実行されていて、割込みが受付け可能(INTenbl)な状態にあることにします。
そこに外部から割込み信号(INT)が入力されます。
INT信号は各命令のT0でサンプリングされ、割込みが受け付けられます。
上の回路図の下の方にあるRSフリップフロップがその回路です。
以下の説明は、タイミングチャートと回路図を見ながら読んでみてください。

●INT命令の回路の動作

INT信号はT0とのANDによって、RSフリップフロップをONにします。
RSフリップフロップの出力は、回路図の上の方、なにやら複雑なDフリップフロップとのANDによって、その後ろの出力回路をアクティブにします。
このフリップフロップがINTenblの状態を維持している回路です(ここはあとで説明します)。
EI命令が実行されたあとは、このフリップフロップのQ出力がHになって、さきほどのRSフリップフロップからの信号を後段に伝えます。
DI命令が実行されると、このDフリップフロップがクリアされて、RSフリップフロップの出力は遮断されてしまい、後段には伝わりません。

ここの後段では、HLTclr、intRD、PCclkDE、outDEをアクティブにしています。
HLT命令によってホルトしていたとき、そのホルト状態は割込みによって解除されます。
それがHLTclr信号です。
ホルト状態を維持していたRSフリップフロップはHLTclrによってクリアされます([第53回]のHLT命令の回路図参照)。

intRDは外部に、割り込みが受け付けられたことを示す信号です。
この信号がアクティブになっているときに、外部回路からデータバスに割込み命令を乗せることで、その命令がOPコードレジスタにラッチされます。

PC(プログラムカウンタ)は、通常の命令コードがメモリから読み込まれて、OPコードレジスタにラッチされたあとのT3で+1されるようになっています。この仕組みによって、CPUは次々にメモリから新しい命令を読み込むことができるのです。
しかし、割込みが受付けられたときには、PC(プログラムカウンタ)は+1されないようにして、現在のプログラムアドレスを維持しておく必要があります。
PCclkDEは、T3のときにPC(プログラムカウンタ)が+1されないように、カウントアップを禁止する信号です。

割込みが受付けられたあとのintRDがアクティブな期間には、外部から割込み命令をデータバスに乗せる必要があります。そのため、outDEをアクティブにして、外部アドレスバスをハイインピーダンスにします。

PCclkDE、outDE信号は、[第39回]のPC(プログラムカウンタ)の回路図および外部制御回路の回路図にあります。

さて、さきほどの、INT信号が受付けられたことによって、後段の回路から出力される信号がもうひとつあります。
いま説明した4つの信号は、INT信号が受付けられた直後からアクティブになりますが、残る1つの信号はT4のときにアクティブになります。
74HC03でT4とのANDをとって出力されます。
その出力をたどると、INTenblを維持しているDフリップフロップのclr端子につながっています。
この回路によって、割込み可能状態は、INT信号が受け付けられたあとのT4のときにクリアされてしまい、それ以後は重ねて割込みが受け付けられない状態になります。

●DI命令の回路

これは簡単です。
上で最後に説明したDフリップフロップのclr端子に、DI命令がデコードされた信号が、これも同じT4のタイミングで伝えられます。
このフリップフロップがクリアされると、INT信号が入力されても、無視されてしまうことは、上で説明した通りです。

●EI命令の仕組み

前回([第242回])の終りのところで、EI命令が実行された直後に割込みが入ってきて、割込み処理ルーチンの実行が終了する前に重ねて割込みが発生しないよう、EI命令の回路には特別の工夫がしてあります、というお話をしました。
それが上の回路図にある、2段のDフリップフロップ回路です。
その部分だけ切り取ってもう一度お見せしましょう。



あれえ。何を考えていたのでしょう。
ここはえらく無駄な回路になっています。
今気がつきました。
74HC74のpin3のCK入力にはT4をそのまま入力すればよかったですね。
こんなゲート回路は余分でした。
また配線図を直さなければいけません。なんだかどんどん修正個所が増えてしまいます。

さて、EI命令の回路の動作です。
前段のフリップフロップはEI命令のT4のときにセットされます。
その出力は後段のフリップフロップのD入力につながっています。

ところがその後段のフリップフロップのCKには、T3が入っています。
T3は当然、T4よりも前ですから、EI命令では、もうすでに済んでしまっています。
ですからEI命令の実行中には、割込み受付け可能な状態(後段のフリップフロップのQ出力がHの状態)にはなりません。
次の命令のT3のときにはじめて割込みの受け付けが可能になります。
そして、実際にINT信号がサンプリングされるのは、すでに説明しましたように、さらにそのEI命令の次の命令が終了したあとの、次のT0のとき以後ということになります。
2009.6.7upload

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