You are on page 1of 57

Chapter 3

수의 표현과 산술 회로
(NUMBER REPRESENTATION AND
ARITHMETIC CIRCUITS)
배울 내용들

 산술연산과 이에 필요한 수의 표현
 Unsigned number
- 2진법, 8진법, 10진법, 16진법과 이들의 변환
 덧셈기의 종류
- half adder, full adder, ripple carry adder, CLA
 Signed number의 덧셈
- 보수(complement)의 원리
 산술회로(Arithmetic Circuits)의 설계
 곱셈의 원리와 회로
 여러가지 수의 표현법과 coding
3.1 POSITIONAL NUMBER representation

가중치(weight)
• 수치는 논리회로에서 변수로 표시
• Positive Integer(=unsigned number)
V=dn-110n-1+dn-210n-2++d0100
• Including Negative Integer(=signed number)

V=  (dn-110n-1+dn-210n-2++d0100)
• 10 진수를 동일하게 2 진수로 표현 가능
n 1 m n 1
V   bi  2 .
i
 b 2 i
i
: b  0,1 V  i : 일반적으로
k  r i
소수점 가정
i 0 i  1 i  m
• 10진수  2진수
V b
 bn 1  2 n  2  ...  b2  21  b1  0 나머지
2 2

20

24

29

Conversion from decimal to binary.


 소수점 이하의 수들은 어떻게 바꾸나?
 소수를 가진 2진수 0.101이란 다음과 같은 수를 표현함
1 1 5
0.1012  1 2 1  0  2  2  1 2 3   0    0.62510
2 8 8
따라서, 정수부분과 반대로 10진수를 2로 곱하여 1의 정수자
리가 1이 되면 2진수로 1이고, 0이 되면 2진수로 0이 되는데,
소수 부분이 없을 때까지 반복하면 됨
 그러므로 10진수의 끝자리가 5와 같이 2를 곱하면 점점 줄어
들어 소수 부분이 없어지는 경우가 아니면, 진법의 변환시 오
차가 발생됨  conversion error
 예: 0.410의 경우=0.01100110… 0.4  2  0.8 0
0.8  2  1.6 1
0.6  2  1.2 1
0.2  2  0.4 0
8/16 진수 ↔2 진수

 r = 8 ( = 2 )인
3
경우
 8진 1자리 수 → 2진 3자리 수
 예
( 101 011 010 111 )2
= ( 5 3 2 7 )8

4
 r = 16 ( = 2 )인 경우
 16진 1자리 수 → 2진 4자리 수
 예
( 1010 1111 0010 0101 )2
= ( A F 2 5 )16
4 bits=nibble

8 bits=byte

MSB LSB

Table 3.1. Numbers in different systems.


3.2 unsigned number의 덧셈

 부호가 없는 2진수

 방법: 10진수 덧셈과 같음( 예:그림 5.3 )

→ 회로 설계를 4장에서 배운대로 하면?

 진리표는?

∴ 다른 접근 방법을 사용

 모든 자리에서의 과정이 같음으로 1-자리만 고려

→ Xi, Yi만 고려하여 덧셈 회로 구성


X = x4 x3 x2 x1 x0 01111 15 10

+ Y = y4 y3 y2 y1 y0 01010 10 10

1110 Generated carries

S = s4 s3s2 s1s0 11001 25 10

Figure 3.2. An example of addition.


반가산기(half adder)

 논리함수
c=x•y
s=xy
 XOR 연산: odd fuction
즉 1의 개수가 홀수일 때
출력이 1
 XNOR : even fuction
연산자 ⊙

Figure 3.1. Half-adder.


전가산기(full adder) ci
xi yi
00 01 11 10
0 1 1
ci xi yi ci + 1 si
1 1 1
0 0 0 0 0
0 0 1 0 1 s i = x i  y i  c i
0 1 0 0 1
0 1 1 1 0 xi yi
1 0 0 0 1 ci
1 0 1 1 0 00 01 11 10
1 1 0 1 0 0 1
1 1 1 1 1
1 1 1 1
(a) Truth table
ci + 1 = xi yi + xi ci + yi ci

(b) Karnaugh maps


xi
yi si
ci

ci + 1

(c) Circuit

Figure 3.3. Full-adder.


 다단계(Multi-level)로 구현하면

ci s si
s HA c
xi
HA c ci + 1
yi

(a) Block diagram

ci
si
xi
yi

ci + 1

(b) Detailed diagram


Figure 3.4. A decomposed implementation of the full-adder circuit.
ripple-carry adder

 n-자리 수 덧셈
1) 병렬 덧셈(parallel adder)
2) 직렬 덧셈(serial adder)

 S  X + Y

xn –1 yn – 1 x1 y1 x0 y0

c1
cn FA cn ” 1 c2 FA FA c0

sn – 1 s1 s0
MSB position LSB position

Figure 3.5. An n-bit ripple-carry adder.


8비트의 부호없는 수 A에 3을 곱하는 회로 설계

A P=
=
A+A A : a7 a0

Ripple carry
adder
x7 x0 y7 y0 Left-shifting
c7 A : a7 a0
s7 s0

2A 0 0 A
2A 0
A x8 x1 x0 y8 y7 y0
x8 x7 x0 y8 y7 y0 c8
s8 s0
c8
s8 s0

P = 3 A : P9 P8 P0
P = 3 A : P9 P8 P0
(b) Efficient design
(a) Naive approach
Figure 3.6. Circuit that multiplies an 8-bit unsigned number by 3.
3.3 SIGNED NUMBERS
 unsigned number와 signed number
bn – 1 b1 b0

Magnitude
MSB

(a) Unsigned number

bn – 1 bn – 2 b1 b0

Magnitude
Sign
0 denotes
+

1 denotes MSB

(b) Signed number


Figure 3.7. Formats for representation of integers.
1’s complement와 2’s complement의 원리
 양수/음수 표현
 10진수는 절대값에  부호만 앞에 붙여서 표시
 그러나 이 방법은 회로 구성이 어려움

 R’s complement
(R-1)’s complement

 음수 표현 방법(R = 2 즉 2진수의 경우)


 1의 보수(1’s complement)
 2의 보수(2’s complement)
 부호와 절대값(sign magnitude)
 보수(complement)가 필요한지를 분석한 예
 74-36 = 74+100-100-36 = 74+(100-36)-100
그러나 100-36 계산은 아직 어려움!
 따라서 다음과 같이 변형 하여보자
74+(99-36)+1-100
= 74+63+1-100 = 74+64-100 = 138-100 = 38
 여기서, 99-36은 100-36과는 달리 100자리에서 빌려오는
값이 필요 없이 간단히 계산 가능하며, 덧셈으로만 처리 한
후에 맨 위자리를 제거하면 됨.
 위의 예에서 99-36을 36의 9’s complement라고 함
100-36을 36의 10’s complement라고 함
 2진수에서, 0101(5)의 1’s complement
1111-0101 = 1010으로 1  0, 0  1로 바꾸면 됨
2’s complement
10000-0101 = 1011로 1’s complement + 1
 수식으로 표시하면? 여기서 n: 수 표현 비트 수

K  (2 n  1)  P : 1's complement
K  2n  P : 2's complement

 예제
10110의 1’ s complement  01001 다시 보수를
10110의 2’ s complement  01010 만들면?

6의 9’ s complement  3
6의 10’ s complement  4
Table 3.2. Interpretation of four-bit signed integers.
덧셈 및 뺄셈
 양수의 덧셈: 3가지 표현에서 같으며, 부호없는 수의 덧셈과 같음

 음수가 있는 경우의 덧셈: 다름


즉 A + B를 하려는데, A, B가 음수일 수도 있음

 부호와 크기 표현인 경우의 덧셈

부호가 같으면 덧셈이지만,


부호가 다르면 크기 비교하고, 큰수에서 작은 수를 빼야함
예: (+A) + (-B) = A - B 또는 -(B - A)

→ 필요한 HW는? 비교회로, 뺄셈 회로, 덧셈 회로


1의 보수 덧셈
방법: 부호까지 수로 간주하여 덧셈
캐리가 발생하면 이를 현재의 결과에 더하여 최종 결과를 얻음

(+ 5) 0101 – 5 1010
+ (+ 2) +0010 + (+2) +0010
(+ 7) 0111 - 3 1100

(+ 5) 0101 –5 1010


+ – 2 +1101 + – 2  +1101
(+ 3) 10010 –7 1 0111
1 1
0011 1000

Figure 3.8. Examples of 1’s complement addition.


2의 보수 덧셈
방법: 부호까지 수로 간주하여 덧셈
캐리가 발생하면 이를 무시함

(+5) 0101 (–5 ) 1011


+ ( + 2) + 0010 + ( + 2) + 0010
( + 7) 0111  –3 1101

( + 5) 0101  –5 1011


+  –2 + 1110 + –2 + 1110
( + 3) 10011  –7 11 0 0 1

ignore ignore
Figure 3.9. Examples of 2’s complement addition.
2의 보수 뺄셈

 A - B를 하려고 함 (단, A, B는 음수일 수도)

A - B = A + (-B) [ = A + B' + 1 ]

 왼쪽과 오른쪽의 의미 차이는?

 의미는? 덧셈과 뺄셈을 덧셈기만 사용하여 구현 가능


( + 5) 0101 0101
– ( + 2) – 0010 +1 1 1 0
( + 3) 10011
ignore

–5 1011 1011


– ( + 2) – 0010 + 1110
–7 11001
ignore

( + 5) 0101 0101
– –2 – 1110 + 0010
( + 7) 0111

–5 1011 1011


– –2 – 1110 + 0010
–3 1101
Figure 3.10 Examples of 2’s complement subtraction.
 덧셈: 시계 방향으로 이동
뺄셈: 반시계 방향으로 이동
0000
1111 0001
 예: (-5) - (+2)
1110 0010
–1 0 +1
1) (-5) 위치에서 시작하여
반시계 방향으로 2만큼 이동 –2 +2
1101 0011
–3 +3
2) (-5) + (-2) 즉 -5 위치에서
시계 방향으로 14(= 16 - 2 )만큼 1100 –4 +4 0100
이동
–5 +5
1011 0101
–6 +6
무엇인가? –7 –8 +7
1010 0110
1001 0111
1000

Figure 3.11. Graphical interpretation of four-bit 2’s complement numbers.


덧셈/뺄셈 장치

 사용 장치: 덧셈 장치
 하려는 일?
 X, Y는 n 비트 수
 일: X + Y 또는 X - Y
(즉 2 종류 → 구분은? 제어 신호 a/s에 의해 )
 분석
1) X - Y = X + (-Y)로 처리 [ X - Y = X + (-Y) → X + Y' + 1]
즉 1의 보수 + 1 이며, +1은 캐리입력인 c0 = 1로 함으로써 가능
2) 2개의 입력중에 하나는 X, 다른 하나는 Y 또는 -Y [ 즉 Y' ]가 됨
 블록도
 동작:
y
1. a/s = 0 이면 f  y, c0  0
f (y or y’ )
2. a/s = 1 이면 f  y’, c0  1
모든 비트 동작이 같음  1 비트만
a/s
회로 설계

 진리표
a/s yi 출력 f
0 0 0 yi
0 1 1
1 0 1
yi’
1 1 0
yn – 1 y1 y0

Add  Sub
control

xn – 1 x1 x0

cn n-bit adder c0

sn – 1 s1 s0

Figure 3.12. Adder/subtractor unit.


Arithmetic over flow

( + 7) 0111 –7 1001


+ ( + 2) + 0010 + ( + 2) + 0010
( + 9) 1001 –5 1011
c4 = 0 c4 = 0
c3 = 1 c3 = 0

( + 7) 0111 –7 1001


+  – 2 + 1110 + –2 + 1110
( + 5) 10101 –9 10 1 1 1
c4 = 1 c4 = 1
c3 = 1 c3 = 0

부울 함수: 잘못된 값
overflow = c3 ⊕ c4

Figure 3.13. Examples of determination of overflow.


Adder의 Performance

 그림 5-6의 ripple-carry adder의 속도를 분석


 각 stage의 adder는 그림 5.4(c)와 같이 2단으로 구성 되고,
이들의 지연시간이 t(2개의 gate 통과)라고 가정
- 첫 번째 carry는 t 후에 발생
- 두 번째 carry는 2t(=4개 gate delay) 후에 발생
- n-bit adder에서 complement를 포함하면,
2n+1 gate delay (nt시간 + 1 gate delay)
 n이 매우 크다면 최종 carry는 매우 느리게 동작
 따라서 빠른 adder와 같은 arithmetic unit의 설계가 digital system
의 가격대 성능의 비를 결정하는 요인 중에 하나
ripple-carry adder

xn –1 yn – 1 x1 y1 x0 y0

c1
cn FA cn ” 1 c2 FA FA c0

sn – 1 s1 s0
MSB position LSB position

Figure 3.5. An n-bit ripple-carry adder.


xi yi
ci 00 01 11 10
0 1 1
ci xi yi ci + 1 si
1 1 1
0 0 0 0 0
0 0 1 0 1 s i = x i  y i  c i
0 1 0 0 1
0 1 1 1 0 xi yi
1 0 0 0 1 ci
1 0 1 1 0 00 01 11 10
1 1 0 1 0 0 1
1 1 1 1 1
1 1 1 1
(a) Truth table ci + 1 = xi yi + xi ci + yi ci

(b) Karnaugh maps


xi
yi si
ci

ci + 1

(c) Circuit

Figure 3.3. Full-adder.


3.4 FAST-ADDERS: carry-lookahead adder

 이미 ripple-carry adder에서 carry들이 전달되는 지연시간 때문에 속도가


늦어짐을 이해
 따라서 이들 carry를 미리 예측할 수 있는지의 여부를 판단

 Ci+1= XiYi + XiCi + YiCi = Xi •Yi + (Xi+Yi) • Ci


여기서, Xi • Yi = Gi (generate)
Xi+Yi = Pi (propagate) 라고 하면

Ci+1= Gi + PiCi 즉, Gi =1 이면 carry-in에 관계 없이 1


Ci를 동일한 원리로 확장하면
Ci+1= Gi + Pi(Gi-1+ Pi-1Ci-1) =
Gi + PiGi-1+ PiPi-1Ci-1 =
Gi + PiGi-1+ PiPi-1Gi-2+ ... + PiPi-1...P2P1G0 + PiPi-1...P2P1C0
x1 y1 x0 y0

critical path

g1 p1 g0 p0
c1
c2 c0

5 gates
delay

c2=g1+p1c1 c1=g0+p0c0

Stage 1 Stage 0

s1 s0

Figure 3.14. A ripple-carry adder with generate/propagate signals.


x1 y1 x0 y0

x0 y0

g1 p1 g0 p0

c0
c2
c1
3 gates
delay c1, c2를
얻는데
필요한
시간은?

c2=g1+p1g0+p1p0c0
s1 s0

Figure 3.15. The first two stages of a carry-lookahead adder.


 그림 5.16과 같이 구현하면 n-bit CLA는 4개의 gate delay 소요

 gi와 pi의 1 delay + carry를 만들기 위한 2 delay +


sum을 만들기 위한 XOR의 1 delay = 4 gate delay

 그러나 n-bit으로 구현할 경우에 carry의 fan-in이 많아지는 문제


가 발생  그림 5.17과 같이 hierarchical design( group으로 묶어서
처리)
x31 – 24 y31 – 24 x15 – 8 y15 – 8 x7 – 0 y7 – 0

c8
c32 Block c24 c16 Block Block c0
3 1 0

s31 – 24 s15 – 8 s7 – 0

c8  g7  p7 g6  p7 p6 g5  p7 p6 p5 g 4    p7 p6 p5 p4 p3 p2 p1 p0  p7 p6 p5 p4 p3 p2 p1 p0c0

P0  p7 p6 p5 p4 p3 p2 p1 p0 , G0  g7  p7 g6  p7 p6 g5    p7 p6 p5 p4 p3 p2 p1 g0 라고 하면

c8  G0  P0c0, c16  G1  P1c8  G1  P1G0  P1P0C0 로 다음 그림과 같음

Figure 3.16. A hierarchical carry-lookahead adder with ripple-carry between blocks.


x31 – 24 y31 – 24 x15 – 8 y15 – 8 x7 – 0 y7 – 0

Block Block Block c0


3 c24 1 0

G3 P3 G1 P1 G0 P0

s31 – 24 s15 – 8 s7 – 0

c32 c16 c8

Second-level lookahead

Figure 3.17. A hierarchical carry-lookahead adder.


x1 y1 x0 y0
2-input XOR

g1 p1 g0 p0

c0
c2
c1

s1 s0

Figure 3.18. An alternative design for a carry-lookahead adder.


3.6 곱셈(MUL
TIPLICA
TION)

Multiplicand M (14) 1110


Multiplier Q (11)  1011

Multiplicand M (14) 1110 Partial product 0 1110


Multiplier Q (11)  1011 + 1110

1110 Partial product 1 10101


1110 + 0000
0000 Partial product 2 01010
+ 1110 + 1110
Product P (154) 10011010 Product P (154) 10011010

(a) Multiplication by hand (b) Multiplication for implementation in hardware

 알고리즘?

Figure 3.34. Multiplication of unsigned numbers.


부호없는 수의 어레이 곱셈기(array m u ltip lier)

 피승수: M = m3 m2 m1 m0
승수: Q = q3 q2 q1 q0 인 4×4의 예

m3 m2 m1 m0
* q3 q2 q1 q0
m3q0 m2q0 m1q0 m0q0
m3q1 m2q1 m1q1 m0q1
m3q2 m2q2 m1q2 m0q2
+ m3q3 m2q3 m1q3 m0q3 AND 연산
m3 m2 m1 m0
* q3 q2 q1 q0
m3q0 m2q0 m1q0 m0q0 : PP0
+ m3q1 m2q1 m1q1 m0q1
pp14 pp13 pp12 pp11 pp10 : PP1
+ m3q2 m2q2 m1q2 m0q2
pp25 pp24 pp23 pp22 pp21 pp20 : PP2
+ m3q3 m2q3 m1q3 m0q3
p6 p5 p4 p3 p2 p1 p0 : PP3

 부분곱1: PP1 = PP0 + m3q1 m2q1 m1q1 m0q1 0 즉 덧셈 연산


 다른 부분곱도 마찬가지임
p0 = m0q0
p1 = m1q0 + m0q1
p2 = m2q0 + m1q1 + m0q2
Figure 3.35. A 4 x 4 multiplier circuit.
Multiplicand M (+14) 01110
Multiplier Q (+11) x 01011
Partial product 0 00 01110
+ 0 01110
Partial product 1 Sign-extension 0 010101
+ 0 00000
(부호 확장)
Partial product 2 0 001010
+ 0 01110
Partial product 3 0 010011
+ 0 00000
Product P (+154) 0 010011 01 0

(a) Positive multiplicand


Multiplicand M (–14) 10010
Multiplier Q (+11) ´ 01011
Partial product 0 11 10010
+ 1 10010
Partial product 1 1 101011
+ 0 00000
Partial product 2 1 110101
+ 1 10010
Partial product 3 1 101100
+ 0 00000
Product P (–154) 11011001 1 0
(b) Negative multiplicand
Figure 3.36. Multiplication of signed numbers.
3.7 OTHER NUMBER REPRESENT
A
TIONS
 부동소수점 수 표현
32 bits

S E M

Sign
0 denotes + 8-bit 23 bits of mantissa
1 denotes – excess-127
exponent normalize &
(a) Single precision excess-code

64 bits

S E M

Sign
11-bit excess-1023 52 bits of mantissa
exponent

(c) Double precision


Figure 3.37 IEEE standard floating-point formats.
 (+5.0) 의 single precision 표현은?
10

2
(5.0)10 = (101.0)2 = (1.01)2 * 2

따라서 M = 01, E= 12910

0 10000001 010 ... 000


4 0 A0000016

 (- 5.0)10의 single precision 표현은?


 4칙 연산은?
10진수 표현: BCD 코드

 표현 예
1710  0100012
1710  00010111

Table 3.3. Binary-coded decimal digits.


1자리 10진수(BCD 코드) 덧셈

 덧셈은 2진수 덧셈 회로 사용
 문제는? 결과가 9보다 커지는 경우에는 올바르지 않다

 해결은?
 원하는 10진수 덧셈: modulo-10 기법
 행해지는 덧셈: modulo-16 기법
∴ 6을 더하면 됨
즉 Z=X+Y z: z3 z2 z1 z0
if Z <= 9 then S = Z & carry-out =0
if Z > 9 then S = Z + 6 & carry-out = 1
☞ adjust = carry-out + z3 • z2 + z3 • z1
X 0111 7
+ Y + 0101 + 5
2진수 덧셈 Z 1100 12
+ 0110
carry 10010
조정과정
S=2

X 1000 8
+ Y + 1001 + 9
Z 10001 17
+ 0110
carry 10111

S=7
Figure 3.38. Addition of BCD digits.
X Y

c in
4-bit adder
carry-out

Detect if
sum 9>

6 0

MUX
Adjust

c out 4-bit adder 0

S
Figure 3.39. Block diagram for a one-digit BCD adder.
x3 x2 x1 x0 y3 y2 y1 y0

Four-bit adder c in

z3 z2 z1 z0

Two-bit adder

c out s3 s2 s1 s0

Figure 3.41. Circuit for a one-digit BCD adder.


ASCII 코드
 ASCII( american standard code for information interchange )
 7-비트 사용
 패리티(parity): 오류 검출 목적
 짝수(even) 패리티: 1의 개수가 짝수가 되도록
 회로 구성의 예
데이터: 4-비트 ( x3 x2 x1 x0 )
참고 : xor 는 odd function
 패리티 생성 회로 함수: p = x3 ⊕ x2 ⊕ x1 ⊕ x0
 패리티 검사 회로 함수: c = p ⊕ x3 ⊕ x2 ⊕ x1 ⊕ x0
→ 만일 c = 0 이면 정상일 가능성
c = 1 이면 오류
Table 5.4. The seven-bit ASCII code.
예제 5.10 ( 비교기 )
 X - Y = X + Y' + 1을 하여 플래그들을 만듬
(가정: X, Y는 부호있는 수)
 V : overflow 여부 (그림 5.14 참조)
 N : 결과의 음수 여부
 Z : 결과의 0 여부
 위의 플래그들을 사용하여 다음을 판정하려면?
1) X = Y
2) X < Y
3) X <= Y
4) X > Y
5) X >= Y
x – y = x + (-y)
 x + y’ + 1

Figure 3.45. A comparator circuit.


1) X = Y  Z = 1로 검출
2) X < Y 는?
X - Y의 결과를 분석해야함
 X, Y가 같은 부호라면 오버플로우가 발생하지 않음(V = 0)
이때 X < Y가 되려면 X - Y가 음수이면됨(N = 1)
 X, Y가 다른 부호라면 오버플로우를 고려해야함
X의 부호가 음( Y는 양)이었고
오버플로우가 발생하지 않으면(V = 0) X - Y의 결과가 음( N = 1)일때 X < Y
오버플로우가 발생하면(V = 1) X - Y의 결과가 양( N = 0)일때 X < Y
★ 참고
X 의 부호가 양( Y는 음)이었고
오버플로우가 발생하지 않으면(V = 0) X - Y의 결과는 양( N = 0)
오버플로우가 발생하면(V = 1) X - Y의 결과는 음( N = 1)
V N X<Y
0 0 0
논리식 V ⊕ N = 1로 검출
0 1 1
1 0 1
1 1 0
3) X <= Y 는 X < Y 또는 X = Y 이므로
Z + (V ⊕ N ) = 1로 검출

4) X > Y 는 3)의 역
Z + (V ⊕ N ) = 0으로 검출

5) X >= Y는
X > Y 또는 X = Y
X < Y의 역
V ⊕ N = 0으로 검출

You might also like