bitGateLab Digital · 学ぶ
日本語
シミュレータを開く

学ぶ › トピック 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

S1S0Y
00I0
01I1
10I2
11I3

各項は、データ入力と選択線(そのまま、または否定したもの)の 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 で実現します。

  1. 真理値表を、A B の値が同じ二行ずつの組に分け、F が C にどう依存するかを見ます。
  2. AB = 00:m0 = 0(C = 0)、m1 = 1(C = 1)。F = C なので、I0 = C。
  3. AB = 01:m2 = 1(C = 0)、m3 = 0(C = 1)。F = C なので、I1 = C。
  4. AB = 10:m4 = 0、m5 = 0。I2 = 0。
  5. 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 です。

74HC ファミリの代表的な 3 対 8 デコーダの出力は、負論理(アクティブ Low)です。選ばれた出力が 0 になり、ほかの出力は 1 になります。この場合、最小項の OR は、ド・モルガンの定理により、同じ出力の NAND に置き換わります。

優先エンコーダ

エンコーダは逆の操作を行います。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 セグメントデコーダ

a b c d e f g
7 セグメント表示器の各セグメントの名前。

7 セグメント表示器には、セグメントごとに LED が一つあります。デコーダは BCD の数字(A B C D、A が最上位ビット)を受け取り、その数字の形になるセグメントを点灯させます。カソードコモンの表示器では、1 がセグメントの点灯を意味します。

数字ABCDabcdefg
000001111110
100010110000
200101101101
300111111001
401000110011
501011011011
601101011111
701111110000
810001111111
910011111011

コード 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 で点灯するので、すべての出力を反転します。

よくある間違い

シミュレータで試してみよう

関数の真理値表と、マルチプレクサで作った回路を比べてみましょう。

  1. 入力が A、B、C の三つの真理値表を作り、行 1、2、6、7 で F = 1 にします。
  2. エディタに 4 対 1 のマルチプレクサを置き(または AND 四つ、NOT 二つ、4 入力 OR 一つで組み)、A と B を選択入力につなぎます。
  3. データ入力に、C、C の否定、固定の 0、固定の 1 を、この順につなぎます。
  4. 入力を八通りすべての組み合わせに切り替え、出力が表と一致することを確かめます。
  5. 表示器のセグメント a でも同じことをします。4 変数の表にその列を入力し、行 10 から 15 を X にして、カルノー図が示すグループを確認します。

練習問題

  1. 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。

  2. 16 入力の MUX には選択線が何本必要ですか。また、それで実現できる関数の変数は最大でいくつですか。
    解答

    選択線は 4 本です(24 = 16)。余った変数をデータ入力につなげば、最大 5 変数までのどんな関数でも実現できます。

  3. 組み合わせ 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. 4 入力の優先エンコーダで、D3 = 0、D2 = 0、D1 = 1、D0 = 1 のとき、出力はどうなりますか。
    解答

    Y1 = 0 + 0 = 0、Y0 = 0 + 1·1 = 1、V = 1。出力は 01 で、D1 が D0 より優先されます。