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

●BUSRQ回路の説明です

今回も外部との接点の回路の説明です。
BUSRQ(バスリクエスト)はCPUの機能というよりは、CPUを働かせないための機能です。
その意味ではHLT命令の仲間といえるかもしれません。

BUSRQ信号がCPUに入力されると、CPUはプログラムの実行を一時停止します。
そこまでは、外部から強制的に実行されるHLT命令のようなものだと言えるでしょう。
しかしBUSRQ信号の本来の目的はCPUを停止させることではなく、外部バスのコントロール権をCPUから一時的に奪うことなのです。だから、バスリクエストです。

BUSRQ信号が入力されると、CPUはプログラムの実行を一時停止するとともに、BUSRQ信号を受け取った合図として、BUSAK信号を出力します。
そして外部アドレスバス(A0−A15)、外部データバス(D0−D7)、MEMRD、MEMWRなどの信号出力をすべてハイインピーダンスにします。
つまりBUSRQ信号を入力することによって、一時的にCPUをメモリやI/Oから切り離してしまうのです。

そんなことをして、何の意味があるのでしょうか?

実はこれはとても重要な機能なのです。
DMA(ダイレクトメモリアクセス)も、この機能が必要になります。

今まで動作テストをしてきた、MOV命令や、MVI命令のテストプログラムは、メモリに接続した当社のBASIC制御マイコンボードZB25Kを使って、RESET信号を与えて、CPUをリセットした状態にしておいて、メモリにマシン語命令コードを書き込みました。
しかしこれから追加基板のテストを進めていくことになると、リセットするのではなくて、CPUを一時的に停止させておいて、メモリの状態を確認したり、メモリの中身を書き換えたりする必要が出てくると思います。

そんな場合には、BUSRQとBUSAKが威力を発揮するはずです。

●BUSRQの回路図です

BUSRQ信号は、OPコードフェッチサイクルの最後のT3サイクルでチェックされます。
BURQ信号(アクティブL)が入力されると、T3の期間にMstopがアクティブになります。
Mstopは、T、M、Wの各タイミングパルス出力のもとになっている、バイナリカウンタ74HC161のカウントを停止させる信号です。
74HC161のカウントが停止すると、T3パルスが出たままになりますから、BUSRQ信号が無くなるまで、その状態が継続することになります。
同時にBUSAK信号出力がアクティブになります。
また、外部アドレスバス、データバスの出力を禁止して、出力をハイインピーダンスにする、outdEをアクティブにします。

●CPUがBUSRQ信号を受け付けたときの写真です



今のところ、MOV命令とMVI命令のほかにはHLT命令しか実行できませんから、BUSRQの完全なテストをおこなうことはできません(せめてJMP命令が使えないことには、動作中のCPUに対してBUSRQの入力テストをすることは困難です)。
そこで、HLT命令を実行中にBUSRQ信号を入力して、とりあえずの動作を確認してみました。
この写真は、今までお見せしてきた、命令をステップ動作させながら撮影したものではなく、HLT命令の実行中に(HLT命令はT0〜T3を繰り返し実行します)、BUSRQ信号を入力して、停止した状態を撮影したものです。

通常のクロックで実行させているため、いままでのステップ動作では点灯していた、外部クロック入力を選択する信号の入力表示、ExclkE(写真右下の黄色LEDの右から3番目)は、消えています。
HLT命令の実行中であることを示すHALTA(同、一番右端のLED)が点灯しています。
BUSRQ信号を受けつけていることを示す、BUSAK(右から4番目のLED)も点灯しています。

写真右上近くの、タイミング期間を示すA〜D(74HC161のQa〜Qd出力)は、AとBが点灯して、T3の期間で停止中であることを示しています。
もう一度、写真の今度は左下方を見ると、OPコードフェッチサイクルなのに、プログラムカウンタの値が外部アドレスバスA0〜A15に出力していることを示す、PCADoutは消灯しています。
プログラムカウンタ下位8ビット(PCL)は、HLT命令が書いてあるメモリアドレスの下位8ビット、00000111を示しているのに、アドレスバスもデータバスもFF(11111111)を表示しています。
本当は全部ハイインピーダンスになっているのですが、プルアップ抵抗がついているため、全ビットが1(Hレベル)になっています。
CPUからはメモリをアクセスするために必要な信号、A0−A15、D0−D7、MEMRD、MEMWRは出力されていなくて、全てハイインピーダンスになっていますから、この状態なら、外部から自由にメモリに対してREAD、WRITEすることができます。

●BUSRQと、BUSAKの波形写真です





BUSRQ信号は入力したらすぐに受け付けられるのではなくて、T3のタイミングのときのみ、受け付けられます。
2枚の写真は、いずれも上の波形(CH1)がBUSRQで、下の波形(CH2)がBUSAKです。
BUSRQがアクティブになると同時にBUSAKがアクティブになるのではなくて、BUSRQがアクティブになってから、BUSAKが出されるまでには少し遅れがあることがわかります。

今回のテストではCPUがHLT命令をT0〜T3の期間を休み無く実行中に、BUSRQ信号を入力したのですが、それがCPUに検出されるのはT3のタイミングのときのみです。
BUSRQ信号の入力はT0〜T3のどのタイミングであるかはわかりません(決められません)。
しかしBUSAKはT3のときに出力されることになりますから、上の2枚の写真のように、BUSRQがアクティブ(L)になってから、BUSAKがアクティブ(L)になるまで0クロックから3クロック(0〜750nsec)の遅れが出ることになります。
2008.9.4upload

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