스킬캠퍼스

오늘 끝나면

여러 비트 덧셈·뺄셈

  • 여러 비트 덧셈·뺄셈의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 여러이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

자리올림 전파·2의 보수·오버플로우 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 07

여러 비트
덧셈·뺄셈

전가산기 하나는 한 자리만 더한다.
줄줄이 이어 자리올림을 옆으로 넘기면 여러 비트가 더해진다.
뺄셈은 따로 만들지 않는다. 2의 보수를 더하면 된다.

P.01반도체 설계 · 07

전가산기를 줄줄이 잇는다

전가산기 하나는 A·B·carry-in 세 비트를 받아 Sum 한 비트와 carry-out 한 비트를 낸다. 딱 한 자리만 처리한다.

여러 비트를 더하려면 전가산기를 자리 수만큼 깐다.
그리고 한 칸의 carry-out을 옆 칸의 carry-in으로 꽂는다.
이렇게 자리올림이 물 흐르듯 옆으로 넘어가서 리플 캐리(ripple = 잔물결) 가산기라 부른다.

맨 오른쪽(LSB) 칸의 carry-in은 보통 0이다.
맨 왼쪽(MSB) 칸의 carry-out이 자리 넘침(올림) 여부를 알려준다.
기본 머신은 16비트라 전가산기 16개를 같은 방식으로 잇는다.

4비트 = 전가산기 4개 · carry로 연결
리플 캐리, 전가산기 4개 사슬
A3B3FAbit3S3A2B2FAbit2S2A1B1FAbit1S1A0B0FAbit0S0Cin=0Cout
한 칸의 carry-out이 옆 칸 carry-in으로 들어간다. 파란 화살표가 자리올림이다.
P.02반도체 설계 · 07

2의 보수로 음수를 만든다

뺄셈 회로를 따로 만들지 않는다. 음수를 더하면 그게 곧 뺄셈이다.

음수를 표현하는 약속이 2의 보수다.
모든 비트를 반전하고(1의 보수) 1을 더하면 그 수의 음수가 된다.
예로 4비트에서 0011(3)을 반전하면 1100, +1 하면 1101, 즉 −3이다.

이 약속의 좋은 점은 더하기 회로를 그대로 쓴다는 것이다.
맨 위 비트(MSB)가 1이면 음수로 읽는다. 4비트는 −8부터 7까지, 16비트는 −32768부터 32767까지 범위다.
0은 표현이 하나뿐이라 깔끔하다.

비트 반전 + 1 = 부호 뒤집기
2의 보수, 3 → −3 만들기
원래 수0011
= 3 (무부호·부호 같음)
비트 반전1100
1의 보수 (NOT)
+ 11101
2의 보수 = −3
4비트 부호 범위

0000=0 · 0111=7 · 1000=−8 · 1111=−1

MSB가 1이면 음수 · 0은 하나뿐

P.03반도체 설계 · 07

뺄셈 = 보수를 더하기

A − BA + (B의 2의 보수)와 같다.

B의 2의 보수는 ‘B 반전 + 1’이다.
그 +1은 가산기 맨 오른쪽 칸의 carry-in에 1을 넣어 더한다.
그래서 뺄셈은 B를 반전하고 시작 carry를 1로 두기만 하면 된다.

여기서 carry와 borrow가 갈린다.
무부호 뺄셈에서 결과의 carry-out이 1이면 빌림이 없고, 0이면 빌림이 발생한다(B가 더 크다). borrow는 carry를 뒤집어 읽은 것뿐이다.
ADD 회로 한 종류에 반전기와 모드 스위치만 붙이면 더하기와 빼기를 다 처리한다.

A − B → A + (¬B) + 1
뺄셈 7 − 5 = A + ¬B + 1
비트설명
A01117
¬B1010B=0101 반전
Cin+1시작 carry
=0010결과 2 · Cout 1이면 빌림 없음
더하기 회로 그대로 + B 반전 + 시작 carry 1
P.04반도체 설계 · 07

직접 자리올림을 흘려 본다

A·B를 정하고 결과를 먼저 예측한 뒤 carry를 한 칸씩 흘려본다.

STEP은 bit0부터 한 자리씩 확정한다. carry가 옆 칸으로 넘어간다.
모드를 A − B로 바꾸면 B가 반전되고 시작 carry가 1이 된다.

더할 때 자리가 넘치면 CARRY, 뺄 때 빌리면 BORROW, 부호가 깨지면 OVERFLOW 깃발이 켜진다.

4비트 가산기 · Step/Auto
4비트 리플 캐리 가산기 · carry 전파
A01106
B01015
carry····0
A0110
+ B0101
Sum····
예측 먼저, 결과가 몇일까?
속도보통
근거, bit별 Sum·Carry
bitCinABSumCout
0·····
1·····
2·····
3·····

carry가 bit0에서 bit3로 한 칸씩 흐른다. 이 전파 시간이 가산기 속도의 한계다.

P.05반도체 설계 · 07

부호 오버플로우와 전파 지연

두 가지 한계를 알아야 한다. 결과가 틀리는 경우인 오버플로우와, 느려지는 이유인 전파 지연이다.

부호 오버플로우는 결과가 부호 범위를 벗어났을 때 생긴다.
같은 부호 둘을 더했는데 부호가 뒤집히면 오버플로우다. 예로 4비트에서 7+1=1000은 −8로 읽혀 틀린다.
판정은 간단하다. MSB로 들어간 carry와 MSB에서 나온 carry가 다르면 오버플로우다.

그리고 carry가 bit0에서 MSB로 한 칸씩 가야 하므로, 비트가 많을수록 전파에 시간이 더 걸린다.
이 전파 지연이 리플 가산기의 속도 한계다. 그래서 빠른 칩은 carry를 미리 계산하는 carry-lookahead를 쓴다.
속도를 높이려면 면적이 늘어난다. 둘 사이의 트레이드오프가 ALU 설계의 핵심이다.

Q. 2의 보수 체계에서 A − B는 어떻게 계산하나?정답은 빼는 수 B의 2의 보수를 더한다이다.
B의 모든 비트를 반전하고 1을 더한 게 −B의 표현이다.
그 +1은 가산기 맨 오른쪽 carry-in에 1을 넣어 처리한다. 그래서 더하기 회로 하나로 뺄셈까지 된다.
오버플로우 조건 · 속도 한계
부호 오버플로우, 7 + 1
01117
+ 00011
1000−8 (틀림!)
판정, MSB carry 비교
MSB로 들어간 carry = 1
MSB에서 나온 carry = 0

둘이 다르면 OVERFLOW

전파 지연

carry: bit0 ▸ bit1 ▸ bit2 ▸ bit3 ... 줄이 길수록 느림

속도 한계는 carry-lookahead로 해결

3줄 요약

  1. 1자리올림 전파·2의 보수·오버플로우
  2. 2여러 비트 덧셈·뺄셈은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

여러

자리올림 전파·2의 보수·오버플로우

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩