16 / 63 · 개념
가산기와 캐리 전달 구조
전가산기 식을 유도하고 ripple-carry 구조의 동작과 필요한 비트 폭, 지연을 분석합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
한 비트의 합을 두 비트로 표현하기
를 더한 값은 0~3이므로 합 와 다음 자리 carry 가 필요합니다. 세 입력 중 홀수 개가 1이면 합 비트가 1이고, 둘 이상이 1이면 carry가 1입니다.
를 generate, 를 propagate라고 정의하면 가 됩니다. 여기서 는 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가 도착할 때까지 기다려야 할 수 있습니다.
이처럼 식을 전개하면 carry를 병렬로 계산하는 방법을 찾을 수 있습니다. 실제 고속 가산기는 그룹별 propagate/generate 신호를 조합하지만, 팬인·배선·셀 라이브러리를 고려하면 면적과 지연 사이의 절충이 필요합니다. RTL의 +가 반드시 ripple-carry 회로 하나로 구현되는 것은 아닙니다.
합을 저장할 비트 폭 정하기
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];까지 표현하므로 5비트면 충분합니다. 합의 하위 비트만 필요한지, carry가 다음 단계로 전달되는지, 포화가 필요한지를 먼저 결정하세요. 이 강의의 실습에서는 전가산기 한 자리의 진리표진리표 가능한 입력 조합을 빠짐없이 나열하고 각 조합의 출력을 적은 표입니다. 시간에 따른 변화는 파형으로 따로 확인합니다. 자세히 보기를 확인합니다. 실제 합성 결과의 지연을 측정하는 실습은 아닙니다.
입력을 바꿔 확인하기
직접 생각해 보기
4비트 unsigned에서 , , 일 때 전체 합·4비트 합·carry를 구하세요. 같은 회로를 signed 덧셈으로 해석해도 carry만으로 overflow를 판단할 수 있을까요?
해설 보기
전체 합은 16, 비트열은 10000이므로 sum=0000, carry=1입니다. signed로 해석하면 1001은 -7이므로 이며 범위 안입니다. carry와 signed overflow는 다른 조건입니다.