直列加算器の動作
シフトレジスタのMODEを「LOAD」にします。 MODEをLOADにすると、シフトレジスタはパラレル入力となり、LOAD CLK A,BでデータをLOADします。 DIP_sw、DATA_A、DATA_Bに計算する値をセットしておきます。 |
|
LOAD CLK A,BでシフトレジスタA、BにDIP_SW DATA_A、DATA_Bの値をロードします。 シフトレジスタA、Bにデータがロードされた時点でシフトレジスタA、Bの出力からはロードされたデータが出力されています。 1ビット加算器の入力A、Bには、 シフトレジスタA、Bの出力の一番下の桁が接続されています。 1ビット加算器は、構造がゲートのみの組み合わせ論理回路なので、入力A、Bに信号が加えられた時点で加算し、計算結果を煤A/Cn+1から出力しています。 この時点でシフトレジスタCとD−FFの入力には加算結果のデータが来ていますが、クロックが無いと信号を取りこめません。 |
|
シフトレジスタのMODEを「SHIFT」にします。 MODEをSHIFTにすると、シフトレジスタはシリアル入力となり、SHIFT_CLKを押すごと右にシフトし、空いた一番上の桁はシリアル入力からデータが取りこまれます。 シフトレジスタA、Bのシリアル入力はGNDに接続されているのでシフトされて空いた桁には「0」が入力されていきます。 |
|
1回目、SHIFT_CLKを押します。 シフトレジスタA、B、Cの内容が右に1桁シフトされ、シリアル入力よりデータが取りこまれます。 取りこまれるデータは、SHIFT_CLKが加えられる直前までシリアル入力に来ていたデータです。 SHIFT_CLKでシフトレジスタA、B、Cの内容が右に1桁シフトされ、新たな値がシフトレジスタの入力に来ていますが、SHIFT_CLKクロックが無い限りシフトレジスタもD−FFも新たなデータを取り込みません。 D−FFにも、SHIFT_CLKでデータが取りこまれますが、D−FFのクロック端子には、SHIFT_CLKが反転された信号が加えられますので、半周期遅れてデータが取りこまれ、次の桁の計算に使われます。 |
|
2回目、SHIFT_CLKを押します。 シフトレジスタA、B、Cの内容が右に1桁シフトされ、シリアル入力よりデータが取りこまれます。 SHIFT_CLKでシフトレジスタA、B、Cの内容が右に1桁シフトされ、新たな値がシフトレジスタの入力に来ています。 D−FFにも、SHIFT_CLKで、半周期遅れてデータが取りこまれます。 |
|
3回目、SHIFT_CLKを押します。 シフトレジスタA、B、Cの内容が右に1桁シフトされ、シリアル入力よりデータが取りこまれます。 SHIFT_CLKでシフトレジスタA、B、Cの内容が右に1桁シフトされ、新たな値がシフトレジスタの入力に来ています。 D−FFにも、SHIFT_CLKで、半周期遅れてデータが取りこまれます。 |
|
4回目、SHIFT_CLKを押します。 シフトレジスタA、B、Cの内容が右に1桁シフトされ、シリアル入力よりデータが取りこまれます。 SHIFT_CLKでシフトレジスタA、B、Cの内容が右に1桁シフトされ、新たな値がシフトレジスタの入力に来ています。 D−FFにも、SHIFT_CLKで、半周期遅れてデータが取りこまれます。 これで、シフトレジスタA+シフトレジスタBの計算結果がシフトレジスタCに出力されます。 しかし、左図を見てわかるように答えが合いません。 A「1010」+B「1100」=「10110」 ですが、出力が4ビットなので1桁足りません。 桁上げ分もを表示するには、もっと桁の多いシフトレジスタを使って、クロックをもう一回加え、桁上げ分も表示するようにするか、74LS74の余った1つD−FFを使って桁上げを記憶する処理をして桁上げをわかるようにする必要がありそうです。 計算が終わって、また新たに計算をする時は、MODEを「SHIFT」のままで、SHIFT_CLKを4回押してください。シフトレジスタA、Bのシリアル入力はGNDに接続されていますのでSHIFT_CLKが入力されるごとに0が入力されるので全てのレジスタがCLEARされます。 |