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

●SP(スタックポインタ)の回路図です



SP(スタックポインタ)の回路はPC(プログラムカウンタ)の回路とほとんど同じです。
違っているのは、PC(プログラムカウンタ)がカウンタにリセット端子がついた74HC193を使っているのに対して、SP(スタックポインタ)はリセットする必要が無いので、リセット端子が無い74HC191を使っている点だけです。

SP(スタックポインタ)に74HC193を使わなかった理由は、74HC193はUPカウントパルスとDOWNカウントパルスがそれぞれ必要なので、回路が複雑になってしまうからです。

PC(プログラムカウンタ)はリセットしなければならないので、74HC193を使うより仕方がなかったのです。それでもPC(プログラムカウンタ)はUPカウントしかしないので、回路は複雑にならずに済みました。

SP(スタックポインタ)はPC(プログラムカウンタ)と同じように16ビットのメモリアドレスを記憶します。
74HC191は4ビットのUP/DOWNカウンタなので、4個をつないで16ビットのカウンタとして使います。
スタックアドレスを書き込むために、パラレル入力端子(A〜D)は内部データバスにつながっていて、LD端子(pin11)には、下位8ビットを書き込むための、SPLregWRと、上位8ビットを書き込むためのSPHregWRがそれぞれ接続されています。

SP(スタックポインタ)は保持しているスタックアドレスを、必要に応じて、+1ずつカウントアップしたり、−1ずつカウントダウンさせます。
+1カウントアップするときにはD/U端子(pin5)をLにし、−1カウントダウンするときにはD/U端子をHにしておいて、CK端子(pin14)にクロックパルスを与えます。

74HC191の出力は、SP(スタックポインタ)の値を他のレジスタに転送する命令があるため、内部データバス用の74HC244の入力側に接続されています。
SPLregRDをアクティブにするとSP(スタックポインタ)の下位8ビットの値が内部データバスib0〜ib7に送られます。
SPHregRDをアクティブにするとSP(スタックポインタ)の上位8ビットの値が内部データバスib0〜ib7に送られます。

SP(スタックポインタ)の値を外部アドレスバスA0〜A15に出力するために、内部アドレスバス用の74HC244とは別の74HC244にも74HC191の出力が接続されています。
SPselをアクティブにすると、SP(スタックポインタ)の値が、外部アドレスバスA0〜A15に出力されます。

PUSH命令についても説明するつもりでしたが、時間が無くなってしまいました。
PUSH命令の回路の説明は、次回にすることにいたします。
2008.9.15upload

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