標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第42回]
●MOV r,Mの回路図です
MOV命令の説明の続きです。
前回は、MOV命令の中でも一番シンプルな、レジスタからレジスタへデータを転送する、MOV r,r’の回路について説明をしました。
今回はそれよりも少しだけ複雑な、メモリからレジスタへデータを転送する、MOV r,Mの回路について説明をします。
といっても、MOV r,r’とほとんど同じです。
MOV r,r’の回路とどこが違うかというと、右上の信号出力の部分が違っているだけであとは同じです。
MOV r,r’の回路では、信号出力の条件が、s≠110(データの送り元はメモリ以外のレジスタ)でしたが、今回はそこが逆になっており、s=110(データの送り元はメモリ)になっています。
ここでのメモリというのは、HLレジスタの値をアドレスとして示す、間接アドレッシングでのメモリアドレスのことです。
ですから、アドレスバス(A0〜A15)には、プログラムカウンタに代わって、HLレジスタの値を出力しなければなりません。
アドレスバスにHLレジスタの値を出力するにはHLsel信号をLにします。
HLレジスタの回路図です。
HLselをLにすると、HレジスタとLレジスタとアドレスバスをつないでいる74HC244の出力がイネーブルになって、HLレジスタの値がアドレスバスに出力されます。
タイミングチャートを見ながら説明をしていきます。
●MOV r,M のタイミングチャートです
前回のMOV r,r’でもお話しましたが、OPコードフェッチサイクル(T0〜T3)は、どの命令でも同じなので省いてあります。
命令の実行部分のタイミングチャートは、T4から始まります。
W1の期間(T4〜T7の期間)HLselとMEMRDをアクティブにします。
アドレスバスA0〜A15にはHLレジスタの値が出力され、データバスD0〜D7には、HLレジスタの値をアドレスとするメモリ(つまりM)の値がメモリから出力されます。
MEMRDがアクティブになると、それに連動して、DataGがアクティブになり、DataDIRがHになります。
するとデータバスと内部バスの間にある74HC245の出力がアクティブになって、外部データバス→内部データバスの向きにゲートが開きます。
このあたりの回路図は[第39回]でお見せしました。OPコードレジスタ&内部バスゲート回路と制御信号作成回路です。
外部データバスにはメモリMのデータが出力されていますから、そのデータが内部データバスにも入ってきます。
T6の期間regWRをアクティブにします。
regWRがアクティブになることで、regWRとd0〜d2によって選択されたレジスタに内部データバスのデータが書き込まれます。
s2〜s0にはOPコードのビット2〜ビット0の値(Mを示す110)が乗っていますが、regRDはアクティブではないため、この信号は実際には利用されません。
データの送り元と送り先がともにレジスタである、MOV r,r’はT4、T5の2クロックでデータを転送しましたが、MOV r,Mでは、T4〜T7の4クロックかかっています。
これはメモリアクセスの特殊性を考慮したためです。
実はMOV r,Mに限って言えば、昔と違って最近のメモリのアクセスタイムは非常に速くなっているので、よほど昔のメモリを使わない限り、MOV r,r’と同じタイミングでも、多分問題無く実行できるはずです。
しかし、逆の命令である MOV M,rになると少し事情が変わってきます。
このことについては、MOV M,rの説明のところでまたお話することにいたします。
命令の実行の終わりに、T8のタイミングでMclrをLにします。前回にも説明しましたが、こうすることでマシンサイクル用カウンタの74HC161がクリアされ、T0に戻って、次のOPコードフェッチサイクルを実行することができます。
以上の説明を理解した上で、もう一度、MOV r,Mの回路図を見てみましょう。
W1がHのときにHLselとmemRDがLになり、T6がHのときにregWRがLになり、T8がHのときにMclrがLになります。
タイミングチャートの、そのままです。
こうやってみると、非常にわかりやすい回路だと思いませんか?
2008.8.20upload
前へ
次へ
ホームページトップへ戻る