Altifigence Academy

16 / 63 · 개념

가산기와 캐리 전달 구조

전가산기 식을 유도하고 ripple-carry 구조의 동작과 필요한 비트 폭, 지연을 분석합니다.

한 비트의 합을 두 비트로 표현하기

ai,bi,cia_i,b_i,c_i를 더한 값은 0~3이므로 합 sis_i와 다음 자리 carry ci+1c_{i+1}가 필요합니다. 세 입력 중 홀수 개가 1이면 합 비트가 1이고, 둘 이상이 1이면 carry가 1입니다.

si=ai⊕bi⊕cis_i=a_i\oplus b_i\oplus c_i
ci+1=aibi+(ai⊕bi)cic_{i+1}=a_ib_i+(a_i\oplus b_i)c_i

gi=aibig_i=a_ib_i를 generate, pi=ai⊕bip_i=a_i\oplus b_i를 propagate라고 정의하면 ci+1=gi+picic_{i+1}=g_i+p_ic_i가 됩니다. 여기서 ++는 OR입니다. 반가산기는 carry 입력이 없는 특수한 경우이며 합은 XOR, carry는 AND입니다.

세 입력을 바꾸며 a+b+cin = sum+2×cout가 항상 성립하는지 확인하세요. carry는 다음 자리의 입력이 되며 sum과 같은 가중치의 비트가 아닙니다.

한 자리의 합과 다음 자리 캐리

a + b + cin = sum + 2 × cout

carry가 어디까지 지나가는가

4비트 1111 + 0001을 생각해 봅시다. bit 0에서 carry가 만들어지고 나머지 세 자리로 전달됩니다. 저장할 합은 0000, 최상위 carry는 1입니다. ripple-carry 구조에서는 높은 자리의 값을 계산하려면 낮은 자리의 carry가 도착할 때까지 기다려야 할 수 있습니다.

c2=g1+p1g0+p1p0c0c_2=g_1+p_1g_0+p_1p_0c_0

이처럼 식을 전개하면 carry를 병렬로 계산하는 방법을 찾을 수 있습니다. 실제 고속 가산기는 그룹별 propagate/generate 신호를 조합하지만, 팬인·배선·셀 라이브러리를 고려하면 면적과 지연 사이의 절충이 필요합니다. RTL의 +가 반드시 ripple-carry 회로 하나로 구현되는 것은 아닙니다.

합을 저장할 비트 폭 정하기

SystemVerilog
logic [3:0] a, b, sum;
logic cin, cout;
logic [4:0] wide_sum;
assign wide_sum = {1'b0, a} + {1'b0, b} + {4'b0000, cin};
assign sum = wide_sum[3:0];
assign cout = wide_sum[4];

15+15+1=3115+15+1=31까지 표현하므로 5비트면 충분합니다. 합의 하위 비트만 필요한지, carry가 다음 단계로 전달되는지, 포화가 필요한지를 먼저 결정하세요. 이 강의의 실습에서는 전가산기 한 자리의 진리표진리표 가능한 입력 조합을 빠짐없이 나열하고 각 조합의 출력을 적은 표입니다. 시간에 따른 변화는 파형으로 따로 확인합니다. 자세히 보기를 확인합니다. 실제 합성 결과의 지연을 측정하는 실습은 아닙니다.

입력을 바꿔 확인하기

직접 생각해 보기

4비트 unsigned에서 a=9a=9, b=6b=6, cin=1c_{in}=1일 때 전체 합·4비트 합·carry를 구하세요. 같은 회로를 signed 덧셈으로 해석해도 carry만으로 overflow를 판단할 수 있을까요?

해설 보기

전체 합은 16, 비트열은 10000이므로 sum=0000, carry=1입니다. signed로 해석하면 1001은 -7이므로 −7+6+1=0-7+6+1=0이며 범위 안입니다. carry와 signed overflow는 다른 조건입니다.

선택은 이 브라우저에만 적용됩니다. 언제든 푸터에서 변경할 수 있습니다.