SがHの時はA端子に入力された信号を、SがLの時はB端子に入力された信号を出力します。Yに出力する信号をAとBの2つの入力信号のどちらにするかを選択するための入力信号です。SがHの時はAが選択されます。SがLの時はBが選択されます。この回路の動作のイメージは、図9の様なスイッチで説明できます。図9、マルチプレクサの動作イメージを理解するためのスイッチの図この図が表しているのは、Y端子をA端子につなぐかB端子につなぐかを選択できるスイッチです。機械的なスイッチの場合、指でレバーなどを操作する必要があるのですが、マルチプレクサの場合、S信号をHにするかLにするかで、自動的にスイッチを切り替えてくれます。この様に考えると、2入力のマルチプレクサは、c接点のリレーに似ていますね。注:マルチプレクサの働きを直感的に理解しやすい様に、機械的なスイッチやリレーに例えましたが、機械的なスイッチやリレーと、論理回路であるマルチプレクサでは、異なる点が色々あります。機械的なスイッチやリレーでは、AやBを出力端子にし、Yを入力端子にして信号の流れる方向を逆にもできますが、マルチプレクサではそれができません。リレーがスイッチを切り替えるには数msと長い時間がかかりますが、マルチプレクサなら数nsで切り替えられます。リレーの場合はコイルを駆動するために、S信号にたくさんの電流が流れますが、マルチプレクサの場合、消費電力がはるかに小さくなります。大きな違いは、機械的なスイッチやリレーではアナログ信号を扱えますが、論理回路のマルチプレクサの場合、HとLの二値信号しか扱えません。(アナログマルチプレクサという半導体製品の場合は、アナログ信号の選択ができます)マルチプレクサの意味が分かったところで、ANDやORなどの基本ゲートをどう組み合わせれば、マルチプレクサの機能を実現できるかを考えてみます。結論から言えば、例えば図10の様な回路でマルチプレクサが実現できます。図10、基本ゲートのみでマルチプレクサを構成した例この回路がマルチプレクサとして働くことを確認しておきましょう。図11の様にS=Hの場合の動作を考えてみます。図11、図10の回路のS入力にHを入力した図ここで、AND回路やOR回路やNOT回路には次の様な性質がある事を確認しておきます。図12に示す様に、AND回路の一方の入力端子にHを加えた場合は、もう一方の入力Xを直接出力するのと同じになります。図13に示す様に、AND回路の一方の入力端子にLを加えた場合は、必ずLを出力します。図14に示す様に、OR回路の一方の入力端子にLを加えた場合は、もう一方の入力Xを直接出力するのと同じになります。図15に示す様に、NOT回路にLを入力した場合は、Hを出力します。図16に示す様に、NOT回路にHを入力した場合は、Lを出力します。図12~図14と図16の性質を使うと、図11の回路は図17の様に変形する事ができます。図17、マルチプレクサのS端子にHを入力した場合の等価回路この図から分かる様に、マルチプレクサのS端子にHを入力すると、Y端子にはA信号が出力されます。同様に、図12~図15の性質を使うと、S端子にLを入力したマルチプレクサは、図18の様に変形できます。図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の様になります。図19の回路図の中の4つのマルチプレクサを、図8の回路記号を使って書き直すと、図20の様になります。図20、図19のシフトレジスタの回路図をマルチプレクサの回路記号を使って書き直した物かなり整理されて、回路図が見やすくなりました。図1の回路図はDフリップフロップと基本ゲートのみで書かれているのが利点ですが、シフトレジスタの動作を考えるには図20を使う方が分かりやすいです。図20のシフトレジスタの動作を、シリアル入力時とパラレル入力時に分けて説明します。図20のシフトレジスタのSH/LD端子にHを入力して、シリアル入力モードにした場合について考えます。この時、4つのマルチプレクサはA端子の信号を出力しますから、マルチプレクサのB端子につながっているD0~D3の信号は、回路の動作に影響を与えなくなります。SH/LD端子にHを入力した場合の、図20のシフトレジスタの等価回路を図21に示します。図21、図20のシフトレジスタのSH/LD端子にHを入力した場合の等価回路シリアル入力時には、4つのフリップフロップが縦続に接続されている(前の段のフリップフロップの出力端子が後の段のフリップフロップの入力につながれている)事が分かります。この形式の回路が、シフトレジスタの最も基本的な形だといえます。図21の回路のタイミングチャートの例を図22に示します。図22、図21のシフトレジスタのタイミングチャートの例Uは不定(LかHか分からない状態)を表します。CLK信号の立ち上がりでSIN信号を読み取り、Q0信号に出力します。Q1、Q2、Q3の各信号は順に、1クロックずつ遅れた信号を出力します。図22のA、B、C、Dの各時点でのQ0~Q3の信号の状態を表にして、状態の変化の様子を説明したのが図23です。図23、Q0~Q3の信号の変化の様子1クロック時間が進むごとに、Q0~Q2の値1つ右にずれる様子が分かります。この様な動作をシフト動作といいます。シフト動作するのが、「シフトレジスタ」の語源になっています。シフト動作を、シフトレジスタに記憶している数値への演算ととらえる場合、この演算をシフト演算といいます。参考:シフトレジスタの「レジスタ」は、小容量の記憶素子を意味します。通常レジスタは、記憶したい情報のビット数と同じだけのDフリップフロップを使って構成されます。図20にシフトレジスタのSH/LD端子にLを入力して、パラレル入力モードにした場合について考えます。この時、4つのマルチプレクサはB端子の信号を出力しますから、一番左のマルチプレクサのA端子につながっているSIN信号は、回路の動作に影響を与えなくなります。SH/LD端子にLを入力した場合の、図20のシフトレジスタの等価回路を図24に示します。図24、図20のシフトレジスタのSH/LD端子にLを入力した場合の等価回路この回路図から、4つのDフリップフロップは、お互いに配線でつながっておらず、別々に動作する事が分かります。図24の回路のタイミングチャートの例を図25に示します。図25、図24の回路のタイミングチャートの例Uは不定(LかHか分からない状態)を表します。信号線が離れていて見にくいですが、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を入力して作った遅延回路VDDは電源電圧です。SH/LD端子をVDDに接続して、Hを入力しています。D0~D3の入力端子は使用しません。CMOS回路の場合、使用しない入力端子でも明示的にLまたはHの論理に確定しないといけないので、ここではGNDに接続してLを入力しています。別にD0~D3の入力端子にHを入力しても構いませんが、その場合はそれらの端子をVDDに接続してください。TTLの場合は、入力端子をオープンにすると、Hが入力されたものとして処理されます。図22(再掲)、図21のシフトレジスタのタイミングチャートの例Uは不定(LかHか分からない状態)を表します。SIN信号はCLK信号の立ち上がりで左端のDフリップフロップに取り込まれるため、Q0信号は、SIN信号に対して、0~1クロックの範囲で遅延します。Q1信号、Q2信号、Q3信号と進むにつれ、1クロックずつ遅延時間が増えます。この様に、シフトレジスタをシリアル入力モードで使用すると、必要なクロック数だけSIN信号から遅延した信号が得られます。Q3端子では3~4クロックの範囲で遅延が発生しますが、それより大きな遅延が必要な場合は、4ビットより多いビット数のシフトレジスタが必要になります。この項では図20の回路の機能を持った4ビットシフトレジスタのICがあるものとして、それを使って図26の回路で遅延回路を構成しましたが、Dフリップフロップを使って遅延回路を作る場合は、パラレル入力ポート(D0~D3)を持った図20のシフトレジスタを組んで、SH/LD信号をLにしてパラレル入力ポートをわざわざ無効にするよりは、直接図21の様な単純なシフトレジスタを組む方が、部品が少なくなり、合理的です。UARTの様な、外部とデジタル通信する回路を設計する場合、外部から来た信号にノイズが乗っている可能性がある事を考慮して設計する事が必要になります。短時間のパルス性のノイズを除去するには、アナログ回路によるローパスフィルタとシュミットトリガ入力の論理素子を組み合わせるのが理想ですが、アナログフィルタは高価で実装面積が大きくなる傾向があります。容量性のノイズ源(通信線路と寄生容量で結合しているノイズ源)であれ、誘導性のノイズ源(時間的な変化をする磁束を放出する事で通信線路に誘導電圧を発生するノイズ源)であれ、通信線路とノイズ源はAC結合しています。そのため、通常は、ある程度高い周波数のノイズが信号に乗る事になります。ノイズ源が断続的にノイズを発生する性質を持っている場合、信号に乗るのはパルス状のノイズになります。図28、ローパスフィルタとシュミットトリガ入力の論理素子でノイズ対策をした例そのような場合、アナログのフィルタを使った回路よりは性能が劣るものの、論理回路だけである程度のノイズ対策ができます。その時に使われるのが、この項で説明するデジタル的なノイズフィルタ回路です。受信回路がロジックICで構成されている場合、そのICにノイズフィルタを内蔵することにより、実装面積も大きくならず、ほぼコスト上昇なしにノイズ対策ができます。図にはクロック信号源が書いてありますが、通常は受信回路とクロック信号を共用できるため、専用のクロック信号源は必要ありません。受信回路がFPGAで構成されている場合、ノイズフィルタのない受信回路に後からノイズフィルタを追加する事ができます。その場合、回路図や基板のアートワークを変更する必要はなく、FPGAの動作を記録したROMを書き換えるだけでノイズフィルタの追加ができます。ノイズフィルタ回路は、前項で説明した遅延回路を応用して作られます。簡単なノイズフィルタ回路の例を図30および図31に示します。図30、遅延回路を応用したノイズフィルタの例Q3/SOUTの端子についている×印は、どこにもつながっていない事を表します。CMOSの論理回路の場合、使用しない入力端子はLまたはHを明示的に入力する必要がありますが、使用しない出力端子はオープンで構いません。図30では、4ビットのシフトレジスタのD3とQ3の端子を使わない事で、実質3ビットのシフトレジスタとして使っています。そのため図31では、3ビットのシフトレジスタを3つのDフリップフロップで組んでいます。3ビットシフトレジスタの出力信号Q0~Q2が3入力の多数決回路に入力されています。3入力の多数決回路の回路図と真理値表を図32に示します。図32、3入力の多数決回路の回路図と真理値表この多数決回路は、3つの入力信号A、B、Cの中で、Lが2つ以上あれば出力信号YにLを出力します。逆に、3つの入力信号の中で、Hが2つ以上あればHを出力します。この様に、入力信号の中で過半数を占める真理値を選び出して出力するので、「多数決」回路と呼ばれます。多数決回路の動作が分かったところで、図30(あるいは図31)の回路のタイミングチャートの例を見てみましょう。図33、図30あるいは図31のノイズフィルタのタイミングチャートの例Uは不定(LかHか分からない状態)を表します。IN信号としては、クロック(CLK信号)の周期よりもずっと長いタイミングで真理値が変化する遅い信号(周波数の低い信号)を想定しています。通信線路を伝わってくる間に、時間の短いパルス状のノイズが乗って、ところどころ論理が元の信号から反転しています。図33のタイミングチャートでは、図中の時間範囲全体を見ると、IN信号はL→H→Lと緩やかに変化しています。前述のノイズのため、ところどころ論理が反転している部分があります。3ビットのシフトレジスタにより、IN信号をクロックの立ち上がりでサンプリングして1段~3段遅延し、それぞれQ0~Q2の信号に取り出します。サンプリングにより、CLK信号の立ち上がりと次の立ち上がりの間に発生するパルス状のノイズは、消えてしまいます。(IN信号の中でピンク色に着色されている部分)CLK信号の立ち上がりのタイミングでノイズにより信号の論理が反転している場合は、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.シリアル-パラレル変換回路UART、SPI、I2Cなどのシリアルインターフェースの受信回路に、シフトレジスタを使ったシリアル-パラレル変換回路が使われます。この場合は、SH/LD信号をHに固定して、IN端子に受信したシリアル信号を入力します。Q0~Q3のパラレル出力端子を使い、パラレル化した信号を、これらのパラレル出力端子から読み出します。図34と図35に回路図を、図36にタイミングチャートの例を示します。図34、4ビットのシリアル-パラレル変換回路Q3/SOUTの信号名がQ3に変わった点を除いて、図26の遅延回路と同じ回路です。回路の使用目的が異なります。図35、図34のシリアル-パラレル変換回路の等価回路Q3/SOUTの信号名がQ3に変わった点を除いて、図21と同じ回路図です。図36、図34および図35のシリアル-パラレル変換回路のタイミングチャートの例Uは不定(LかHか分からない状態)を表します。図36のタイミングチャートでは、CLK信号を4波だけ入力しています。それら4波のCLK信号の立ち上がりに同期して、SIN端子にH、L、H、Hの順に、パラレル信号を入力しています。すると、CLK信号の4回目の立ち上がり以降では、Q3、Q2、Q1、Q0の4つの出力端子に、それぞれH、L、H、Hの信号が出力されます。SIN端子に入力した4ビットのシリアル信号が、Q0~Q3の出力端子に、パラレル信号として出力されるのです。パラレル信号に変換されると、マイコンのCPU等が、データバスに1度アクセスするだけで受信信号を読み取る事ができる様になります。この様に、この回路はシリアル信号をパラレル信号に変換する機能がある事から、シリアル-パラレル変換回路と呼ばれます。この項では、4ビットのシリアル-パラレル変換を行う回路を示しましたが、8ビットのシリアル-パラレル変換を行う場合は、Dフリップフロップを8個使った8ビットのシフトレジスタを使い、CLK信号を8波入力します。参考:図35の様なシリアル-パラレル変換を行うシフトレジスタICとしては、74HC164がよく使われます。74HC164はシリアル入力、パラレル出力の、8ビットのシフトレジスタです。74HC164は、シフトレジスタのビット数が8ビットに増えている点と、シリアル入力端子の前にANDゲートを配置している点と、非同期クリア端子を備えている点で、図35のシリアル-パラレル変換回路のシフトレジスタよりは拡張されていますが、基本的な使い方はここで説明している方法と同じです。前節で説明したシリアルパラレル変換回路を使えば、GPIOピンの少ないマイコンなどのICの出力ピンを拡張する事ができます。図35のQ0~Q3の出力信号のそれぞれに、LED(と電流制限抵抗)を付けて、4つのLEDを制御する回路(図37)を考えます。図37、4ビットのシリアル-パラレル変換を使って2つの信号で4つのLEDを制御する回路この回路を使えば、図38のタイミングチャートの様に、2本の信号線で4つのLEDを制御できるので、4つの信号線で4つのLEDの制御をする場合に比べて、信号線を2つ削減できます。図38、図37の回路でLEDを制御する時のタイミングチャートの例Xは不定(LかHか分からない状態)を表します。このタイミングチャートの例では、最初にLED0、LED1およびLED3を点灯させ、LED2を消灯させています。そのために、CLK信号の1~4波目でH、L、H、Hの順にシリアル信号をSIN端子に入力しています。(早く送った信号ほど番号の大きいLEDに届いている事に注意)そしてしばらく経った後、次にLED0とLED2を点灯させ、LED1とLED3を消灯させています。そのために、CLK信号の5~8波目で、L、H、L、Hの順にシリアル信号をSIN端子に入力しています。この回路は、おおむね意図通りに動作するのですが、SIN信号からシリアル信号を送っている間に、一時的に、LEDが意図しない点灯状態になるのが問題です。意図通りの点灯状態になる直前に、一瞬LEDが点滅するとしても、その時間が十分短ければ、人間の目には留まりません。1μsごとにクロックを送れば(クロック周波数1MHz)、たった4μsでシリアル信号の送信が終わります。その間、LEDが点滅しても、人間には全く知覚できません。制御対象がLEDなら、図37の様にシフトレジスタにLEDを直結した回路でもあまり問題はないのですが、一瞬でも、出力が意図と違う状態になってはいけない回路を制御するには、もっと工夫が必要です。この問題を解決するには、図39の回路の様に、シフトレジスタとLEDの間にストレージレジスタを挟むのが有効です。図39、ストレージレジスタを使う事によりLEDが意図しない点灯状態にならない様にする回路この回路では、シフトレジスタとストレージレジスタの2種類のレジスタがあり、それぞれにクロック信号を要求します。両者のクロック信号を区別するため、シフトレジスタのクロック信号をCLK信号からSCLK信号に改名し、ストレージレジスタのクロック信号をRCLK信号としました。この回路では、LED制御に必要な信号線が3本と、図37の回路より1本多くなるものの、図40のタイミングチャートに示す様に、LEDの表示が切り替わる際に、LEDが意図しない点灯状態になる事を防げます。図40、図39の回路でLEDを制御する時のタイミングチャートの例Uは不定(LかHか分からない状態)を表します。この回路では、SCLK信号の1~4波目にSIN信号でH、L、H、Hの順にシリアルデータを送ると、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の様に、ストレージレジスタを加える事で、出力信号が変化する際に、意図しない出力信号が一時的にでも出ない様にした構造の8ビットシフトレジスタICは、74HCシリーズの中では、74HC594、74HC595および74HC4094の3つが挙げられます。これらのICは、いずれも機能もよく似ていますが、入手が容易な事から74HC595が最もよく使われている様です。5-5.パラレル-シリアル変換回路UART、SPI、I2Cなどのシリアルインターフェースの送信回路にも、シフトレジスタを使ったパラレル-シリアル変換回路が使われます。この場合は、D0~D3のパラレル入力端子に送信したい信号を入力し、SOUT端子からその信号をシリアルで取り出します。SINおよびQ0~Q2の端子は使用しません。図42と図43に回路図を、図44にタイミングチャートの例を示します。図44、図42および図43のシリアル-パラレル変換回路のタイミングチャートの例Uは不定(LかHか分からない状態)を表します。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にまとめます。ページウィキペディアのシフトレジスタのページ。電子工作ISBN:978-4-7775-1941-5→工学社の書籍の内容の紹介ページ本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。このサイトの中の人が書いた本です。本のカバーの写真か書名をクリックすると、Amazonの書籍購入ページに移動します。