通信にしろ、電子回路にしろ、たった一つの信号を送受信するだけでは事足りません。
昨今の電子デバイスは膨大なデータを扱います。
もし信号の一つ一つを都度送っていたとしたらきわめて低速になるうえ、その信号分の配線が必要になり、デバイスが巨大になってしまいます。
そこでシフトレジスタの出番です。
シフトレジスタは送られてきた4ビットや8ビットの信号を一本線にまとめて受信し、一つ一つ送り出す。
あるいはその逆で一つの膨大なデータを各ビットに並べ替えて変換し、データ送信を行う、といった役割を果たします。
シフトレジスタがあることによって、膨大な配線がなくとも多数の信号を高速伝送することができるのです。
この記事では、そんなシフトレジスタについて解説いたします。
目次
1. シフトレジスタとは?
冒頭でもご紹介したように、シフトレジスタは信号を並べ替えたり変換したりして、一つの配線で膨大な信号伝送を可能にしたデバイスです。
ちなみに最も初期のシフトジレスタは、1940年代、第二次世界大戦下のイギリスにて、枢軸国側であったドイツの暗号通信の解読のために用いられた電子計算機「Colossus;コロッサス」に見られます。
シフトレジスタは、マイクロプロセッサ内部に搭載されるレジスタの一種となります。
ただし、通常のレジスタと言えばデータを一時的に保存するメモリの役割を果たすデバイスですが、シフトレジスタのイメージとしてはいったん保持したデータを別の形態の信号に変換させてから送信する、というものになります。
なお、アナログ回路にもデジタル回路にも使われますが、一般的にシフトレジスタと言った場合は、デジタルシフトレジスタを指すことがほとんどです。
シフトレジスタの構造としては、いくつかのフリップフロップをカスケード接続する、というものです。
フリップフロップとは、数ある回路の中でも最もシンプルで基本的な構造を採る論理回路で、「0」「1」の二つの状態を保持します。
このフリップフロップはいくつかの種類に分けることができますが、シフトレジスタで用いられるのはD型フリップフロップです。
D型フリップフロップは入力端子から1ビットの信号を送信すると、それを読み込みます(ラッチする、ということ)。
データの入力はクロックによって制御されていますが、別のクロックが加わるまではずっとその1ビットの信号を保持したままとなります。
なお、出力端子も必ず搭載されており、クロックがHighになると保持した信号を出力します。
シフトレジスタではこの複数のD型フリップフロップをカスケード接続(一つのハブに複数素子を接続させる手法。
英語で滝を意味するように、何段にも連なった接続が特徴的)することで複数の信号を一つにまとめたりその逆を行ったりする、という仕組みです。
なお、複数の信号の伝送方式をパラレル、一つの信号の伝送方式をシリアルと呼びます。
いくつフリップフロップが必要かは、保存したいビット数によって異なります。
特に8ビットシフトレジスタが広く用いられています。
この「まとめたり逆を行ったり」のように、データが移動(シフト)していく、というわけですね。
このシフト方式は左から右、あるいは右から左、そして双方向で可能です。
ただし、どのような信号をどのようにシフトさせるかは、後述する接続方式を選択していく必要があります。
2. シフトレジスタの接続方式とその種類
シフトレジスタは入出力それぞれの接続方式によって、大まかに4つに分類することができます。
それぞれを解説いたします。
① 直列入力直列出力形(SISO)
シフトレジスタのイン(入力側)とアウト(出力側)にシリアル伝送され、クロック制御で1ビットずつシフトする接続形式のものを直列入力直列出力形、またはSISOと呼びます。
シフトする方向は左または右となります。
最も基本的なシフトレジスタの形式で、クロック信号が加えられるごとにフリップフロップを1ビットずつ移動していきます。
フリップフロップ1つにつき1ビットのデータをラッチすることとなるので、これを4個用いれば4ビットのシフトレジスタです。
また、入力された信号と同じ順序で出力されることも意味します。
なお、通常のSISOシフトレジスタだと、最後のフリップフロップに格納されていたデータ1ビットは、入力側の最初のフリップフロップにデータ入力されるごとに失われることとなります。
ただ、指定したデータをラッチし続けるような回路を作ることも可能です。
② 直列入力並列出力形(SIPO)
インがシリアル伝送、アウトがパラレル伝送形式のシフトレジスタを直列入力並列出力形、またはSIPOと呼びます。
文字通り、シリアル信号とパラレル信号を変換する際に用いられます。
シフトレジスタに入力されるデータは1ビットずつですが、フリップフロップ内でラッチしたデータを出力側でまとめて、つまりパラレル伝送で送り出すことができます。
SIPOシフトレジスタでは接続されている全てのフリップフロップに格納されたデータを一緒に読み取り、例えクロック信号によって1ビットずつシフトしても、その状態を読み取ってまとめてくれます。
③ 並列入力直列出力形(PISO)
インがパラレル、アウトがシリアル伝送のシフトレジスタを並列入力直列出力形、またはPISOと呼びます。
こちらも、シリアル信号とパラレル信号を変換することが主な役割です。
PISOシフトレジスタだと、入力信号が複数にまたがり、それらを一度にロードする必要があります。
また、クロック信号によってデータを書き込むにはLOW、ビットをシフトさせるにはHIGHにするなどの制御が必要となりますが、最初のフリップフロップのみの入力に留めれば、前述したSISOシフトレジスタとしても用いることが可能です。
④ 並列入力並列出力形(PIPO)
インもアウトもパラレル伝送で行うシフトレジスタを並列入力並列出力形、またはPIPOと呼びます。
PISOと同様に複数の入力信号をシフトレジスタにロードし、クロック信号がHIGHになったらそれぞれの出力側に同時にシフトされていきます。
バックアップ時の履歴など、特定の情報をラッチするために用いられます。
⑤ その他のシフトレジスタ
上記の接続方式の他、データがシフトしていく方向を変化させられる双方向シフトレジスタと呼ばれるものもあります。
これは、ユニバーサルシフトレジスタとも言います。
また、SISOシフトレジスタの入出力を相互接続させて環状シフトレジスタを形成し、入力されたデータを保持し続ける用途でも用いられます。
3. シフトレジスタの用途
前述の通り、シフトレジスタはシリアル・パラレル信号を変換するためのインターフェースとして用いられます。
通常、シリアル信号伝送方式の方が高速なため、デジタル回路にはよく用いられています。
しかしながら実際の信号は4ビット、8ビット、16ビットなどの単一ではありません。
そこでシフトレジスタでいったんどちらかに変換して、受信側にあった信号形式に変換する必要があるのです。
こういったインターフェースの他、センサなどで用いられる遅延回路や基本的なシフト演算を行ったりする用途で重宝されています。
半導体・電子部品・モジュール製品の購入はコアスタッフオンラインへ