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

●CMA命令の回路の説明です

CMAはAレジスタの値を反転させる命令です。
Aレジスタの各ビットの1と0を全て逆にします。
論理演算の「NOT」の働きをします。

命令コードは00 101 111(2F)です。
この命令はAレジスタに対してのみ働きます。

●CMA命令の回路図です

たったこれだけの簡単な回路です。
どうしてこんな簡単な回路の説明を、今まで後回しにしていたのかといいますと、ALU(算術論理演算)の回路を利用しているからなのです。
ALU回路については、[第179回][第205回]で、説明をいたしました。

上の回路図中、reg”A”WR、INVsel、reg”B”WR、ANDrdの各回路をアクティブにしているのが、ALU回路を利用しているところです。

Aレジスタの値を反転する、というと、すぐに思いつくのが、ALU回路のレジスタ”B”の入力にある、インバート回路です([第179回]ALUレジスタ”A”とレジスタ”B”回路)。

では、Aレジスタの値を、インバートしてALUのレジスタ”B”に入れて、それを読み出して、Aレジスタに入れればよいか、といいますと、残念ながら、そのようにはできません。
ALUのレジスタ”A”、レジスタ”B”は、入力は内部データバスにつながっていますが、出力はALU回路内部のAND、OR、XOR、ADDの各計算回路にしかつながっていないからです。

そこで、まずALUのレジスタ”A”に11111111(FF)を入れます。
regRDをアクティブにしない状態のとき、内部データバスは”FF”になります。それを利用して、ALUのレジスタ”A”に”FF”を入れるのです。
上の回路図で、T4でreg”A”WRをアクティブにしていますが、それに対応するregRDはありません。ですから、ALUのレジスタ”A”に”FF”が入ります。
そうしておいてから、Aレジスタの値を、インバート(反転)してALUのレジスタ”B”に入れます。
M3でregRDとINVselをアクティブにしておいて、T6でreg”B”WRをアクティブにして、ALUのレジスタ”B”に、Aレジスタの値を反転した値を書き込みます。
そしてそのANDを計算すれば、”FF”とのANDですから、結局ALUのレジスタ”B”の値そのままが計算結果として得られることになります。

M4のANDrdとT8のregWRによって、結果がAレジスタに書き込まれます。
なお、CMA命令は、フラグを変化させませんから、フラグに関係する回路はありません。

●CMA命令のタイミングチャートです

上で説明した通りの内容ですから、特に説明しなくても、おわかりいただけると思います。
2009.4.21upload

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