シフトレジスタとは、Dフリップフロップなどを以下のように直列に接続した論理回路を基本要素としたクロック同期回路のことです。
例えば、以下は、4ビットの直列入力直列出力のシフトレジスタです。
初期状態として、4つのDフリップフロップがそれぞれLowを保持している場合、クロックに同期させて、Aを1→0→1→1→0→0→0→0→0と変化させると、Bは、以下のように変化します。なお、0はLow、1はHighです。
A:1→0→1→1→0→0→0→0→0
B:0→0→0→0→1→0→1→1→0
上記を見ると分かるように、Bは、4クロック遅れのAです。
例えば、以下は、4ビットの直列入力並列出力のシフトレジスタです。
初期状態として、4つのDフリップフロップがそれぞれLowを保持している場合、クロックに同期させて、Aを1→0→1→1→0→0→0→0→0と変化させると、B_[0]]~B_[3]]は、以下のように変化します。
A :1→0→1→1→0→0→0→0→0
B_[0]]:0→1→0→1→1→0→0→0→0
B_[1]]:0→0→1→0→1→1→0→0→0
B_[2]]:0→0→0→1→0→1→1→0→0
B_[3]]:0→0→0→0→1→0→1→1→0
上記を見ると、Aの1→0→1→1という状態変化は、1を基準として、4クロック後に、赤文字で示したB_[[3]]、B_[[2]]、B_[[1]]、B_[0]]で並列に出力されています。
例えば、以下は、4ビットの並列入力直列出力のシフトレジスタです。
マルチプレクサがA_[1]]~A_[3]]を選択している場合、クロックの立ち上がりエッジで4つのDフリップフロップにA_[0]]~A_[3]]の状態がコピーされます。
コピーした後、マルチプレクサがQ端子を選択するようにします。すると、クロックに合わせて、Bは、A_[[3]]、A_[[2]]、A_[[1]]、A_[0]]の順番で状態が変化します。
つまり、以下の流れとなります。
1クロック目:マルチプレクサがA_[1]]~A_[3]]を選択
2クロック目:Bの状態がA_[3]]になる。マルチプレクサがQ端子を選択する。
3クロック目:Bの状態がA_[2]]になる。
4クロック目:Bの状態がA_[1]]になる。
5クロック目:Bの状態がA_[0]]になる。