Skip to Content
독학사독학사 2단계논리회로16. 비교기·인코더·디코더·다중화기

이번 문서의 목표: 이 문서를 다 읽으면 크기 비교기·인코더·디코더·멀티플렉서·디멀티플렉서 각각의 진리표와 최소식을 도출하고, 실제 선택 신호·입력값을 대입해 출력을 계산하며, 이진-그레이 코드 변환 회로의 구조를 설명할 수 있다.

이번 편에서 다루는 회로들의 공통점

14편에서 배운 대로, 이번 편에서 다루는 크기 비교기·인코더·디코더·멀티플렉서·디멀티플렉서는 모두 현재 입력값만으로 출력이 정해지는 조합논리회로다. 각 회로는 겉보기에 서로 다른 일을 하는 것 같지만, 사실 컴퓨터 내부에서 “어떤 값을 고르거나(선택), 어떤 신호를 다른 형태로 바꾸는(변환)” 매우 자주 쓰이는 기본 부품들이다. 예를 들어 CPU가 여러 레지스터 중 하나를 골라 버스에 실어 보낼 때는 멀티플렉서가, 여러 인터럽트 요청 중 우선순위가 가장 높은 것을 고를 때는 인코더가, 메모리 주소 한 개를 특정 메모리 칩 하나로 연결할 때는 디코더가 사용된다.

쉽게 말하면: 이번 편의 회로들은 “여러 개 중 하나를 고르거나(멀티플렉서·인코더), 하나를 여러 개 중 하나로 펼치거나(디멀티플렉서·디코더), 두 값의 크기를 비교하는(비교기)” 실용적인 조합회로 모음이다.

크기 비교기: 두 수의 대소 관계 판정

크기 비교기(magnitude comparator)는 두 2진수를 입력받아 “어느 쪽이 더 큰지, 혹은 같은지”를 판정하는 회로다.

1비트 비교기

가장 단순한 형태는 1비트씩 비교하는 경우다. 입력 AA, BB 각각 1비트에 대해, 세 가지 출력 AgtBA gt B, A=BA=B, AtBA t B를 만든다.

ABA>BA \gt BA=BA<BA \lt B
00010
01001
10100
11010

각 출력의 최소식을 도출한다.

  • A=BA=B가 1인 행은 (0,0)(0,0)(1,1)(1,1)이다. 이는 09편에서 배운 XNOR(두 입력이 같을 때만 1)의 정의와 정확히 같다. A=BA=B를 판정하는 식은 AB\overline{A \oplus B}다.
  • AgtBA gt B가 1인 행은 (1,0)(1,0)뿐이다. AA가 1이고 BB가 0이어야 하므로 식은 ABˉA\bar{B}다.
  • AtBA t B가 1인 행은 (0,1)(0,1)뿐이다. 식은 AˉB\bar{A}B다.

다중 비트 비교기: 자릿수가 큰 쪽부터 비교

여러 비트로 이루어진 두 수를 비교할 때는, 10진수를 손으로 비교할 때와 같은 방식을 그대로 회로로 옮긴다. 가장 높은 자리(최상위 비트)부터 비교해서 이미 대소가 갈리면 그 결과가 최종 답이 되고, 두 비트가 같으면 그 다음 자리로 내려가 비교를 이어간다.

2비트 수 A=A1A0A = A_1A_0, B=B1B0B = B_1B_0를 비교하는 경우를 예로 든다. AgtBA gt B가 되는 조건은 다음 둘 중 하나다.

  1. 최상위 비트에서 이미 A1>B1A_1 > B_1인 경우: A1B1ˉA_1\bar{B_1}
  2. 최상위 비트가 같고(A1=B1A_1 = B_1), 그 다음 비트에서 A0>B0A_0 > B_0인 경우: (A1B1)A0B0ˉ(A_1 \odot B_1) \cdot A_0\bar{B_0} (여기서 \odot는 XNOR, 즉 “두 비트가 같음”을 뜻하는 기호다)
(A>B)=A1B1ˉ+(A1B1)A0B0ˉ(A>B) = A_1\bar{B_1} + (A_1 \odot B_1)A_0\bar{B_0}

실제 숫자로 검산: A=10(2)=2A=10_{(2)}=2, B=01(2)=1B=01_{(2)}=1을 비교한다. A1=1,B1=0A_1=1, B_1=0이므로 최상위 비트에서 이미 A1B1ˉ=11=1A_1\bar{B_1}=1 \cdot 1=1이 되어 조건 1이 성립하고, AgtBA gt B가 1로 판정된다. 실제로 2>12>1이므로 정확하다.

다른 예로 A=01(2)=1A=01_{(2)}=1, B=00(2)=0B=00_{(2)}=0을 비교한다. 최상위 비트는 A1=0,B1=0A_1=0, B_1=0으로 같으므로 조건 1은 0이다. A1B1=1A_1 \odot B_1 = 1(둘 다 0으로 같음)이고, 최하위 비트에서 A0=1,B0=0A_0=1, B_0=0이므로 A0B0ˉ=1A_0\bar{B_0}=1이다. 따라서 조건 2가 11=11 \cdot 1=1이 되어 A>B=1A>B=1로 판정된다. 실제로 1>01>0이므로 정확하다.

자주 틀리는 점: 각 자리를 독립적으로 비교해서 단순히 더하거나 곱하는 실수가 흔하다. 반드시 상위 자리가 같을 때만 하위 자리 비교 결과를 반영해야 한다(“상위 자리가 같음”을 보장하는 XNOR 항을 곱해야 한다). 이 조건을 빠뜨리면, 예를 들어 상위 자리에서 이미 AtBA t B로 판정 났는데도 하위 자리 비교 때문에 잘못된 결과가 나올 수 있다.

인코더: 여러 입력 중 켜진 것의 번호를 출력

인코더(encoder)는 여러 개의 입력선 중 정확히 하나만 1(활성화)일 때, 그 입력의 “번호”를 2진수로 압축해 출력하는 회로다. 예를 들어 8개의 입력 중 5번 입력선만 1이면, 인코더는 이를 3비트 2진수 101(2)101_{(2)}로 바꾸어 출력한다.

4-to-2 인코더

4개의 입력(I0,I1,I2,I3I_0, I_1, I_2, I_3) 중 하나만 1일 때, 그 번호를 2비트(Y1,Y0Y_1, Y_0)로 출력하는 인코더의 진리표는 다음과 같다.

I3I_3I2I_2I1I_1I0I_0Y1Y_1Y0Y_0
000100
001001
010010
100011

이 표에서 출력식을 뽑으면 Y1=I2+I3Y_1 = I_2 + I_3(2번 또는 3번 입력이 켜지면 상위 비트가 1), Y0=I1+I3Y_0 = I_1 + I_3(1번 또는 3번 입력이 켜지면 하위 비트가 1)가 된다.

우선순위 인코더: 여러 입력이 동시에 켜지는 현실 문제

기본 인코더의 치명적인 약점은 입력이 정확히 하나만 켜져 있다는 가정이다. 실제로는 여러 인터럽트 요청이 동시에 들어오는 것처럼, 두 개 이상의 입력이 동시에 1이 되는 상황이 흔하다. 이를 해결하는 것이 우선순위 인코더(priority encoder)로, 번호가 더 높은(또는 미리 정해둔 우선순위가 더 높은) 입력을 우선해서 인코딩한다.

I3I_3I2I_2I1I_1I0I_0Y1Y_1Y0Y_0비고
1XXX11I3I_3이 최우선
01XX10I3I_3이 0일 때만 I2I_2 확인
001X01I3,I2I_3, I_2가 0일 때만 I1I_1 확인
000100나머지가 모두 0일 때만 I0I_0 확인

표에서 X는 12편에서 배운 don’t care와 비슷하지만 여기서는 조금 다른 의미로 쓰인다. “이 자리의 값과 무관하게, 왼쪽에 있는 더 높은 우선순위 입력이 이미 1이므로 이 입력의 값은 결과에 영향을 주지 않는다”는 뜻이다. 예를 들어 I3=1I_3=1이면 I2,I1,I0I_2, I_1, I_0이 무엇이든 항상 Y1Y0=11Y_1Y_0=11이 출력된다.

쉽게 말하면: 우선순위 인코더는 “여러 사람이 동시에 손을 들어도, 가장 앞자리(가장 번호가 높은) 사람의 요청만 먼저 처리한다”는 규칙을 회로로 만든 것이다.

디코더: 2진수 번호를 받아 해당 출력선 하나만 켜기

디코더(decoder)는 인코더와 정반대의 일을 한다. nn비트 2진수 입력을 받아, 2n2^n개의 출력선 중 그 번호에 해당하는 출력선 하나만 1로 켜고 나머지는 모두 0으로 만든다.

2-to-4 디코더

2비트 입력 A1A0A_1A_0을 받아 4개의 출력 Y0,Y1,Y2,Y3Y_0, Y_1, Y_2, Y_3 중 하나만 켜는 디코더의 진리표는 다음과 같다(활성화를 위한 인에이블 입력 EE가 1일 때만 동작한다고 가정한다).

EA1A_1A0A_0Y3Y_3Y2Y_2Y1Y_1Y0Y_0
0XX0000
1000001
1010010
1100100
1111000

각 출력식은 입력 조합을 그대로 AND로 묶은 최소항 형태다. Y0=EA1ˉA0ˉY_0 = E\bar{A_1}\bar{A_0}, Y1=EA1ˉA0Y_1 = E\bar{A_1}A_0, Y2=EA1A0ˉY_2 = EA_1\bar{A_0}, Y3=EA1A0Y_3 = EA_1A_0. 디코더의 각 출력은 그 자체로 하나의 최소항(minterm)에 대응한다는 점이 중요한 특징이다. 이 성질 때문에 디코더는 “임의의 진리표를 표준 SOP 형태로 그대로 구현하는 부품”으로도 활용된다(원하는 출력이 1이 되어야 하는 최소항에 해당하는 디코더 출력선들을 OR 게이트로 묶으면 어떤 불 함수도 만들 수 있다).

자주 틀리는 점: 인코더와 디코더의 입출력 방향을 반대로 기억하는 실수가 매우 흔하다. 인코더는 “여러 입력 → 압축된 번호 출력”이고, 디코더는 “압축된 번호 입력 → 여러 출력 중 하나 켜짐”이다. 이름 자체가 “부호화(인코드)“와 “부호 풀기(디코드)“라는 반대 방향을 가리킨다는 점을 생각하면 헷갈리지 않는다.

멀티플렉서(MUX): 여러 입력 중 선택 신호로 하나를 고름

멀티플렉서(multiplexer, 다중화기, 흔히 MUX라고 줄여 부른다)는 여러 개의 데이터 입력 중, 별도의 선택 신호(select line)가 지정하는 하나만 골라 출력으로 내보내는 회로다.

4-to-1 MUX

데이터 입력 4개(I0,I1,I2,I3I_0, I_1, I_2, I_3)와 2비트 선택 신호(S1,S0S_1, S_0)를 가진 4-to-1 MUX의 동작은 다음과 같다.

S1S_1S0S_0출력
00I0I_0
01I1I_1
10I2I_2
11I3I_3

출력식은 각 데이터 입력에 그 입력이 선택되는 조건(최소항)을 곱해서 모두 더한 형태다.

Y=S1ˉS0ˉI0+S1ˉS0I1+S1S0ˉI2+S1S0I3Y = \bar{S_1}\bar{S_0}I_0 + \bar{S_1}S_0I_1 + S_1\bar{S_0}I_2 + S_1S_0I_3

실제 값 대입: I0=0,I1=1,I2=0,I3=1I_0=0, I_1=1, I_2=0, I_3=1이고 선택 신호 S1S0=10S_1S_0=10이라면, 표에 따라 I2I_2가 선택되어야 하므로 출력은 0이어야 한다. 식에 대입하면 S1S0ˉI2=110=0S_1\bar{S_0}I_2 = 1 \cdot 1 \cdot 0 = 0이고 나머지 항은 모두 S1,S0S_1, S_0 조건이 맞지 않아 0이 되므로, Y=0Y=0이 나와 정확히 일치한다.

쉽게 말하면: MUX는 “여러 채널 중 리모컨(선택 신호)이 가리키는 채널 하나만 화면(출력)에 내보내는 텔레비전”과 같다.

디멀티플렉서(DEMUX): 하나의 입력을 여러 출력 중 하나로 분배

디멀티플렉서(demultiplexer, DEMUX)는 MUX와 정반대로, 하나의 데이터 입력을 선택 신호가 지정하는 출력선 하나로만 내보내고 나머지 출력선은 0으로 만드는 회로다. 1-to-4 DEMUX는 데이터 입력 DD 하나와 선택 신호 S1,S0S_1, S_0을 받아, S1S0S_1S_0이 가리키는 출력 Y0Y3Y_0 \sim Y_3 중 하나에만 DD 값을 그대로 전달한다.

Y0=S1ˉS0ˉD,Y1=S1ˉS0D,Y2=S1S0ˉD,Y3=S1S0DY_0 = \bar{S_1}\bar{S_0}D, \quad Y_1 = \bar{S_1}S_0D, \quad Y_2 = S_1\bar{S_0}D, \quad Y_3 = S_1S_0D

이 식의 형태는 앞서 본 2-to-4 디코더의 출력식과 거의 같다. 실제로 DEMUX는 인에이블 입력 자리에 데이터 DD를 넣은 디코더와 동일한 구조다. 이 점 때문에 “디코더 겸용 DEMUX”라는 부품이 실제로 존재하며, 인에이블 핀에 상수 1을 넣으면 순수 디코더로, 데이터 신호를 넣으면 DEMUX로 동작한다.

코드 변환 회로: 이진-그레이 코드 변환

07편에서 배운 그레이 코드(인접한 두 값이 정확히 1비트만 달라지는 코드)로 일반 이진수를 바꾸는 변환 회로도 대표적인 조합논리회로다. nn비트 이진수 Bn1Bn2B0B_{n-1}B_{n-2}\cdots B_0을 그레이 코드 Gn1Gn2G0G_{n-1}G_{n-2}\cdots G_0로 바꾸는 규칙은 다음과 같다.

Gn1=Bn1G_{n-1} = B_{n-1} Gi=Bi+1Bi(i=n2,,0)G_i = B_{i+1} \oplus B_i \quad (i = n-2, \ldots, 0)

최상위 비트는 그대로 두고, 그 아래 각 자리는 자신과 바로 위 자리를 XOR한 값이 된다. 이 규칙은 “인접한 이진수 두 값은 항상 어떤 자리에서 자리올림이 발생해 여러 비트가 한꺼번에 바뀔 수 있지만, XOR로 만든 그레이 코드는 그 변화를 정확히 한 비트 차이로 압축한다”는 원리에 기반한다.

실제 숫자로 검산: 이진수 1010(2)1010_{(2)}을 그레이 코드로 바꿔 본다. B3B2B1B0=1010B_3B_2B_1B_0 = 1010.

  • G3=B3=1G_3 = B_3 = 1
  • G2=B3B2=10=1G_2 = B_3 \oplus B_2 = 1 \oplus 0 = 1
  • G1=B2B1=01=1G_1 = B_2 \oplus B_1 = 0 \oplus 1 = 1
  • G0=B1B0=10=1G_0 = B_1 \oplus B_0 = 1 \oplus 0 = 1

따라서 그레이 코드는 11111111이다. 회로로는 XOR 게이트 3개(최상위 비트를 제외한 나머지 각 자리마다 하나씩)만 있으면 몇 비트든 변환할 수 있다.

자주 틀리는 점: 그레이 코드 변환에서 모든 자리를 이웃한 이진수 비트끼리 XOR한다고 생각하면서 최상위 비트까지 XOR하려는 실수가 있다. 최상위 비트는 XOR 없이 그대로 옮긴다는 점을 놓치면 안 된다(최상위 비트보다 한 자리 위는 존재하지 않으므로 XOR할 대상이 없다).

이번 편 회로 요약 비교

회로입력출력핵심 동작
크기 비교기두 수 A, BA>B, A=B, A<B대소 관계 판정, 상위 자리부터 비교
인코더2n2^n개 입력선(하나만 활성)n비트 번호활성 입력의 번호를 압축
우선순위 인코더2n2^n개 입력선(여러 개 활성 가능)n비트 번호가장 우선순위 높은 입력만 인코딩
디코더n비트 번호(+ 인에이블)2n2^n개 출력선(하나만 활성)번호에 해당하는 출력선 하나만 켬
멀티플렉서(MUX)2n2^n개 데이터 + n비트 선택1개 출력선택 신호가 가리키는 입력을 그대로 출력
디멀티플렉서(DEMUX)1개 데이터 + n비트 선택2n2^n개 출력선택 신호가 가리키는 출력에만 데이터 전달

자주 틀리는 점 (종합)

  • 다중 비트 비교기에서 상위 자리 동률 조건(XNOR)을 곱하지 않는 실수: 하위 자리 비교는 반드시 상위 자리가 같을 때만 유효하다.
  • 인코더에 입력이 여러 개 동시에 켜질 수 있다는 점을 간과하는 실수: 기본 인코더는 입력이 하나만 켜진다는 전제가 있으므로, 실전에서는 우선순위 인코더를 써야 한다.
  • 인코더와 디코더의 입출력 방향을 뒤바꿔 기억하는 실수: 인코더는 여러 입력을 압축하고, 디코더는 압축된 값을 여러 출력으로 펼친다.
  • MUX 선택 신호의 비트 순서를 반대로 대입하는 실수: S1S0=10S_1S_0=10S1S0=01S_1S_0=01은 서로 다른 입력을 선택하므로, 어느 비트가 더 높은 자리인지 반드시 표기와 맞춰 확인해야 한다.
  • 그레이 코드 변환에서 최상위 비트까지 XOR하려는 실수: 최상위 비트는 원래 이진수 값을 그대로 옮긴다.

핵심 정리

  • 크기 비교기는 상위 자리부터 비교하며, 하위 자리 비교는 상위 자리가 같을 때만(XNOR 조건) 반영한다.
  • 인코더는 여러 입력을 번호로 압축하고(입력 하나만 활성 가정), 우선순위 인코더는 여러 입력이 동시에 켜져도 우선순위가 높은 것만 인코딩한다.
  • 디코더는 번호를 받아 해당 출력선 하나만 켜며, 각 출력은 하나의 최소항에 대응한다.
  • 멀티플렉서는 선택 신호로 여러 입력 중 하나를 고르고, 디멀티플렉서는 하나의 입력을 선택 신호가 지정하는 출력으로 분배한다(DEMUX는 인에이블 자리에 데이터를 넣은 디코더와 구조가 같다).
  • 이진-그레이 코드 변환은 최상위 비트를 그대로 두고, 나머지 자리는 자신과 바로 위 자리를 XOR해서 만든다.

마무리 복습

문제 14지선다
2비트 크기 비교기에서 상위 비트가 같을 때, 하위 비트 비교 결과를 최종 판정에 반영하는 방법은?
문제 24지선다
기본 인코더(우선순위 인코더가 아닌)의 전제 조건은?
문제 34지선다
디코더와 인코더의 관계를 올바르게 설명한 것은?
문제 44지선다
4-to-1 MUX에서 선택 신호 S1=1, S0=0일 때 출력되는 데이터 입력은?
문제 54지선다
1-to-4 디멀티플렉서(DEMUX)와 2-to-4 디코더의 구조적 관계로 옳은 것은?
문제 64지선다
이진수 1100을 그레이 코드로 변환한 결과는?

참고 자료

Last updated on