学ぶ › トピック 8
マルチプレクサ、デコーダ、エンコーダのしくみ
読了時間:約 8 分 · bitGateLab チーム
中規模の組み合わせ回路ブロックは、ほとんどのデジタルシステムを組み立てるための部品です。マルチプレクサは複数のデータから一つを選び、デマルチプレクサは一つのデータを行き先の一つへ振り分け、デコーダは 2 進数に応じて一本の線だけをアクティブにし、エンコーダはその逆を行います。この記事では、それぞれの論理式と真理値表、そしてどの試験にも出てくる二つの応用、つまりマルチプレクサによる論理関数の実現と、7 セグメント表示器用デコーダの設計を見ていきます。
マルチプレクサ(MUX)
データ入力が 2n 本のマルチプレクサには、n 本の選択入力と一つの出力があります。選択線に与えた 2 進数が、どのデータ入力を出力に通すかを指定します。最も単純なのは 2 対 1 の MUX です。
Y = S·I0 + S·I1
S = 0 のとき出力は I0 を、S = 1 のとき I1 をそのまま写します。4 対 1 の MUX は二本の選択線 S1 S0 を使い、各データ入力に、対応する選択変数の最小項を掛けます。
Y = S1·S0·I0 + S1·S0·I1 + S1·S0·I2 + S1·S0·I3
| S1 | S0 | Y |
|---|---|---|
| 0 | 0 | I0 |
| 0 | 1 | I1 |
| 1 | 0 | I2 |
| 1 | 1 | I3 |
各項は、データ入力と選択線(そのまま、または否定したもの)の AND で、それらすべてを一つの OR でまとめます。
MUX で論理関数を実現する
MUX には選択変数のすべての最小項がすでに含まれているので、「プログラム可能な関数」として使えます。データ入力が 2n 本の MUX があれば、各データ入力に 0 か 1 を与えることで、n 変数のどんな関数でも実現できます。さらに良いことに、余った変数(またはその否定)をデータ入力につなげば、同じ MUX で n + 1 変数の関数を作れます。
例:F(A, B, C) = Σm(1, 2, 6, 7) を、A と B を選択入力として(A = S1、B = S0)、4 対 1 MUX で実現します。
- 真理値表を、A B の値が同じ二行ずつの組に分け、F が C にどう依存するかを見ます。
- AB = 00:m0 = 0(C = 0)、m1 = 1(C = 1)。F = C なので、I0 = C。
- AB = 01:m2 = 1(C = 0)、m3 = 0(C = 1)。F = C なので、I1 = C。
- AB = 10:m4 = 0、m5 = 0。I2 = 0。
- AB = 11:m6 = 1、m7 = 1。I3 = 1。
A = 0、B = 1、C = 0(最小項 2)で検算します。選択値 01 は I1 = C = 1 を選びます。m2 はこの関数に含まれるので、正しい結果です。
デマルチプレクサとデコーダ
1 対 4 のデマルチプレクサ(DEMUX)は、データ D を受け取り、S1 S0 に応じて四つの出力のうちの一つへ送ります。残りの出力は 0 のままです。Y0 = D·S1·S0、Y1 = D·S1·S0、Y2 = D·S1·S0、Y3 = D·S1·S0 となります。
DEMUX で D = 1 に固定し、それを「イネーブル」と呼ぶことにすると、デコーダになります。入力が n 本、出力が 2n 本で、そのうち入力の数値に対応する一本だけがアクティブになります。3 対 8 デコーダは、3 変数の 8 個の最小項をすべて生成します。そのため、3 変数のどんな関数でも、デコーダ一つと、その関数の最小項に対応する出力をまとめる OR ゲート一つで作れます。
例:3 対 8 デコーダで作る全加算器。入力は A、B、Cin です。
- 和 S = Σm(1, 2, 4, 7):出力 Y1、Y2、Y4、Y7 を入れる 4 入力 OR。
- キャリー Cout = Σm(3, 5, 6, 7):Y3、Y5、Y6、Y7 を入れる 4 入力 OR。
一つの場合を確認しましょう。A = 1、B = 1、Cin = 0 は数値 110 = 6 です。アクティブになるのは Y6 だけです。Y6 は S の OR には入っていませんが(S = 0)、Cout の OR には入っています(Cout = 1)。たしかに 1 + 1 + 0 は 2 進数で 10 です。
優先エンコーダ
エンコーダは逆の操作を行います。2n 本の線のうちアクティブな線の番号を、n ビットの 2 進数で出力します。問題は、二本が同時にアクティブになったときにどうするかです。実用的な解決策が優先エンコーダ(プライオリティエンコーダ)で、アクティブな線のうち最も番号の大きいものを出力します。入力が 4 本、D3(最も優先度が高い)から D0 までの場合は次のとおりです。
Y1 = D3 + D2、Y0 = D3 + D2·D1、V = D3 + D2 + D1 + D0
出力 V(valid、「有効」)は、少なくとも一つの入力がアクティブであることを示します。これがないと、「D0 がアクティブ」と「どれもアクティブでない」を区別できません。どちらも Y1 Y0 = 00 になるからです。D2 = D1 = 1 で試してみましょう。Y1 = 1、Y0 = 0 + 0·1 = 0、つまり 10 = 2 です。当然ながら、D2 が優先されます。
BCD-7 セグメントデコーダ
7 セグメント表示器には、セグメントごとに LED が一つあります。デコーダは BCD の数字(A B C D、A が最上位ビット)を受け取り、その数字の形になるセグメントを点灯させます。カソードコモンの表示器では、1 がセグメントの点灯を意味します。
| 数字 | ABCD | a | b | c | d | e | f | g |
|---|---|---|---|---|---|---|---|---|
| 0 | 0000 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0001 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 2 | 0010 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 3 | 0011 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
| 4 | 0100 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
| 5 | 0101 | 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 6 | 0110 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
| 7 | 0111 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| 8 | 1000 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
| 9 | 1001 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
コード 1010 から 1111 は有効な BCD ではないので、カルノー図ではドントケア条件(X)として扱います。これにより、各セグメントの式が大幅に簡単になります。
セグメント a:0 になるのは数字 1 と 4 のときだけです。4 変数のカルノー図で 10 から 15 を X にすると、最大のグループは次のとおりです。A(X を含む 8 セル)、C(8 セル)、B·D(最小項 5、7、13、15)、そして B·D(四隅:0、2、8、10)。
a = A + C + B·D + B·D
4(0100)で確かめます。A = 0、C = 0、B·D = 1·0 = 0、B·D = 0·1 = 0。結果は 0 で、セグメント a は消灯します。正しい結果です。
表示器がアノードコモンの場合は、各セグメントが 0 で点灯するので、すべての出力を反転します。
よくある間違い
- 選択線の順序を逆にする。S1 と S0 を入れ違えると、入力 I1 と I2 が入れ替わり、関数が正しくなくなります。
- 多くのデコーダの出力が負論理であることを忘れ、NAND を使うべきところに OR を使う。
- 優先順位も有効出力もないエンコーダを設計する。「D0 がアクティブ」でも「何もアクティブでない」でも 00 を出力してしまいます。
- カソードコモン用の表を、アノードコモンの表示器に使う。ちょうど逆のセグメントが点灯します。
- 組み合わせ 1010 から 1111 をドントケアとして活用せず、倍の大きさの式になってしまう。
シミュレータで試してみよう
関数の真理値表と、マルチプレクサで作った回路を比べてみましょう。
- 入力が A、B、C の三つの真理値表を作り、行 1、2、6、7 で F = 1 にします。
- エディタに 4 対 1 のマルチプレクサを置き(または AND 四つ、NOT 二つ、4 入力 OR 一つで組み)、A と B を選択入力につなぎます。
- データ入力に、C、C の否定、固定の 0、固定の 1 を、この順につなぎます。
- 入力を八通りすべての組み合わせに切り替え、出力が表と一致することを確かめます。
- 表示器のセグメント a でも同じことをします。4 変数の表にその列を入力し、行 10 から 15 を X にして、カルノー図が示すグループを確認します。
練習問題
- A と B を選択入力として、F(A, B, C) = Σm(0, 3, 5, 6) を 4 対 1 MUX で実現してください。
解答
AB = 00:m0 = 1、m1 = 0、I0 = C。AB = 01:m2 = 0、m3 = 1、I1 = C。AB = 10:m4 = 0、m5 = 1、I2 = C。AB = 11:m6 = 1、m7 = 0、I3 = C。これは偶数パリティ関数で、1 の個数が偶数のときに 1 になります。F = A ⊕ B ⊕ C。
- 16 入力の MUX には選択線が何本必要ですか。また、それで実現できる関数の変数は最大でいくつですか。
解答
選択線は 4 本です(24 = 16)。余った変数をデータ入力につなげば、最大 5 変数までのどんな関数でも実現できます。
- 組み合わせ 10 から 15 をドントケアとして、セグメント e の式を求めてください。
解答
e = 1 になるのは 0、2、6、8 です。グループ:B·D(0、2、8、10)と C·D(2、6、10、14)。結果:e = B·D + C·D = D·(B + C)。
- 4 入力の優先エンコーダで、D3 = 0、D2 = 0、D1 = 1、D0 = 1 のとき、出力はどうなりますか。
解答
Y1 = 0 + 0 = 0、Y0 = 0 + 1·1 = 1、V = 1。出力は 01 で、D1 が D0 より優先されます。