본문 바로가기

가산기·MUX·디코더

반가산기·전가산기와 MUX·디코더·비교기의 입력·출력을 계산하고 선택 신호를 해석합니다.

CPU의 덧셈과 입력 선택은 작은 회로를 조합해 만들 수 있습니다. 조합논리회로는 현재 입력만으로 안정된 출력이 결정되는 회로입니다. 이전 값을 기억하는 요소는 다음 장에서 추가합니다.

한 비트 덧셈에서 여러 비트 덧셈으로

반가산기는 A·B를 더해 합 S=A XOR B, 자리올림 C=AB를 냅니다. 1+1은 합 0·자리올림 1입니다. 전가산기는 아래 자리의 자리올림 Cin까지 세 입력을 더합니다. S=A XOR B XOR Cin, Cout=AB + Cin(A XOR B)입니다.

ABCinSCout
00000
00110
01010
01101
10010
10101
11001
11111

4개의 전가산기를 연결해 아래 자리 Cout을 다음 자리 Cin에 보내면 4비트 리플 캐리 가산기입니다. 0111+0001은 낮은 자리부터 자리올림이 전파돼 1000입니다. 모든 자리가 즉시 동시에 안정된다고 가정하지 마세요. 캐리 전파가 지연 경로가 될 수 있습니다.

0111 + 0001의 자리올림을 추적합니다

1+1+Cin을 더한다(Cin=0). 0+0+Cin을 더한다(Cin=1). 각 단계의 값과 전환 이유를 비교합니다.

컴퓨터구조 · 읽는 순서

0111 + 0001의 자리올림을 추적합니다

bit 0부터 bit 3까지 따라갑니다. S는 해당 자리 합, C는 다음 자리로 보낼 carry입니다.

4비트 리플 캐리 가산0111과 0001을 낮은 자리부터 더하면 세 번의 자리올림을 거쳐 결과 1000과 최종 carry 0을 얻습니다.bit 0A=1, B=1Cin0 → S0, C1bit 1A=1, B=0Cin1 → S0, C1bit 2A=1, B=0Cin1 → S0, C1bit 3A=0, B=0Cin1 → S1, C0오른쪽 화살표: 다음 자리로 전달하는 carry낮은 자리부터 S = 0, 0, 0, 1 → 결과 1000
4비트 리플 캐리 가산0111과 0001을 낮은 자리부터 더하면 세 번의 자리올림을 거쳐 결과 1000과 최종 carry 0을 얻습니다.
bit 0: A=1, B=1Cin=0 → S=0, C=1
연결 관계bit 0: A=1, B=1 · Cin=0 → S=0, C=1 → bit 1: A=1, B=0 · Cin=1 → S=0, C=1
bit 1: A=1, B=0Cin=1 → S=0, C=1
연결 관계bit 1: A=1, B=0 · Cin=1 → S=0, C=1 → bit 2: A=1, B=0 · Cin=1 → S=0, C=1
bit 2: A=1, B=0Cin=1 → S=0, C=1
연결 관계bit 2: A=1, B=0 · Cin=1 → S=0, C=1 → bit 3: A=0, B=0 · Cin=1 → S=1, C=0
bit 3: A=0, B=0Cin=1 → S=1, C=0

낮은 자리부터 S=0,0,0,1결과 1000

화살표는 각 전가산기의 Cout을 다음 전가산기의 Cin으로 전달합니다. 이 예제의 최종 carry는 0입니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 비트 0부터 비트 3까지 진행합니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
비트 0

1+1+Cin을 더한다(Cin=0).

  • 비트·carry 1: S0=0,Cout=1
  • 캐리 1을 비트 1에 전달
비트 1

1+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S1=0,Cout=1
  • 캐리 1을 비트 2에 전달
비트 2

1+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S2=0,Cout=1
  • 캐리 1을 비트 3에 전달
비트 3

0+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S3=1,Cout=0
  • 비트·carry 2: 결과 1000
  • 최상위 합 안정

0111 + 0001의 자리올림을 추적합니다

1+1+Cin을 더한다(Cin=0). 0+0+Cin을 더한다(Cin=1). 각 단계의 값과 전환 이유를 비교합니다.

컴퓨터구조 · 읽는 순서

0111 + 0001의 자리올림을 추적합니다

bit 0부터 bit 3까지 따라갑니다. S는 해당 자리 합, C는 다음 자리로 보낼 carry입니다.

4비트 리플 캐리 가산0111과 0001을 낮은 자리부터 더하면 세 번의 자리올림을 거쳐 결과 1000과 최종 carry 0을 얻습니다.bit 0A=1, B=1Cin0 → S0, C1bit 1A=1, B=0Cin1 → S0, C1bit 2A=1, B=0Cin1 → S0, C1bit 3A=0, B=0Cin1 → S1, C0오른쪽 화살표: 다음 자리로 전달하는 carry낮은 자리부터 S = 0, 0, 0, 1 → 결과 1000
4비트 리플 캐리 가산0111과 0001을 낮은 자리부터 더하면 세 번의 자리올림을 거쳐 결과 1000과 최종 carry 0을 얻습니다.
bit 0: A=1, B=1Cin=0 → S=0, C=1
연결 관계bit 0: A=1, B=1 · Cin=0 → S=0, C=1 → bit 1: A=1, B=0 · Cin=1 → S=0, C=1
bit 1: A=1, B=0Cin=1 → S=0, C=1
연결 관계bit 1: A=1, B=0 · Cin=1 → S=0, C=1 → bit 2: A=1, B=0 · Cin=1 → S=0, C=1
bit 2: A=1, B=0Cin=1 → S=0, C=1
연결 관계bit 2: A=1, B=0 · Cin=1 → S=0, C=1 → bit 3: A=0, B=0 · Cin=1 → S=1, C=0
bit 3: A=0, B=0Cin=1 → S=1, C=0

낮은 자리부터 S=0,0,0,1결과 1000

화살표는 각 전가산기의 Cout을 다음 전가산기의 Cin으로 전달합니다. 이 예제의 최종 carry는 0입니다.

이 예의 조건

  • 본문과 전체 도표의 예를 따라 비트 0부터 비트 3까지 진행합니다.
예의 값과 변화
관찰·상황값·보충 정보변화·이유
비트 0

1+1+Cin을 더한다(Cin=0).

  • 비트·carry 1: S0=0,Cout=1
  • 캐리 1을 비트 1에 전달
비트 1

1+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S1=0,Cout=1
  • 캐리 1을 비트 2에 전달
비트 2

1+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S2=0,Cout=1
  • 캐리 1을 비트 3에 전달
비트 3

0+0+Cin을 더한다(Cin=1).

  • 비트·carry 1: S3=1,Cout=0
  • 비트·carry 2: 결과 1000
  • 최상위 합 안정

선택과 해독

멀티플렉서(MUX)는 여러 입력 중 하나를 선택합니다. 2:1 MUX는 선택 s=0이면 D0, s=1이면 D1을 출력합니다. 식은 Y = ¬s D0 + s D1입니다. 4:1 MUX는 입력 4개 중 하나를 선택하므로 선택 비트 2개가 필요합니다.

디코더는 n비트 입력을 최대 2ⁿ개 선택 선으로 해독합니다. 활성화된 2:4 디코더에서 입력 10이면 출력 Y2 하나만 1입니다. 인코더는 반대로 활성 입력 위치를 코드로 표현합니다. 여러 입력이 동시에 1이면 일반 인코더의 가정이 깨지므로 우선순위 인코더와 구분합니다. 디멀티플렉서는 하나의 입력 데이터를 선택된 출력 경로로 보냅니다.

비교기는 같음·작음·큼을 출력할 수 있습니다. 같음은 비트별 XNOR를 AND로 묶어 판단할 수 있습니다. 크기 비교는 높은 자리에서 처음 다른 비트가 무엇인지 봅니다. 부호 있는 비교에서는 부호 해석도 포함해야 합니다.

from itertools import product

for a, b, carry in product((0, 1), repeat=3):
    total = a + b + carry
    s = a ^ b ^ carry
    out = (a & b) | (carry & (a ^ b))
    assert total == 2 * out + s
for s, d0, d1 in product((0, 1), repeat=3):
    y = ((1 - s) & d0) | (s & d1)
    assert y == (d0 if s == 0 else d1)

독립 문제: 입력 선택 뒤의 덧셈

4비트 가산기의 A 입력은 6입니다. B 입력 앞의 MUX는 s=0이면 3, s=1이면 10을 선택합니다. 각 s에서 수학 합·저장된 하위 4비트·자리올림을 구하세요. 8개 입력 중 하나를 고르는 MUX에는 선택 비트가 몇 개 필요한지도 쓰세요.

힌트

선택이 먼저이고 덧셈이 다음입니다. 4비트의 부호 없는 최댓값은 15입니다.

풀이

s=0에서는 6+3=9=1001, 자리올림 0입니다. s=1에서는 6+10=16=10000, 저장값 0000, 자리올림 1입니다. 입력 8개 중 하나를 선택하려면 3비트가 필요합니다. MUX가 입력을 더하는 회로라는 설명은 틀립니다. 값을 고르는 회로이고 계산은 뒤의 ALU가 맡습니다.

덧셈 패턴을 음수로 읽었다면 부호와 넘침을 복습하세요. 다음 플립플롭은 이 계산 결과를 특정 시점에 기억하는 방법입니다.