シフトレジスタ
シフトレジスタ(英: Shift register)とは、複数のフリップフロップをカスケード接続し、データがその回路内を移動(シフト)していくよう構成したデジタル回路のこと。
単に「シフトレジスタ」といった場合、(電荷結合素子等のアナログシフトレジスタではなく)ディジタルシフトレジスタを指すことが多い。このページでも、ディジタルシフトレジスタについて解説する。
種類
[編集]シフトレジスタは、入力と出力それぞれについて、直列(シリアル)か並列(パラレル)かで4種類に分類される。直列入力並列出力形(Serial-In, Parallel-Out、SIPO)と並列入力直列出力形(Parallel-In, Serial-Out、PISO)は、シリアルデータとパラレルデータの変換に使われる。直列入力直列出力形(SISO)と並列入力並列出力形(PIPO)もある。また、双方向シフトレジスタもあり、シフトしていく方向を変化させることができる。SISOシフトレジスタの入力と出力を相互接続すると環状シフトレジスタを構成できる。また、多次元シフトレジスタを構成することもでき、より複雑な計算を実行することが可能である。
直列入力直列出力形
[編集]0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 |
直列入力直列出力形(SISO)のシフトレジスタは最も単純な形態である。データはシリアルに入力端子から入力され、トリガークロック信号が入力されるたびにフリップフロップを1段ずつ進んでいく。このとき、入力が接続された1段目のフリップフロップに入力データ(ビット)が取り込まれ、最終段のフリップフロップの持っていたデータ(ビット)が出力され、失われる。
フリップフロップに格納されたデータは 'Q' 端子に出力されている。フリップフロップ1個につき1ビットのデータを保持するので、4個使えば4ビットのレジスタとなる。例えば、シフトレジスタの初期値が 0000(つまり、全スロットが空)であったとする。入力が 1,1,0,1,0,0,0,0 の順にあったとする。すると、右の表のような状態の流れとなる。左端の列が入力に近い方のフリップフロップを表している。つまり、この場合の出力は 11010000 となる。これに入力を続ければ、全く同じ順序で出力が得られる。
単純なSISOシフトレジスタは、出力されたデータは失われてしまう。入力されたビット列を指定された場合に保持し続けるような回路も構成できる。この場合、シフトレジスタの出力を入力に戻し、読み書き指定の新たな信号線を追加して、書き込み状態では通常のシフトレジスタの動作をし、読み出し状態では環状シフトレジスタとして動作するように構成する。
直列入力並列出力形
[編集]![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/a/a1/4-Bit_SIPO_Shift_Register.png/300px-4-Bit_SIPO_Shift_Register.png)
直列入力並列出力形(SIPO)のシフトレジスタは、シリアル形式のデータをパラレル形式に変換することができる。SISO と同様に入力はシリアルである。データが入力されると、全フリップフロップの出力を同時に読み取ることができるし、クロック信号で進めていけばビット列はシフトされていく。
並列入力直列出力形
[編集]![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/4/48/4-Bit_PISO_Shift_Register.png/300px-4-Bit_PISO_Shift_Register.png)
並列入力直列出力形(PISO)のシフトレジスタでは、入力が複数存在する。データを書き込むには、Write/Shift 制御信号を LOW にしなければならない。データをシフトするには、W/S 制御信号を HIGH にし、クロック信号を与える。一段目のフリップフロップへの入力のみを使えば、SISOシフトレジスタとしても機能する。
並列入力並列出力形
[編集]![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/8/83/4Bit_PIPO_ShiftRegister.svg/300px-4Bit_PIPO_ShiftRegister.svg.png)
並列入力並列出力形(PIPO)のシフトレジスタは、パラレルデータを入力として受け取り、クロック信号が駆動されるまでその内容を保持し、クロック信号によって左右にシフトさせる。これは、一種の履歴情報を保持するのに使われる。
用途
[編集]シフトレジスタの最も典型的な用途として、シリアルとパラレルのインタフェース変換がある。多くの論理回路はビット列を並列に処理するが、インタフェースとしてはシリアルの方が構成しやすい。シフトレジスタは単純な遅延回路としても機能する。複数の双方向シフトレジスタを並列接続すると、ハードウェアによるスタックを構成できる。
シフトレジスタは、パルス幅を広げるのにも使える。単安定マルチバイブレータに比較して、タイミングが部品の特性に依存しないという利点があるが、クロック信号が必要であり、タイミングの正確さはそのクロックの周期に依存する。
初期のコンピュータでは、シフトレジスタをデータ処理に利用していた。たとえば2個のシフトレジスタに入っている値の加算は、直列加算器により最小のハードウェア資源で実現できる。
数千ビットもあるような大型の直列入力直列出力形シフトレジスタが、1970年代初期ごろまで水銀遅延線の代替として使われたことがある。
歴史
[編集]史上初めてシフトレジスタを使った装置として、1940年代に暗号解読に使われた Colossus が知られている。これは、真空管とサイラトロンを使った5ステージのデバイスだった。
関連項目
[編集]外部リンク
[編集]- Shift Registers at AllAboutCircuits.com
- 順序回路の基礎:シフトレジスタ 井澤裕司、信州大学