최근 수정 시각 : 2024-12-14 19:53:54

가산기

'''[[전기전자공학과|전기·전자공학
{{{#!wiki style="font-family: Times New Roman, serif; font-style: Italic; display: inline;"
]]'''
{{{#!wiki style="margin:0 -10px -5px; min-height: 26px; word-break:keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-6px -1px -11px"
<colbgcolor=#009><colcolor=#fff> 학문 기반 학문
물리학 (전자기학 (회로이론 · 전자 회로 · 논리 회로) · 양자역학 · 물리화학 · 열역학 · 응집물질물리학) · 화학
연관 학문
수학 (공업수학 · 수치해석학 · 위상수학 · 미분방정식 · 대수학 (환론 · 표현론) · 선형대수학 · 이론 컴퓨터 과학 · 컴퓨터공학 (프로그래밍 언어 (HDL · VHDL · C · C++ · Java · 파이썬 · 베릴로그)) · 재료공학 · 제어 이론
공식 · 법칙 전자기 유도 · 가우스 법칙 · 비오-사바르 법칙 · 무어의 법칙 · 키르히호프의 법칙 · 맥스웰 방정식 · 로런츠 힘 · 앙페르 법칙 · 드모르간 법칙 · 페르미 준위 · 중첩의 원리
이론 · 연구 반도체 (P형 반도체 · N형 반도체) · 디스플레이 · 논리 회로 (보수기 · 가산기 · 플립플롭 · 논리 연산) · 전자 회로 · RLC 회로 · 역률 · DSP · 히스테리시스 곡선 · 휘트스톤 브리지 · 임베디드 시스템
용어 클럭 · ASIC · CPU 관련 (BGA · 마이크로아키텍처 · GPS · C-DRX · 소켓) · 전계강도계 · 축전기 · CMCI · 전송선 · 양공 · 도핑 · 이미터 · 컬렉터 · 베이스 · 시퀀스
전기 · 전자
관련 정보
제품
스마트폰 · CPU · GPU (그래픽 카드) · ROM · RAM · SSD · HDD · MPU · CCD · eMMC · USB · UFS · LCD · LED · OLED · AMOLED · IoT · 와이파이 · 스마트 홈 · 마그네트론 · 마이크 · 스피커 · 배터리
소자
집적 회로 · 다이오드 · 진공관 · 트랜지스터 (BJT · FET · JFET · MOSFET · T-FT) · CMOS · IGBT · 저항기 · 태양전지 · 연산 증폭기 · 사이리스터 · GTO · 레지스터 · 펠티어 소자 · 벅컨버터
자격증
전기 계열 기능사
전기기능사 · 철도전기신호기능사
기사
전기기사 · 전기산업기사 · 전기공사기사 · 전기공사산업기사 · 전기철도기사 · 전기철도산업기사 · 철도신호기사 · 철도신호산업기사
기능장 및 기술사
전기기능장 · 건축전기설비기술사 · 발송배전기술사 · 전기응용기술사 · 전기안전기술사 · 철도신호기술사 · 전기철도기술사
전자 계열 기능사
전자기기기능사 · 전자계산기기능사 · 전자캐드기능사
기사
전자기사 · 전자산업기사 · 전자계산기기사 · 전자계산기제어산업기사
기능장 및 기술사
전자기기기능장 · 전자응용기술사
기타 기능사
신재생에너지발전설비기능사(태양광)
기사
소방설비기사 · 신재생에너지발전설비기사(태양광) · 로봇소프트웨어개발기사 · 로봇하드웨어개발기사 · 로봇기구개발기사
}}}}}}}}}


[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)

1. 설명2. 대표적 종류
2.1. 1비트 가산기
2.1.1. 반가산기2.1.2. 전가산기
2.2. 멀티 비트 가산기
2.2.1. 리플 캐리 가산기2.2.2. 자리 올림 예측 가산기2.2.3. 자리 올림 저장 가산기2.2.4. 그 외 다양한 가산기2.2.5. ALU(Arithmetic Logic Unit)
3. 계산기와의 차이

1. 설명

/ adder

가산기는 덧셈 연산을 수행하는 회로 또는 장치다. 디지털 전자식 계산 장치의 모든 수학 연산에 사용되는 기초적인 회로다. CPU를 비롯한 연산 제어 장치는 가산기와 같은 여러 종류의 회로로 구성된다.

디지털이 아닌 아날로그 회로에서도 가산기 혹은 가산 증폭기라 부르는 회로가 있는데, 입력 전압을 적절히 스케일링해서 더해주는 연산을 수행한다.[1]

2. 대표적 종류

논리 회로를 공부하다 보면 대표적으로 보게되는 몇몇 종류가 있다. 대표적으로는 반가산기, 전가산기, 리플 캐리 가산기, 자리 올림 예측 가산기(carry-lookahead adder), 자리 올림 저장 가산기(carry save adder) 등이 있다.

2.1. 1비트 가산기

2.1.1. 반가산기

파일:나무_반가산기_수정.svg 파일:나무_반가산기_NAND_수정.svg
기본 구조 NAND로만 구성한 반가산기
half adder라고 부르는 가장 간단한 형태의 가산기로, 진리표에서 sum 부분은 A와 B의 XOR을 따르며 carry는 AND를 따른다.
캐리 올림이 없는 특수한 경우에만 사용할 수 있기에, 실제로 이 형태로는 거의 사용되지 않는다.

AND 게이트로 들어오는 입력 하나에 NOT 게이트를 달면 반감산기가 된다. 반가산기와는 반대로 뺄셈을 수행한다.
파일:나무_반감산기.svg
반감산기

2.1.2. 전가산기

파일:나무_전가산기.svg
파일:나무_전가산기_NAND.svg
위: 기본 구조 / 아래: NAND로만 구성한 전가산기
하단에 언급되는 모든 멀티 비트 가산기의 기본이 되는 회로이다. 반가산기 2개와 OR 게이트 1개로 구성이 가능한 가산기로, 하위에서 올라온 자리 올림수를 포함하여 계산하는 것으로, 진리표가 복잡하다고 느낄 수 있지만 그냥 2진수 연산을 한다고 생각하면 쉽게 기억할 수 있다. A, B, 그리고 하위 자리 올림수를 모두 0, 1이라는 이진수의 숫자로 보고 그 산술합을 계산해서 0이면 S도 0, C도 0이고, 1이면 S는 1, C는 0, 2(이진수로 10)이면 S는 0, C는 1, 3(이진수로 11)이면 S는 1, C도 1이 되는 형식. 즉, C는 둘째 자리, S는 첫째 자릿수를 따른다고 생각하면 편하다. 사실 sum과 carry의 정의를 생각하면 당연하다. 진리표를 포함해 그림으로 좀 더 도식화한 형태는 다음과 같다.

파일:3-8-5.png

온전하게 이진수 한 자릿수의 덧셈 연산이 가능하기에 full adder(전가산기)라고 부른다. 좀 더 일반적이게는 3개의 입력 중 1이 몇 개가 있는지 카운팅한 후 그 결괏값을 2비트 바이너리 수로 출력하는 회로이기 때문에 (3,2) counter라고도 부른다.[2]
S = A \oplus B \oplus C_{\sf in} </math>
C_{\sf out} = (A \cdot B) + (C_{\sf in} \cdot (A \oplus B)) = (A \cdot B) + (A \cdot C_{\sf in}) + (B \cdot C_{\sf in}) </math>

반감산기와 마찬가지로, AND 게이트들로 들어오는 A 입력과 첫번째 XOR의 출력 앞에 NOT 게이트를 달면 전감산기가 된다.
파일:나무_전감산기.svg
전감산기

2.2. 멀티 비트 가산기

컴퓨터는 8비트, 16비트, 32비트, 64비트 등의 데이터 단위로 움직이기에, 가산기도 이에 대응하여 멀티 비트를 처리할 수 있어야 한다. 기본적으로 전가산기를 여러 개 묶어서 사용한다.

2.2.1. 리플 캐리 가산기

ripple-carry adder

전가산기를 여러 개 합쳐서 임의의 비트 수 연산이 가능하게 구성한 회로로 구조가 간단하다. 구성은 매우 간단한데, 각 비트를 전가산기로 구성한 다음, 다음 자리의 올림수로 이전 자리 전가산기의 2번째 자릿수를 쓴다. 초등학교에서 덧셈을 배울 때 자릿수 하나하나마다 계산을 하고 자리 올림을 하는 것과 같다.

그러나 비트 수가 길수록 아랫자리에서 올림수가 있는지에 대한 판단을 먼저 선행해야 하므로 연산이 느려지는 단점이 있다. 예를 들어 32bit 덧셈을 리플 캐리로 수행할 경우, 2번째 자리를 계산하기 위해서는 1번째 자리의 올림수가 계산되어야 하고, 3번째 자리를 계산하기 위해서는 2번째 자리의 올림수가 계산되어야 하고 그걸 하기 위해서 1번째 자리의 올림수가 또 계산되어야 하고...... 하는 과정이 반복되어 결국 32번째 자리의 경우 자리 올림을 31번이나 반복해야 하기 때문에 속도가 굉장히 느려진다.

2.2.2. 자리 올림 예측 가산기

carry-lookahead adder

리플 캐리 가산기는 자릿수가 많으면 자리 올림(캐리) 계산이 느려지는 문제가 있기에, 캐리를 별도의 로직으로 미리 계산해서 처리하는 방식이다. 별도의 회로가 필요하지만, 처리를 위해 거쳐야 할 게이트 수(critical path)는 그만큼 줄어드므로 계산 속도는 그만큼 빨라진다.

자리 올림 예측 가산기의 원리는 다음과 같다. 캐리가 C인 가산기가 임의의 두 비트(A, B)를 입력받았을 때 여기에서 자리 올림(캐리)이 발생할 가능성을 생각해 보자. 비트가 둘 다 1일 경우 캐리로 뭐가 들어오든 100% 캐리가 발생한다. 비트 둘 중 하나가 1이고 다른 하나가 0일 경우 다음에 들어오는 캐리에 따라 캐리가 발생할 가능성이 생긴다. 이 둘을 각각 G(Generation), P(Propagation)라고 지정하여 G = A and B, P = A xor B로 설계할 수 있다. 이 경우 캐리가 발생할 가능성은 G가 1이거나, 혹은 P와 C가 둘 다 1인 경우이므로 이 가산기에서 생성되는 캐리는 G or (P and C)라고 예측할 수 있다. 이때 모든 자릿수의 G와 P를 한꺼번에 입력받는 carry-lookahead 회로를 만들어, 입력받은 G와 P로 캐리를 생성한다.
G_{\sf n} = A_{\sf n} \cdot B_{\sf n} / P_{\sf n} = A_{\sf n} \oplus B_{\sf n} </math>
C_{\sf n+1} = G_{\sf n} + P_{\sf n} \cdot C_{\sf n} = G_{\sf n} + P_{\sf n} \cdot (G_{\sf n-1} + P_{\sf n-1} \cdot C_{\sf n-1}) = G_{\sf n} + P_{\sf n} \cdot G_{\sf n-1} + P_{\sf n} \cdot P_{\sf n-1} \cdot C_{\sf n-1}.......</math>
C_{\sf n+1} = G_{\sf n} + \sum_{\sf k=1}^{\sf n} G_{\sf k} \prod_{\sf j=k}^{\sf n} P_{\sf j} + C_{\sf 0} \cdot \prod_{\sf i=0}^{\sf n} P_{\sf j}

얼핏 보면 복잡해 보이지만 일괄 XOR 회로 처리는 2 gate 만에 할 수 있으므로 리플 캐리 가산기에서는 n bit의 캐리 계산을 위해 3n 번의 gate를 거쳐야 했던 것과 달리 자리 올림 예측 가산기에서는 비트가 몇이든 P를 계산하기 위한 3 gate + C를 계산하기 위한 3 gate = 6 gate로 캐리 계산을 마칠 수 있다.

2.2.3. 자리 올림 저장 가산기

carry save adder

두 수의 각각의 비트는 전가산기를 거치게 하고, 이 중간 결과를 리플 캐리 가산기로 돌려서 최종 결과를 뽑아내는 방식이다.

이 자체로는 크게 성능 향상이 있다고 할 순 없지만, CSA는 피연산자가 여러 개일 때는 병렬성을 이용해서 계산 성능을 크게 향상시킬 수 있다는 장점이 있다. 특히 곱셈 연산을 하려면 피연산자가 여러 개인 덧셈 연산을 해야 하기 때문에 곱셈기를 설계할 때 중요하게 다뤄지는 가산기이다. 대표적인 최적화 방식으로 Wallace tree가 있다.

2.2.4. 그 외 다양한 가산기

문서 참조
비트 수가 32비트나 64비트 정도 되면 리플 캐리 가산기로는 답이 없고, CLA를 사용하려 해도 carry-lookahead 로직이 너무 복잡해져서 배보다 배꼽이 더 큰 상황이 발생한다. carry-lookahead 로직을 블록 단위로 쪼갠 뒤, 이를 다단계로 구성하는 방법을 사용해서 성능을 향상시키는 등 여러 방안이 제시되었다.

2.2.5. ALU(Arithmetic Logic Unit)

파일:external/upload.wikimedia.org/400px-4-bit_ripple_carry_adder-subtracter.svg.png
컴퓨터에서 뺄셈 연산은 '2의 보수'를 이용하여 구현하는데, 이 특성을 이용하면, 간단한 로직만 추가하며 가산기를 감산기로 사용하는 것이 가능하다. 이뿐만 아니라 1을 증가시키거나(INC), 1를 감소하는 연산(DEC), AND / OR / NOT / XOR 연산, 시프트 / 로테이트 연산 등을 조합하여 계산 전용 로직을 만들 수 있다. 실제로 컴퓨터에서는 곱셈, 나눗셈 등의 다양한 연산을 하나의 로직에서 모두 처리해 버리는데 이를 ALU(Arithmetic Logic Unit)라고 부른다.

원래는 ALU는 원래 정수 연산만 취급했고, 실수 연산은 여러 번의 정수 연산으로 나눠서 처리했었다. 그런데 이렇게 하면 성능 문제가 발생하니, 실수 연산을 위한 전용 모듈을 탑재하는데 이것이 FPU(floating-point unit)이다. 참고로, 인텔의 80386 CPU 에는 FPU가 없었으며, 별도의 FPU coprocessor인 '80387'을 추가 장착 해야 했다. 그 이후 나온 80486부터는 FPU가 coprocessor로서 기본 장착 되었고, 다음 세대인 펜티엄부터 CPU 안에 내장되었다.

멀티코어 프로세서는 이 ALU가 복수 장착되어 있으며, SMT를 이용해서 한 ALU에 여러 연산을 처리할 수도 있다.

3. 계산기와의 차이

가산기는 2진수의 덧셈에 사용되는 논리 회로로, 기(器)라는 한자가 들어가기는 하나 독립적으로 작동하는 기계를 말하는 것이 아니다. 버튼으로 숫자를 입력하는 기계인 계산기와는 전혀 다른 것이다. 물론 전자식 계산기의 논리 회로 중에 가산기가 반드시 포함되어 있다.
  • 물리적인 차이
    • 계산기는 완제품으로서 물리적인 크기를 가진다.
    • 가산기는 논리 회로로서 정해진 크기가 없는 가상적인 개념이다. 실제로는 어떤 형태로도 만들 수 있다.
  • 하는 연산과 목적이 다르다.
    • 계산기는 덧셈, 곱셈 등 다양한 명령을 받아 그 결과를 출력한다.
    • 가산기는 일련의 연산에 필요한 덧셈 연산을 수행하여 결괏값을 반환한다.
      연산 회로의 일부분으로 사용되므로 가산기에 직접 덧셈 명령을 내리는 것은 불가능하다.


[1] 합주실이나 방송 장비 같은 곳에서 볼 수 있는 오디오 믹서가 그것의 일종이다.[2] 같은 논리로 반가산기는 (2,2) counter라고 부를 수 있으며, 그 외에도 (7,3) counter, (4;2) compressor, (7;2) compressor, (15,4) counter, (5,5,2) counter와 같은 회로들이 존재하며, 자리 올림 저장 가산기(CSA)에서 중요하게 다뤄진다.

분류