「シフトレジスタ」の解説

このページをスマホなどでご覧になる場合は、画面を横長にする方が読みやすくなります。
2022年04月23日 更新。
用語:シフトレジスタ
用語の読み方:シフトレジスタ
同義語・類義語:シフトレジスター
このページで解説している他の用語:マルチプレクサマルチプレクサーセレクタセレクター遅延回路シリアル-パラレル変換シリアル-パラレル変換回路パラレル-シリアル変換パラレル-シリアル変換回路シフト動作シフト演算

シフトレジスタ(shift register)とは、複数のDフリップフロップが縦続(カスケード)に接続された構造を持ち、各Dフリップフロップに共通のクロックパルスが入力されるたびに、記憶しているデータが次のDフリップフロップに移動する様に働く論理回路の事です。

シフトレジスタは、シフト演算を行う回路だけではなく、遅延回路や、パラレル-シリアル変換回路シリアル-パラレル変換回路などによく使われます。

シフトレジスタは、広義のレジスタの一種です。

目次

1. 典型的な4ビットシフトレジスタ … 1ページ
2. 図1のシフトレジスタの動作を理解するのに必要な回路要素の説明 … 1ページ
2-1. Dフリップフロップ … 1ページ
2-2. マルチプレクサ … 1ページ
3. 図1のシフトレジスタをマルチプレクサの回路記号を使って簡略化する … 1ページ
4. シフトレジスタの動作の説明 … 1ページ
4-1. シリアル入力時の動作 … 1ページ
4-2. パラレル入力時の動作 … 1ページ
5. シフトレジスタの応用例 … 1ページ
5-1. 遅延回路 … 1ページ
5-2. ノイズフィルタ回路 … 1ページ
5-3. シリアル-パラレル変換回路 … 1ページ
5-4. マイコン等のICの出力ピンの拡張 … 1ページ
5-5. パラレル-シリアル変換回路 … 1ページ
6. 74HCシリーズ(汎用ロジックIC)のシフトレジスタ … 1ページ
広告

1.典型的な4ビットシフトレジスタ

図1に、典型的な4ビットシフトレジスタの回路図を示します。

図1、典型的な4ビットシフトレジスタの回路図
↑ 画像をクリックすると拡大
図1、典型的な4ビットシフトレジスタの回路図

図1のシフトレジスタを、このページでは図2の回路記号で表す事にします。

図2、図1のシフトレジスタの回路記号
↑ 画像をクリックすると拡大
図2、図1のシフトレジスタの回路記号

この回路の各信号線の名称と働きについて、表1にまとめました。

表1、図1の回路の各信号線の名称と働き
名称 働き
CLK シフトレジスタを駆動するクロック信号です。
SH/LD この信号線がLの時、D0~D3のパラレルバスの信号をシフトレジスタに取り込みます。(パラレル入力) Hの時は、SINのシリアルバスの信号を1ビット取り込みます。(シリアル入力)
D0~D3 入力用の4ビットパラレルバスです。
Q0~Q3 出力用の4ビットパラレルバスです。なお、Q3はSOUTを兼ねています。パラレル出力時はQ3として働き、シリアル出力時はSOUTとして働きます。
SIN 入力用のシリアルバスです。
SOUT 出力用のシリアルバスです。Q3と兼ねています。パラレル出力時はQ3として働き、シリアル出力時はSOUTとして働きます。

2.図1のシフトレジスタの動作を理解するのに必要な回路要素の説明

図1のシフトレジスタの動作を理解するのに、知っておく必要がある回路要素として、Dフリップフロップとマルチプレクサについて説明します。

2-1.Dフリップフロップ

図3にDフリップフロップの回路記号を示します。

図3、Dフリップフロップの回路記号
↑ 画像をクリックすると拡大
図3、Dフリップフロップの回路記号

Dフリップフロップには、3つの信号線がありますが、それぞれの名称と働きを表に2まとめました。

注:DフリップフロップにはQを論理反転した出力(Q)を持ったものや、非同期に1(H)を書き込む(非同期セットする)ための端子(SあるいはSET)や非同期に0(L)を書き込む(非同期リセットする)ための端子(RまたはPRE)を持つものもありますが、ここでは一番簡単な3つの信号端子のDフリップフロップを扱います。

表2、Dフリップフロップの各信号線の名称と働き
名称 働き
CLK クロック信号です。この信号の立ち上がる瞬間のD端子への入力をDフリップフロップが記憶します。
D 入力信号です。CLK信号が立ち上がる瞬間に、この信号をフリップフロップが取り込んで記憶します。
Q 出力信号です。Dフリップフロップが記憶している論理信号を出力します。

Dフリップフロップというのは、簡単に言うと、1ビットの情報を記憶するメモリです。D端子に記憶させたい論理信号(HまたはL)を加えた状態で、CLK端子の電圧をLからHに立ち上げると、その瞬間にD端子の論理信号を記憶します。記憶した論理信号はQ端子から出力されます。

CLK信号が一定周波数の信号の場合、Dフリップフロップにより入力信号の状態を一定時間(CLKの周期)ごとに読み出す事になります。この操作をサンプリングといいます。

図4に、Dフリップフロップのタイミングチャートの例を示します。この図から、CLKの立ち上がり部分以外でのD信号の状態は、Dフリップフロップが無視する様子が分かります。

図4、Dフリップフロップのタイミングチャートの例
↑ 画像をクリックすると拡大
図4、Dフリップフロップのタイミングチャートの例
U不定(LHか分からない状態)を表します。Dフリップフロップの電源投入時の状態は一般には不定で、初めて値をセットされるまで不定状態は続きます。

次に、図5に示すように、2つのDフリップフロップを縦続に接続した場合を考えます。

図5、2つのDフリップフロップを縦続に接続した回路
↑ 画像をクリックすると拡大
図5、2つのDフリップフロップを縦続に接続した回路

この回路では、D端子に信号を加えると、一つ目のDフリップフロップであるFF1がDの信号をCLKの立ち上がりでサンプリングします。そうして得られたQ1信号を2つ目のフリップフロップであるFF2によりCLKの立ち上がりでサンプリングすると、得られるQ2信号は、Q1信号より1クロック遅れた信号になります。

図5の回路のタイミングチャートの例を図6に示します。

図6、図5の回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図6、図5の回路のタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

このタイミングチャートの赤い楕円で囲んだ部分を見ると、CLK信号がLからHに立ち上がると同時に、Q1信号がHからLに立ち下がっている様に見えます。これでは、CLKが立ち上がった瞬間のQ1信号の論理が決まらず、FF2の動作が不確定になりそうな気がします。

しかし、図7に示す様に、赤い楕円で囲んだ部分を時間軸方向に拡大してみると、様子が変わってきます。

図7、図6のタイミングチャートの赤い楕円で囲まれた部分を時間軸方向に拡大した図
↑ 画像をクリックすると拡大
図7、図6のタイミングチャートの赤い楕円で囲まれた部分を時間軸方向に拡大した図

フリップフロップFF1は、CLK信号の立ち上がり時のD信号の論理を読み取り、それをQ1信号として出力しますが、実際にD信号を読み取ってから、Q1信号にそれが反映されるまでには、わずかですが伝搬遅延が発生します。その時間は、使うDフリップフロップによって変わりますが、高速CMOSデバイスを用いる場合はおおむね数nsです。そのため、CLK信号の立ち上がりの瞬間にD信号がLであるのを読み取ってから、数ns経過して、Q1信号がHからLに立ち下がります。

この結果、CLK信号が立ち上がる瞬間のQ1信号はHとなります。そのため、CLK信号が立ち上がった後のQ2信号もHとなります。

この様に、DフリップフロップのD信号として、CLK信号の立ち上がりに同期して変化する信号を入力した場合、D信号がCLK信号に対してわずかな時間遅れて変化するため、Dフリップフロップは、D信号の変化前の状態を読み取ります。

注:この議論を厳密に行うためには、伝搬遅延時間、セットアップ時間、ホールド時間などについて説明する必要があるのですが、ここでは概念的な説明にとどめておきます。

Dフリップフロップに関するさらに詳しい説明については、Dフリップフロップの項目をご覧ください。

2-2.マルチプレクサ

複数の入力端子があり、それらの内、制御信号により決められた信号を、1つの出力端子に出力する回路をマルチプレクサまたはセレクタといいます。

このページでは、2入力端子が2つのマルチプレクサについて説明し、マルチプレクサの回路記号として図8の記号を使う事にします。

図8、このページで使う2入力マルチプレクサの回路記号
↑ 画像をクリックすると拡大
図8、このページで使う2入力マルチプレクサの回路記号

各信号線の名称と働きについて表3にまとめました。

表3、図8のマルチプレクサの各信号の名称と働き
名称 働き
A 入力信号です。
B 入力信号です。
Y 出力信号です。SがHの時はA端子に入力された信号を、SがLの時はB端子に入力された信号を出力します。
S Yに出力する信号をAとBの2つの入力信号のどちらにするかを選択するための入力信号です。SがHの時はAが選択されます。SがLの時はBが選択されます。

この回路の動作のイメージは、図9の様なスイッチで説明できます。

図9、マルチプレクサの動作イメージを理解するためのスイッチの図
↑ 画像をクリックすると拡大
図9、マルチプレクサの動作イメージを理解するためのスイッチの図

この図が表しているのは、Y端子をA端子につなぐかB端子につなぐかを選択できるスイッチです。機械的なスイッチの場合、指でレバーなどを操作する必要があるのですが、マルチプレクサの場合、S信号をHにするかLにするかで、自動的にスイッチを切り替えてくれます。この様に考えると、2入力のマルチプレクサは、c接点のリレーに似ていますね。

注:マルチプレクサの働きを直感的に理解しやすい様に、機械的なスイッチやリレーに例えましたが、機械的なスイッチやリレーと、論理回路であるマルチプレクサでは、異なる点が色々あります。機械的なスイッチやリレーでは、AやBを出力端子にし、Yを入力端子にして信号の流れる方向を逆にもできますが、マルチプレクサではそれができません。また、リレーがスイッチを切り替えるには数msと長い時間がかかりますが、マルチプレクサなら数nsで切り替えられます。リレーの場合はコイルを駆動するために、S信号にたくさんの電流が流れますが、マルチプレクサの場合、消費電力がはるかに小さくなります。さらに一番大きな違いは、機械的なスイッチやリレーではアナログ信号を扱えますが、論理回路のマルチプレクサの場合、HLの二値信号しか扱えません。(アナログマルチプレクサという半導体製品の場合は、アナログ信号の選択ができます)

マルチプレクサの意味が分かったところで、ANDやORなどの基本ゲートをどう組み合わせれば、マルチプレクサの機能を実現できるかを考えてみます。

結論から言えば、例えば図10の様な回路でマルチプレクサが実現できます。

図10、基本ゲートのみでマルチプレクサを構成した例
↑ 画像をクリックすると拡大
図10、基本ゲートのみでマルチプレクサを構成した例

この回路がマルチプレクサとして働くことを確認しておきましょう。まず、図11の様にS=Hの場合の動作を考えてみます。

図11、図10の回路のS入力にHを入力した図
↑ 画像をクリックすると拡大
図11、図10の回路のS入力にHを入力した図

ここで、AND回路OR回路NOT回路には次の様な性質がある事を確認しておきます。

図12に示す様に、AND回路の一方の入力端子にHを加えた場合は、もう一方の入力Xを直接出力するのと同じになります。

図12、AND回路の一方の入力端子にHを入力した場合の等価回路
↑ 画像をクリックすると拡大
図12、AND回路の一方の入力端子にHを入力した場合の等価回路

図13に示す様に、AND回路の一方の入力端子にLを加えた場合は、必ずLを出力します。

図13、AND回路の一方の入力端子にLを入力した場合の等価回路
↑ 画像をクリックすると拡大
図13、AND回路の一方の入力端子にLを入力した場合の等価回路

図14に示す様に、OR回路の一方の入力端子にLを加えた場合は、もう一方の入力Xを直接出力するのと同じになります。

図14、OR回路の一方の入力端子にLを入力した場合の等価回路
↑ 画像をクリックすると拡大
図14、OR回路の一方の入力端子にLを入力した場合の等価回路

図15に示す様に、NOT回路にLを入力した場合は、Hを出力します。

図15、NOT回路の一方の入力端子にLを入力した場合の等価回路
↑ 画像をクリックすると拡大
図15、NOT回路の一方の入力端子にLを入力した場合の等価回路

図16に示す様に、NOT回路にHを入力した場合は、Lを出力します。

図16、NOT回路の一方の入力端子にHを入力した場合の等価回路
↑ 画像をクリックすると拡大
図16、NOT回路の一方の入力端子にHを入力した場合の等価回路

図12~図14と図16の性質を使うと、図11の回路は図17の様に変形する事ができます。

図17、マルチプレクサのS端子にHを入力した場合の等価回路
↑ 画像をクリックすると拡大
図17、マルチプレクサのS端子にHを入力した場合の等価回路

この図から分かる様に、マルチプレクサのS端子にHを入力すると、Y端子にはA信号が出力されます。

同様に、図12~図15の性質を使うと、S端子にLを入力したマルチプレクサは、図18の様に変形できます。

図18、マルチプレクサのS端子にLを入力した場合の等価回路
↑ 画像をクリックすると拡大
図18、マルチプレクサのS端子にLを入力した場合の等価回路

この図から分かる様に、マルチプレクサのS端子にLを入力すると、Y端子にはB信号が出力されます。

以上の様に、図10の回路のS端子にHを加えると出力YにA信号が出力され、S端子にLを加えると出力YにB信号が出力される事が分かります。

3.図1のシフトレジスタをマルチプレクサの回路記号を使って簡略化する

図1の4ビットシフトレジスタには、マルチプレクサが4つ含まれています。ただし、4つのマルチプレクサで1つのNOT回路を共有しているため、少しわかりにくいかもしれません。NOT回路の共有をやめると、図1の回路は図19の様になります。

図1(再掲)、典型的な4ビットシフトレジスタの回路図
↑ 画像をクリックすると拡大
図1(再掲)、典型的な4ビットシフトレジスタの回路図
図19、図1のシフトレジスタの中のNOT回路を4つに分けて書き直した回路図
↑ 画像をクリックすると拡大
図19、図1のシフトレジスタの中のNOT回路を4つに分けて書き直した回路図

図19の回路図の中の4つのマルチプレクサを、図8の回路記号を使って書き直すと、図20の様になります。

図20、図19のシフトレジスタの回路図をマルチプレクサの回路記号を使って書き直した物
↑ 画像をクリックすると拡大
図20、図19のシフトレジスタの回路図をマルチプレクサの回路記号を使って書き直した物

かなり整理されて、回路図が見やすくなりました。図1の回路図はDフリップフロップと基本ゲートのみで書かれているのが利点ですが、シフトレジスタの動作を考えるには図20を使う方が分かりやすいです。

4.シフトレジスタの動作の説明

図20のシフトレジスタの動作を、シリアル入力時とパラレル入力時に分けて説明します。

4-1.シリアル入力時の動作

図20のシフトレジスタのSH/LD端子にHを入力して、シリアル入力モードにした場合について考えます。

この時、4つのマルチプレクサはA端子の信号を出力しますから、マルチプレクサのB端子につながっているD0~D3の信号は、回路の動作に影響を与えなくなります。

SH/LD端子にHを入力した場合の、図20のシフトレジスタの等価回路を図21に示します。

図21、図20のシフトレジスタのSH/LD端子にHを入力した場合の等価回路
↑ 画像をクリックすると拡大
図21、図20のシフトレジスタのSH/LD端子にHを入力した場合の等価回路

シリアル入力時には、4つのフリップフロップが縦続に接続されている(前の段のフリップフロップの出力端子が後の段のフリップフロップの入力につながれている)事が分かります。この形式の回路が、シフトレジスタの最も基本的な形だといえます。

図21の回路のタイミングチャートの例を図22に示します。

図22、図21のシフトレジスタのタイミングチャートの例
↑ 画像をクリックすると拡大
図22、図21のシフトレジスタのタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

CLK信号の立ち上がりでSIN信号を読み取り、Q0信号に出力します。Q1、Q2、Q3の各信号は順に、1クロックずつ遅れた信号を出力します。

図22のA、B、C、Dの各時点でのQ0~Q3の信号の状態を表にして、状態の変化の様子を説明したのが図23です。

図23、Q0~Q3の信号の変化の様子
↑ 画像をクリックすると拡大
図23、Q0~Q3の信号の変化の様子

1クロック時間が進むごとに、Q0~Q2の値1つ右にずれる様子が分かります。この様な動作をシフト動作といいます。シフト動作するのが、「シフトレジスタ」の語源になっています。

また、シフト動作を、シフトレジスタに記憶している数値への演算ととらえる場合、この演算をシフト演算といいます。

参考:シフトレジスタの「レジスタ」は、小容量の記憶素子を意味します。通常レジスタは、記憶したい情報のビット数と同じだけのDフリップフロップを使って構成されます。

4-2.パラレル入力時の動作

図20にシフトレジスタのSH/LD端子にLを入力して、パラレル入力モードにした場合について考えます。

この時、4つのマルチプレクサはB端子の信号を出力しますから、一番左のマルチプレクサのA端子につながっているSIN信号は、回路の動作に影響を与えなくなります。

SH/LD端子にLを入力した場合の、図20のシフトレジスタの等価回路を図24に示します。

図24、図20のシフトレジスタのSH/LD端子にLを入力した場合の等価回路
↑ 画像をクリックすると拡大
図24、図20のシフトレジスタのSH/LD端子にLを入力した場合の等価回路

この回路図から、4つのDフリップフロップは、お互いに配線でつながっておらず、別々に動作する事が分かります。

図24の回路のタイミングチャートの例を図25に示します。

図25、図24の回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図25、図24の回路のタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

信号線が離れていて見にくいですが、Q0信号とD0信号を比較してください。CLK信号の立ち上がり時のQ0信号の値がD0信号に取り込まれています。例えば、左から2番目のCLK信号の立ち上がり時には、Q0信号はLなので、それ以降はD0信号もLになっています。(赤い矢印を参照)

同様に、CLK信号の立ち上がり時に、Q1信号を取り込んで、D1信号に出力します。(緑の矢印を参照) Q2信号は、CLK信号の立ち上がり時にD2信号に取り込まれます。(青い矢印参照) Q3信号は、CLK信号の立ち上がり時にD3信号に取り込まれます。(紫の矢印参照)

要するに、CLK信号の立ち上がり時にQ0~Q3の信号が4つのDフリップフロップに取り込まれて、D0~D3の信号に出力されるのです。この様な回路を(狭義の)レジスタといいます。図20のシフトレジスタは、SH/LD端子にLを入力している時は、シフト機能のない、パラレル入力パラレル出力の、単なるレジスタ(ストレージレジスタ)として働きます。

5.シフトレジスタの応用例

シフトレジスタの応用例を以下にいくつか示します。

5-1.遅延回路

この例では、SH/LD端子の入力をHに固定して、シリアル入力モードでシフトレジスタを使います。つまり、シリアル入力時の動作の項で説明した回路をそのまま使います。

図26の様に4ビットシフトレジスタのSH/LD端子をHに固定すると、等価回路は図21の様になります。また、この回路のタイミングチャートの例は、図22の様になります。

図26、4ビットシフトレジスタのSH/LD端子にHを入力して作った遅延回路
↑ 画像をクリックすると拡大
図26、4ビットシフトレジスタのSH/LD端子にHを入力して作った遅延回路

VDDは電源電圧です。SH/LD端子をVDDに接続して、Hを入力しています。

D0~D3の入力端子は使用しません。CMOS回路の場合、使用しない入力端子でも明示的にLまたはHの論理に確定しないといけないので、ここではGNDに接続してLを入力しています。別にD0~D3の入力端子にHを入力しても構いませんが、その場合はそれらの端子をVDDに接続してください。なおTTLの場合は、入力端子をオープンにすると、Hが入力されたものとして処理されます。

図21(再掲)、図20のシフトレジスタのSH/LD端子にHを入力した場合の等価回路
↑ 画像をクリックすると拡大
図21(再掲)、図20のシフトレジスタのSH/LD端子にHを入力した場合の等価回路
図22(再掲)、図21のシフトレジスタのタイミングチャートの例
↑ 画像をクリックすると拡大
図22(再掲)、図21のシフトレジスタのタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

SIN信号はCLK信号の立ち上がりで左端のDフリップフロップに取り込まれるため、Q0信号は、SIN信号に対して、0~1クロックの範囲で遅延します。(SIN信号がCLK信号の立ち上がりに同期して出力される信号なら、ちょうど1クロックの遅延になります) また、Q1信号、Q2信号、Q3信号と進むにつれ、1クロックずつ遅延時間が増えます。この様に、シフトレジスタをシリアル入力モードで使用すると、必要なクロック数だけSIN信号から遅延した信号が得られます。Q3端子では3~4クロックの範囲で遅延が発生しますが、それより大きな遅延が必要な場合は、4ビットより多いビット数のシフトレジスタが必要になります。

なお、この項では図20の回路の機能を持った4ビットシフトレジスタのICがあるものとして、それを使って図26の回路で遅延回路を構成しましたが、Dフリップフロップを使って遅延回路を作る場合は、パラレル入力ポート(D0~D3)を持った図20のシフトレジスタを組んで、SH/LD信号をLにしてパラレル入力ポートをわざわざ無効にするよりは、直接図21の様な単純なシフトレジスタを組む方が、部品が少なくなり、合理的です。

5-2.ノイズフィルタ回路

例えばUARTの様な、外部とデジタル通信する回路を設計する場合、外部から来た信号にノイズが乗っている可能性がある事を考慮して設計する事が必要になります。(図27参照) 短時間のパルス性のノイズを除去するには、アナログ回路によるローパスフィルタシュミットトリガ入力の論理素子を組み合わせるのが理想ですが、アナログフィルタは高価で実装面積が大きくなる傾向があります。(図28参照)

図27、通信線路で信号にパルス状のノイズが乗って受信回路が誤作動する様子
↑ 画像をクリックすると拡大
図27、通信線路で信号にパルス状のノイズが乗って受信回路が誤作動する様子
容量性のノイズ源(通信線路と寄生容量で結合しているノイズ源)であれ、誘導性のノイズ源(時間的な変化をする磁束を放出する事で通信線路に誘導電圧を発生するノイズ源)であれ、通信線路とノイズ源はAC結合しています。そのため、通常は、ある程度高い周波数のノイズが信号に乗る事になります。ノイズ源が断続的にノイズを発生する性質を持っている場合、信号に乗るのはパルス状のノイズになります。
図28、ローパスフィルタとシュミットトリガ入力の論理素子でノイズ対策をした例
↑ 画像をクリックすると拡大
図28、ローパスフィルタとシュミットトリガ入力の論理素子でノイズ対策をした例

そのような場合、アナログのフィルタを使った回路よりは性能が劣るものの、論理回路だけである程度のノイズ対策ができます。その時に使われるのが、この項で説明するデジタル的なノイズフィルタ回路です。(図29参照)

図29、これから説明するデジタル的なノイズフィルタでノイズ対策をした例
↑ 画像をクリックすると拡大
図29、これから説明するデジタル的なノイズフィルタでノイズ対策をした例
受信回路がロジックICで構成されている場合、そのICにノイズフィルタを内蔵することにより、実装面積も大きくならず、ほぼコスト上昇なしにノイズ対策ができます。図にはクロック信号源が書いてありますが、通常は受信回路とクロック信号を共用できるため、専用のクロック信号源は必要ありません。受信回路がFPGAで構成されている場合、ノイズフィルタのない受信回路に後からノイズフィルタを追加する事ができます。その場合、回路図や基板のアートワークを変更する必要はなく、FPGAの動作を記録したROMを書き換えるだけでノイズフィルタの追加ができます。

ノイズフィルタ回路は、前項で説明した遅延回路を応用して作られます。簡単なノイズフィルタ回路の例を図30および図31に示します。

図30、遅延回路を応用したノイズフィルタの例
↑ 画像をクリックすると拡大
図30、遅延回路を応用したノイズフィルタの例
Q3/SOUTの端子についている×印は、どこにもつながっていない事を表します。CMOSの論理回路の場合、使用しない入力端子はLまたはHを明示的に入力する必要がありますが、使用しない出力端子はオープンで構いません。
図31、図30のノイズフィルタの等価回路
↑ 画像をクリックすると拡大
図31、図30のノイズフィルタの等価回路

図30では、4ビットのシフトレジスタのD3とQ3の端子を使わない事で、実質3ビットのシフトレジスタとして使っています。そのため図31では、3ビットのシフトレジスタを3つのDフリップフロップで組んでいます。

3ビットシフトレジスタの出力信号Q0~Q2が3入力の多数決回路に入力されています。

3入力の多数決回路の回路図と真理値表を図32に示します。

図32、3入力の多数決回路の回路図と真理値表
↑ 画像をクリックすると拡大
図32、3入力の多数決回路の回路図と真理値表

この多数決回路は、3つの入力信号A、B、Cの中で、Lが2つ以上あれば出力信号YにLを出力します。逆に、3つの入力信号の中で、Hが2つ以上あればHを出力します。この様に、入力信号の中で過半数を占める真理値を選び出して出力するので、「多数決」回路と呼ばれます。

多数決回路の動作が分かったところで、図30(あるいは図31)の回路のタイミングチャートの例を見てみましょう。(図33参照)

図33、図30あるいは図31のノイズフィルタのタイミングチャートの例
↑ 画像をクリックすると拡大
図33、図30あるいは図31のノイズフィルタのタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

IN信号としては、クロック(CLK信号)の周期よりもずっと長いタイミングで真理値が変化する遅い信号(周波数の低い信号)を想定しています。ただし、通信線路を伝わってくる間に、時間の短いパルス状のノイズが乗って、ところどころ論理が元の信号から反転しています。

図33のタイミングチャートでは、図中の時間範囲全体を見ると、IN信号はLHLと緩やかに変化しています。ただし、前述のノイズのため、ところどころ論理が反転している部分があります。

3ビットのシフトレジスタにより、IN信号をクロックの立ち上がりでサンプリングして1段~3段遅延し、それぞれQ0~Q2の信号に取り出します。サンプリングにより、CLK信号の立ち上がりと次の立ち上がりの間に発生するパルス状のノイズは、消えてしまいます。(IN信号の中でピンク色に着色されている部分)

CLK信号の立ち上がりのタイミングでノイズにより信号の論理が反転している場合は、Q0~Q2の信号にもノイズが現れます。(Q0~Q2の信号で、薄緑に着色されている部分) その後、多数決回路によりQ0~Q2の3つの信号の中で、多い方の論理をMAJ信号に出力します。

今、IN信号の変化の周期は、CLK信号の周期よりもずっと長いと仮定しているので、IN信号は、同じ真理値が何クロックにもわたって続く性質があります。そのため、ほとんどの場合、Q0~Q2信号の真理値は一致しています。Q0~Q2信号の真理値が一致しないのは、IN信号の立ち上がりや立下りの時と、パルス状のノイズによりIN信号の論理が反転している時だけです。

パルス状のノイズが信号に乗っている倍を考えると、Q1~Q2の過去3つのサンプリング信号の中で1つだけ論理反転が起こっていても、MAJ信号の出力は反転しません。MAJ信号の論理を反転させるには、2サンプルがノイズにより論理反転する必要があります。

この様に、図30(あるいは図31)の回路は連続する3サンプルの内、2サンプル以上がノイズにより論理反転しないと、ノイズの影響が信号に出ないのです。

IN信号の立ち上がりや立下がりのタイミング近くにノイズが乗ると、MAJ信号にジッタ(時間的な揺らぎ)が発生しますが、同様の事は、アナログ方式のフィルタ回路を使っても発生します。

なお、MAJ信号を一度DフリップフロップでサンプリングしてからOUT信号として取り出していますが、ここにDフリップフロップを使うのは、OUT信号の波形にハザード)が発生するのを防ぐためです。OUT信号にハザードが発生しても問題がない用途には、最後のDフリップフロップは不要で、MAJ信号を直接OUT信号として使っても問題がありません。

5-3.シリアル-パラレル変換回路

UARTSPI、I2Cなどのシリアルインターフェースの受信回路に、シフトレジスタを使ったシリアル-パラレル変換回路が使われます。この場合は、SH/LD信号をHに固定して、IN端子に受信したシリアル信号を入力します。また、Q0~Q3のパラレル出力端子を使い、パラレル化した信号を、これらのパラレル出力端子から読み出します。

図34と図35に回路図を、図36にタイミングチャートの例を示します。

図34、4ビットのシリアル-パラレル変換回路
↑ 画像をクリックすると拡大
図34、4ビットのシリアル-パラレル変換回路
Q3/SOUTの信号名がQ3に変わった点を除いて、図26の遅延回路と同じ回路です。ただ、回路の使用目的が異なります。
図35、図34のシリアル-パラレル変換回路の等価回路
↑ 画像をクリックすると拡大
図35、図34のシリアル-パラレル変換回路の等価回路
Q3/SOUTの信号名がQ3に変わった点を除いて、図21と同じ回路図です。
図36、図34および図35のシリアル-パラレル変換回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図36、図34および図35のシリアル-パラレル変換回路のタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

図36のタイミングチャートでは、CLK信号を4波だけ入力しています。そして、それら4波のCLK信号の立ち上がりに同期して、SIN端子にHLHHの順に、パラレル信号を入力しています。そうすると、CLK信号の4回目の立ち上がり以降では、Q3、Q2、Q1、Q0の4つの出力端子に、それぞれHLHHの信号が出力されます。つまり、SIN端子に入力した4ビットのシリアル信号が、Q0~Q3の出力端子に、パラレル信号として出力されるのです。パラレル信号に変換されると、マイコンのCPU等が、データバスに1度アクセスするだけで受信信号を読み取る事ができる様になります。

この様に、この回路はシリアル信号をパラレル信号に変換する機能がある事から、シリアル-パラレル変換回路と呼ばれます。

この項では、4ビットのシリアル-パラレル変換を行う回路を示しましたが、8ビットのシリアル-パラレル変換を行う場合は、Dフリップフロップを8個使った8ビットのシフトレジスタを使い、CLK信号を8波入力します。

参考:図35の様なシリアル-パラレル変換を行うシフトレジスタICとしては、74HC164がよく使われます。74HC164はシリアル入力、パラレル出力の、8ビットのシフトレジスタです。74HC164は、シフトレジスタのビット数が8ビットに増えている点と、シリアル入力端子の前にANDゲートを配置している点と、非同期クリア端子を備えている点で、図35のシリアル-パラレル変換回路のシフトレジスタよりは拡張されていますが、基本的な使い方はここで説明している方法と同じです。

5-4.マイコン等のICの出力ピンの拡張

前節で説明したシリアルパラレル変換回路を使えば、GPIOピンの少ないマイコンなどのICの出力ピンを拡張する事ができます。

例えば、図35のQ0~Q3の出力信号のそれぞれに、LED(と電流制限抵抗)を付けて、4つのLEDを制御する回路(図37)を考えます。

図37、4ビットのシリアル-パラレル変換を使って2つの信号で4つのLEDを制御する回路
↑ 画像をクリックすると拡大
図37、4ビットのシリアル-パラレル変換を使って2つの信号で4つのLEDを制御する回路

この回路を使えば、図38のタイミングチャートの様に、2本の信号線で4つのLEDを制御できるので、4つの信号線で4つのLEDの制御をする場合に比べて、信号線を2つ削減できます。

図38、図37の回路でLEDを制御する時のタイミングチャートの例
↑ 画像をクリックすると拡大
図38、図37の回路でLEDを制御する時のタイミングチャートの例
Xは不定(LHか分からない状態)を表します。

このタイミングチャートの例では、最初にLED0、LED1およびLED3を点灯させ、LED2を消灯させています。そのために、CLK信号の1~4波目でHLHHの順にシリアル信号をSIN端子に入力しています。(早く送った信号ほど番号の大きいLEDに届いている事に注意)

そしてしばらく経った後、次にLED0とLED2を点灯させ、LED1とLED3を消灯させています。そのために、CLK信号の5~8波目で、LHLHの順にシリアル信号をSIN端子に入力しています。

この回路は、おおむね意図通りに動作するのですが、SIN信号からシリアル信号を送っている間に、一時的に、LEDが意図しない点灯状態になるのが問題です。

ただし、意図通りの点灯状態になる直前に、一瞬LEDが点滅するとしても、その時間が十分短ければ、人間の目には留まりません。例えば1μsごとにクロックを送れば(クロック周波数1MHz)、たった4μsでシリアル信号の送信が終わります。その間、LEDが点滅しても、人間には全く知覚できません。

制御対象がLEDなら、図37の様にシフトレジスタにLEDを直結した回路でもあまり問題はないのですが、一瞬でも、出力が意図と違う状態になってはいけない回路を制御するには、もっと工夫が必要です。

この問題を解決するには、図39の回路の様に、シフトレジスタとLEDの間にストレージレジスタを挟むのが有効です。

図39、ストレージレジスタを使う事によりLEDが意図しない点灯状態にならない様にする回路
↑ 画像をクリックすると拡大
図39、ストレージレジスタを使う事によりLEDが意図しない点灯状態にならない様にする回路
この回路では、シフトレジスタとストレージレジスタの2種類のレジスタがあり、それぞれにクロック信号を要求します。両者のクロック信号を区別するため、シフトレジスタのクロック信号をCLK信号からSCLK信号に改名し、ストレージレジスタのクロック信号をRCLK信号としました。

この回路では、LED制御に必要な信号線が3本と、図37の回路より1本多くなるものの、図40のタイミングチャートに示す様に、LEDの表示が切り替わる際に、LEDが意図しない点灯状態になる事を防げます。

図40、図39の回路でLEDを制御する時のタイミングチャートの例
↑ 画像をクリックすると拡大
図40、図39の回路でLEDを制御する時のタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

この回路では、SCLK信号の1~4波目にSIN信号でHLHHの順にシリアルデータを送ると、4波目の立ち上がりにQ0~Q3にパラレル変換されたデータが出力されるものの、そのままではLEDの点灯状態に反映されません。その後、RCLK信号を立ち上げた瞬間に、シフトレジスタが出力するパラレルデータがストレージレジスタに転送され、この時点でLEDが意図通りの点灯状態になります。

その後しばらくして、LEDの点灯状態を変えるために、SCLK信号の5~8波目にSIN信号で次のLEDの点灯パターンを、シリアル信号として送っていますが、実際にLEDに反映されるのは、RCLK信号を立ち上げた瞬間です。この時、LEDの点灯状態は、意図しない点灯状態を一時的にでも経ることなく、目的の点灯状態に変化します。

LEDの状態を最初に設定するまではLEDの状態が不定になるのは仕方ないとして、2度目以降の設定においては、図39の回路では意図しない点灯状態を経ることなく次の点灯状態に遷移させる事が可能になります。

図39の回路では3本の信号線で4個の4つのLEDを制御しているので、マイコンなどの出力ピンが1本しか減らないのですが、図41の様に制御するLEDの数を8つに増やしても、あるいはそれ以上の数に増やしても、やはり信号線は3本のままです。ただし、制御対象のLEDが増えると、点灯状態の変更の際に送るシリアル信号のビット数が増えるので、時間がかかってしまうという問題点はあります。この様に、図39や図41の回路は、出力信号の数が多く、かつ出力状態をそれほど頻繁に変更しない用途に使うと、マイコンのGPIOピンを劇的に節約できます。

図41、図39の回路を8つのLEDの制御に使える様に拡張した回路
↑ 画像をクリックすると拡大
図41、図39の回路を8つのLEDの制御に使える様に拡張した回路

図41の様に、ストレージレジスタを加える事で、出力信号が変化する際に、意図しない出力信号が一時的にでも出ない様にした構造の8ビットシフトレジスタICは、74HCシリーズの中では、74HC594、74HC595および74HC4094の3つが挙げられます。これらのICは、いずれも機能もよく似ていますが、入手が容易な事から74HC595が最もよく使われている様です。

5-5.パラレル-シリアル変換回路

UARTSPI、I2Cなどのシリアルインターフェースの送信回路にも、シフトレジスタを使ったパラレル-シリアル変換回路が使われます。この場合は、D0~D3のパラレル入力端子に送信したい信号を入力し、SOUT端子からその信号をシリアルで取り出します。SINおよびQ0~Q2の端子は使用しません。

図42と図43に回路図を、図44にタイミングチャートの例を示します。

図42、4ビットのパラレル-シリアル変換回路
↑ 画像をクリックすると拡大
図42、4ビットのパラレル-シリアル変換回路
図43、図37のパラレル-シリアル変換回路の等価回路
↑ 画像をクリックすると拡大
図43、図37のパラレル-シリアル変換回路の等価回路
図44、図42および図43のシリアル-パラレル変換回路のタイミングチャートの例
↑ 画像をクリックすると拡大
図44、図42および図43のシリアル-パラレル変換回路のタイミングチャートの例
Uは不定(LHか分からない状態)を表します。

CLK信号には4波の信号が入力されています。

CLK信号の1度目の立ち上がりのタイミングでは、SH/LD信号がLになっており、D0~D3のパラレル入力端子に入力された、送信したいパラレルデータが、4つのDフリップフロップにそれぞれ取り込まれます。この時点で、シリアル出力端子SOUTには、D3端子に入力した信号が出力されます。

CLK信号の2度目~4度目の立ち上がりのタイミングでは、SH/LD信号がHになっており、レジスタがシフト動作します。このシフト動作により、D2、D1、D0の各端子に1クロック目で入力した信号が、SOUT端子に順に出力されます。

この様に、この回路にはパラレル信号をシリアル信号に変換する機能がある事から、パラレル-シリアル変換回路と呼ばれます。

6.74HCシリーズ(汎用ロジックIC)のシフトレジスタ

74HCシリーズの汎用ロジックICの中にも、シフトレジスタの機能を持ったものがいくつかあります。それらのシフトレジスタICの型番と、主な機能を表4にまとめます。

表4、74HCシリーズのシフトレジスタ
型番 ビット数 シリアル入力・パラレル入力 ストレージレジスタの有無 備考 製品紹介ページ
ピン数 シリアル出力・パラレル出力 シフト方向
74HC164 8ビット シリアル入力 なし 8ビット、シリアル入力・パラレル出力シフトレジスタ SN74HC164
14ピン パラレル出力 単方向
74HC165 8ビット シリアル入力、パラレル入力(非同期ロード) なし 8ビット、パラレル入力・シリアル出力シフトレジスタ SN74HC165
16ピン シリアル出力 単方向
74HC166 8ビット シリアル入力、パラレル入力(同期ロード) なし 8ビット、パラレル入力・シリアル出力シフトレジスタ SN74HC166
16ピン シリアル出力(正論理・負論理) 単方向
74HC194 4ビット シリアル入力(MSBLSB)、パラレル入力(同期ロード) なし 4ビット、双方向多目的シフトレジスタ CD74HC194
16ピン パラレル出力 双方向
74HC195 4ビット シリアル入力(J・K)、パラレル入力(同期ロード) なし 4ビット、パラレルアクセスシフトレジスタ CD74HC195
16ピン パラレル出力 単方向
74HC299 8ビット シリアル入力(MSB・LSB)、パラレル入力(同期ロード) なし 8ビット、多目的シフトレジスタ、3ステート出力 CD74HC299
20ピン パラレル出力(3ステート)、シリアル出力(MSB・LSB) 双方向
74HC589 8ビット シリアル入力、パラレル入力(ストレージレジスタ付き) あり 8ビット、ストレージレジスタ付きパラレル入力・シリアル出力シフトレジスタ、3ステート出力 MC74HC589A
16ピン シリアル出力(3ステート) 単方向
74HC594 8ビット シリアル入力 あり 8ビット、シリアル入力・ストレージレジスタ付きパラレル出力シフトレジスタ SN74HC594
16ピン パラレル出力(ストレージレジスタ付き)、シリアル出力 単方向
74HC595 8ビット シリアル入力 あり 8ビット、シリアル入力・ストレージレジスタ付きパラレル出力シフトレジスタ、3ステート出力 SN74HC595
16ピン パラレル出力(ストレージレジスタ付き、3ステート)、シリアル出力 単方向
74HC597 8ビット シリアル入力、パラレル入力(ストレージレジスタ付き) あり 8ビット、ストレージレジスタ付きシリアル入力・パラレル出力シフトレジスタ CD74HC597
16ピン シリアル出力 単方向
74HC4015 4ビット、2回路 シリアル入力(各回路1本) なし 4ビット、2回路入りシフトレジスタ CD74HC4015
16ピン パラレル出力(各回路4ビット) 単方向
74HC4094 8ビット シリアル入力 あり 8ビット、シリアル入力・ストレージレジスタ付きパラレル出力シフトレジスタ、3ステート出力 CD74HC4094
16ピン パラレル出力(ストレージレジスタ付き、3ステート)、シリアル出力(遅延のない信号と半クロック遅れた信号) 単方向
広告

関連用語

関連ページ

Arduino 電子工作
このサイトの記事が本になりました。
書名:Arduino 電子工作
ISBN:978-4-7775-1941-5
工学社の書籍の内容の紹介ページ
本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。