배우기 › 주제 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)을 4×1 MUX로 구현하세요. A와 B를 선택 입력으로 사용합니다(A = S1, B = S0).
- 진리표를 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 디코더는 변수 세 개의 최소항 8개를 모두 만들어 냅니다. 그래서 변수가 세 개인 함수는 무엇이든 디코더 하나와, 해당 최소항의 출력을 모으는 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). 실제로 2진수로 1 + 1 + 0 = 10입니다.
우선순위 인코더
인코더는 반대 동작을 합니다. 2n개의 선 가운데 활성화된 선의 번호를 n비트 2진수로 내보냅니다. 문제는 두 선이 동시에 활성화될 때 어떻게 하느냐인데, 실용적인 해법이 우선순위 인코더입니다. 활성화된 선 중 번호가 가장 높은 선의 번호를 내보냅니다. 입력이 D3(우선순위가 가장 높음)부터 D0까지 4개일 때:
Y1 = D3 + D2, Y0 = D3 + D2·D1, V = D3 + D2 + D1 + D0
출력 V("유효")는 활성화된 입력이 하나 이상 있음을 알려 줍니다. 이것이 없으면 "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: 숫자 1과 4에서만 0입니다. 10부터 15까지를 X로 둔 4변수 맵에서 가장 큰 묶음은 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가 서로 바뀌어 함수가 틀려집니다.
- 많은 디코더의 출력이 Low 활성이라는 점을 잊고 NAND가 들어갈 자리에 OR를 쓰는 것.
- 우선순위도 유효 출력도 없는 인코더를 설계하는 것. "D0 활성"일 때와 "아무것도 활성 아님"일 때 모두 00을 내게 됩니다.
- 공통 캐소드용 표를 공통 애노드 디스플레이에 섞어 쓰는 것: 정확히 반대의 세그먼트가 켜집니다.
- 1010부터 1111까지의 조합을 무관 조건으로 활용하지 않아 식이 두 배로 커지는 것.
시뮬레이터에서 해 보기
함수의 진리표를 멀티플렉서로 만든 회로와 비교해 보세요.
- 입력이 A, B, C 세 개인 진리표를 만들고 1, 2, 6, 7행에 F = 1을 표시합니다.
- 편집기에 4×1 멀티플렉서를 놓고(또는 AND 네 개, NOT 두 개, 입력이 네 개인 OR 하나로 직접 만들고) A와 B를 선택 입력에 연결합니다.
- 데이터 입력에 C, C의 부정, 고정된 0, 고정된 1을 이 순서로 연결합니다.
- 여덟 가지 조합을 차례로 입력하며 출력이 진리표와 일치하는지 관찰합니다.
- 디스플레이의 세그먼트 a로 반복합니다. 그 열을 4변수 진리표에 입력하고, 10부터 15까지의 행을 X로 표시한 뒤 카르노 맵이 제안하는 묶음을 확인합니다.
연습문제
- F(A, B, C) = Σm(0, 3, 5, 6)을 4×1 MUX로 구현하세요. A와 B를 선택 입력으로 사용합니다.
정답
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에는 선택선이 몇 개 필요하며, 이 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을 이깁니다.