Lec4 Adder & Subtractor

advertisement
2010 R&E Computer System Education & Research
Lecture 4. Adder & Subtractor
Prof. Taeweon Suh
Computer Science Education
Korea University
Arithmetic Circuits
• Arithmetic circuits are the central building blocks of
computers (CPUs)
• Computers are able to perform many arithmetic
functions such as addition, subtraction, comparison,
shift, multiplication, and division
• We are going to study hardware implementations of
these operations
• Let’s start with adder
• Addition is one of most common operations in computer
2
Korea Univ
1-bit Half Adder
• Let’s first consider how to
implement an 1-bit adder
A
B
• Half adder
 2 inputs: A and B
 2 outputs: S (Sum) and Cout
(Carry)
Sum
Carry
A
B
S(um) C(arry)
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
3
S  AB  A B  A  B
C  AB
Korea Univ
1-bit Full Adder
• Half adder lacks a Cin input
to accept Cout of the
previous column
• Full adder
 3 inputs: A, B, Cin
 2 outputs: S, Cout
4
Cin
A
B
S(um)
Cout
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
Korea Univ
1-bit Full Adder
Cin
A
B
S(um)
Cout
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
Cin
Cout
AB
Cin
00
01
11
10
0
0
1
0
1
1
1
0
1
0
00
01
11
10
0
0
0
1
0
1
0
1
1
1
Sum
AB
00
01
11
10
0
0
0
1
0
1
0
1
1
1
Slide from Prof. Sean Lee, Georgia Tech
Cin
or
5
AB
Korea Univ
1-bit Full Adder Schematic
S  Cin  A  B
Cout  AB  Cin(A  B)
A
S
B
Cin
Half Adder
Half Adder
Cout
Slide from Prof. Sean Lee, Georgia Tech
6
Korea Univ
Multi-bit Adder
• It seems that an 1-bit adder is doing not much of work
• Let’s move on to a multi-bit adder
 N-bit adder sums two N-bit inputs (A and B), and Cin (carry-in)
• It is commonly called carry propagate adders (CPAs) because
the carry-out of one bit propagates into the next bit
• Three common CPA implementations
 Ripple-carry adders
(slow)
 Carry-lookahead adders (fast)
 Prefix adders
(faster)
A
B
N
Cout
N
Cin
+
N
S
7
Korea Univ
Ripple-Carry Adder
• The simplest way to build an N-bit CPA is to chain 1bit adders together
 Carry ripples through entire chain
Example: 32-bit Ripple Carry Adder
A31
Cout
B31
+
S31
A30
C30
B30
+
A1
C29
C1
S30
B1
+
S1
8
A0
C0
B0
+
Cin
S0
Korea Univ
4-bit Ripple-Carry Adder
Carry
A3
B3
A2
B2
A1
B1
A0
B0
A
B
A
B
A
B
A
B
Full
Cin
Adder
Cout
Full
Cin
Adder
Cout
Full
Cin
Adder
Cout
Full
Cin
Adder
Cout
S
S
S
S
S3
S2
S1
S0
S
S  Cin  A  B
Cout  AB  Cin(A  B)
Modified from Prof Sean Lee’s Slide, Georgia Tech
A
B
Cin
Cout
9
Korea Univ
Delay of Ripple Carry Adder
A0
B0
Carry
Cin
S0
1st Stage Critical Path
= 3 gate delays
= DXOR+DAND+DOR
S  Cin  A  B
Cout  AB  Cin(A  B)
Slide from Prof. Sean Lee, Georgia Tech
10
Korea Univ
Delay of Ripple Carry Adder
A1
B1
A0
B0
Cin
S1
S  Cin  A  B
Cout  AB  Cin(A  B)
S0
2nd Stage Critical Path 1st Stage Critical Path
= 2 gate delays
= 3 gate delays
= DAND+DOR
= DXOR+DAND+DOR
(Assume that inputs
are applied at the
same time)
Slide from Prof. Sean Lee, Georgia Tech
11
Korea Univ
Delay of Ripple Carry Adder
A3
B3
A2
B2
A1
B1
A0
B0
Carry
Cin
S3
S2
S1
S0
• Critical path delay of a 4-bit ripple carry adder
• DXOR + 4 (DAND+DOR) : 9 gates delay
• Critical path delay of an N-bit ripple carry adder
• 2(N-1)+3 = (2N+1) gate delays
Modified from Prof Sean Lee’s Slide, Georgia Tech
12
Korea Univ
Ripple-Carry Adder Delay
• Ripple-carry adder has disadvantage of being
slow when N is large
 The delay of an N-bit ripple-carry adder is roughly
tripple = N • tFA (tFA is the delay of a full adder)
• A faster adder needs to address the serial
propagation of the carry bit
13
Korea Univ
Carry-Lookahead Adder
• The fundamental reason that large ripple-carry adders
are slow is that the carry signals must propagate
through every bit in the adder
• A carry-lookahead adder (CLA) is another type of CPA
that solves this problem.
 It divides the adder into blocks and provides circuitry to quickly
determine the carry out of a block as soon as the carry-in is
known
14
Korea Univ
Carry-Lookahead Adder
• Compute the carry-out (Cout) for an N-bit block
 Compute generate (G) and propagate (P) signals for columns and then
an N-bit block
 A column (bit i) can produce a carry-out by either generating a carryout or propagating a carry-in to the carry-out
• Generate (Gi) and Propagate (Pi) signals for each column
 A column will generate a carry-out if both Ai and Bi are 1
Gi = Ai Bi
 A column will propagate a carry-in to the carry-out if either Ai or Bi is 1
Pi = Ai + Bi
• Express the carry-out of a column (Ci) in terms of Pi and Gi
Ci = Ai Bi + (Ai + Bi )Ci-1 = Gi + Pi Ci-1
15
Korea Univ
Carry Generate & Propagate
gi = Ai Bi
pi = Ai + Bi
Ci = AiBi + (Ai + Bi) Ci-1
Ci = gi + pi Ci-1
C0 = g0 + p0 C-1
C1 = g1 + p1 C0 = g1 + p1 g0 + p1 p0 C-1
C2 = g2 + p2 C1 = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 C-1
C3 = g3 + p3 C2 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 C-1
What do these equations mean? Let’s think about these
equations for a moment
Modified from Prof H.H.Lee’s Slide, Georgia Tech
16
Korea Univ
Carry Generate & Propagate
• A 4-bit block will generate a carry-out if column 3 generates (g3) a
carry or if column 3 propagates (p3) a carry that was generated or
propagated in a previous column
G3:0 = g3 + p3 (g2 + p2 (g1 + p1 g0 )
= g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0
• A 4-bit block will propagate a carry-in to the carry-out if all of the
columns propagate the carry
P3:0 = p3 p2 p1 p0
• We compute the carry out of the 4-bit block (Ci) as
Ci = Gi:j + Pi:j Cj
17
Korea Univ
4-bit CLA
Carry Lookahead Logic
C3
C2
g3
S3
A3
C1
p3
B3
g2
S2
A2
C0
p2
B2
Si  Ci  Ai  Bi
Slide from Prof. Sean Lee, Georgia Tech
g1
S1
C-1
A1
p1
B1
g0
S0
g i  A i Bi
(generate)
pi  A i  Bi
(propagate )
18
A0
p0
B0
Korea Univ
An Implementation of CLA
C-1
C3
g3 p3 C2
g2 p2 C1
S3 A3 B3
C0 = g0 + p0 C-1
C1 = g1 + p1 C0 = g1 + p1 g0 + p1 p0 C-1
C2 = g2 + p2 C1 = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 C-1
C3 = g3 + p3 C2 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 C-1
Slide from Prof. Sean Lee, Georgia Tech
19
S2 A2 B2
g1 p1 C0
S1 A1 B1
g0 p0
S0 A0 B0
 Carry Delay is 4*DAND + 2*DOR for Carry C3
 Reuse some gate output results in little Improvement
Korea Univ
More Expensive and Fast CLA
Carry Lookahead Logic
C3
g3
p3
S3 A3 B3
C2
g2
p2
S2 A2 B2
C0 = g0 + p0 C-1
C1 = g1 + p1 C0 = g1 + p1 g0 + p1 p0 C-1
C2 = g2 + p2 C1 = g2 + p2 g1 + p2 p1 g0 + p2 p1 p0 C-1
C3 = g3 + p3 C2 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 C-1
Slide from Prof. Sean Lee, Georgia Tech
20
C1
C-1
g1
p1
S1 A1 B1
C0 g0 p0
S0 A0 B0
Only 3 Gate Delay for each Carry Ci = DAND + 2*DOR
Korea Univ
32-bit CLA with 4-bit blocks
B31:28 A31:28
Cout
B27:24 A27:24
B7:4 A7:4
4-bit CLA C27 4-bit CLA C23
Block
Block
S31:28
C7 4-bit CLA C3 4-bit CLA
Block
Block
S27:24
B3
A3
B3:0 A3:0
S7:4
B2
A2
C2
B1
A1
C1
S3:0
B0
A0
C0
+
+
+
+
S3
S2
S1
S0
G3:0
Cin
G3
P3
G2
P2
G1
P1
G0
P3
P2
P1
P0
P3:0
Cout
Cin
Cin
It shows a path to C3 only
C3 = g3 + p3 C2 = g3 + p3 g2 + p3 p2 g1 + p3 p2 p1 g0 + p3 p2 p1 p0 C-1
21
Korea Univ
CLA Delay
• The delay of an N-bit CLA with k-bit blocks is roughly:
tCLA = tpg + tpg_block + (N/k – 1)tAND_OR + ktFA
where
 tpg is the delay of the column generate and propagate gates
 tpg_block is the delay of the block generate and propagate gates
 tAND_OR is the delay from Cin to Cout of the final AND/OR gate
tpg
tpg_block
tAND_OR
22
Korea Univ
Adder Delay Comparisons
• Compare the delay of 32-bit ripple-carry adder and CLA
 The CLA has 4-bit blocks
 Assume that each two-input gate delay is 100 ps
 Assume that a full adder delay is 300 ps
tripple
= NtFA
= 32(300 ps)
= 9.6 ns
tCLA
= tpg + tpg_block + (N/k – 1)tAND_OR + ktFA
= [100 + 600 + (7)200 + 4(300)] ps
= 3.3 ns
23
Korea Univ
Verilog-HDL Representation
module adder #(parameter N =
(input [N-1:0]
input
output [N-1:0]
output
8)
a, b,
cin,
s,
cout);
assign {cout, s} = a + b + cin;
endmodule
24
Korea Univ
Then, When to Use What?
• We have discussed 3 kinds of CPA
 Ripple-carry adder
 Carry-lookahead adder
 Prefix adder (see backup slides)
• Faster adders require more hardware and therefore they
are more expensive and power-hungry
• So, depending on your speed requirement, you can
choose the right one
• If you use HDL to describe an adder, the CAD tools will
generate appropriate logic considering your speed
requirement
25
Korea Univ
References
• Our book covers very little about addition and subtraction
• Refer to the following books for details
 Logic and Computer Design Fundamentals by Morris Mano, 4th
edition (Ch 4. Arithmetic Functions and HDLs, pp 168 ~ pp 185)
26
Korea Univ
Revisiting 2’s Complement Number
• Given an n-bit number N, the 2s complement of N is
defined as
2n – N for N ≠ 0
0
for N = 0
 Example: 3 is 4’b0011 (in a 4-bit binary)
• 2s complement of 3: 24 -3 = 4’b1101
• A fast way to get a 2s complement number is to flip all
the bits and add 1
• In hardware design of computer arithmetic, the 2s
complement number provides a convenient and simple
way to do addition and subtraction of unsigned and
signed numbers
27
Korea Univ
Subtractor
• Suppose that we use a 4-bit
7 - 5
3 - 7
0111
0101
0011
0111
0111
+ 1011
0011
+ 1001
10010
01100
Result = 2
Cout
Cin
Result = -4
28
Korea Univ
An Implementation of a 4-bit Adder and
Subtractor
B3
B2
B1
B0
Subtract
A3
A2
A
C
B
Full
Cin
Adder
Cout
A1
A
B
Full
Cin
Adder
Cout
A0
A
B
Full
Cin
Adder
Cout
A
B
Full
Cin
Adder
Cout
S
S
S
S
S3
S2
S1
S0
Hmmm.. So, it looks simple! Are we done?
29
Not Really!!
Korea Univ
Subtraction of Unsigned Numbers
• Unsigned number is either positive or zero
 There is no sign bit
 So, a n-bit can represent numbers from 0 to 2n - 1
• For example, a 4-bit can represent 0 to 15 (=24 – 1)
 To declare an unsigned number in C language,
• unsigned int a;
 x86 allocates a 32-bit for a variable of unsigned int
• Subtraction of unsigned integers
 M – N in binary can be done as follows:
• M + (2n – N) = M – N + 2n
• If M ≥ N, the sum does produce an end carry, which is 2n
 Subtraction result is zero or a positive number
• If M < N, the sum does not produce an end carry since it is equal to 2n – (N
– M)
• Unsigned Underflow
 If there is no carry-out from adder, the subtraction result is
negative (and unsigned number can’t represent negative numbers)
30
Korea Univ
Example
• Suppose that we use a 4-bit (0 ~ 15)
10 - 5
1010
0101
1010
+ 1011
10101
#include <stdio.h>
void main()
{
unsigned int ua, ub, uc;
ua = 10;
ub = 5;
uc = ua - ub ;
printf("hex:
ua = h'%x, ub = h'%x, uc = h'%x\n", ua, ub, uc);
printf("unsigned: ua = d'%u, ub = d'%u, uc = d'%u\n", ua, ub, uc);
printf("signed:
ua = d'%d, ub = d'%d, uc = d'%d\n", ua, ub, uc);
}
• Carry-out can be used in comparison of two unsigned numbers
• If the sum produces an end carry, then the minuend (10) is
equal to the subtrahend (5) or larger than the subtrahend
31
Korea Univ
Another Example
• Suppose that we use a 4-bit (0 ~ 15)
10 - 13
1010
1101
1010
+ 0011
01101
•
•
•
•
#include <stdio.h>
void main()
{
unsigned int ua, ub, uc;
ua = 10;
ub = 13;
uc = ua - ub ;
printf("hex:
ua = h'%x, ub = h'%x, uc = h'%x\n", ua, ub, uc);
printf("unsigned: ua = d'%u, ub = d'%u, uc = d'%u\n", ua, ub, uc);
printf("signed:
ua = d'%d, ub = d'%d, uc = d'%d\n", ua, ub, uc);
}
It is called unsigned underflow (borrow) when the carry out is 0 in unsigned subtraction
Carry-out can be used in comparison of two unsigned numbers
If the sum does not produces an end carry, then the former (10) is smaller the latter (13)
Be careful when you do your programming
•
Understand the consequence of the execution of your program in computer!!!
32
Korea Univ
Subtraction of Signed Numbers
• Signed number represents positive or negative number
 There is a sign bit (MSB)
 A n-bit can represent numbers from -2n-1 to 2n-1-1
• For example, a 4-bit can represent -8 (-23) to 7 (=23 – 1)
 To declare a signed number in C language,
• int a; // signed is implicit
 x86 allocates a 32-bit for a variable of signed int
• Subtraction of signed integers
 It is simply done by addition of two binary numbers in 2s
complement form
• A carry-out from the sign bit position is discarded
33
Korea Univ
Example
• Suppose that we use a 4-bit (-8 ~ 7)
7-5
0111
0101
0111
+ 1011
10010
#include <stdio.h>
void main()
{
int sa, sb, sc;
sa = 7;
sb = 5;
sc = sa - sb ;
printf("hex:
sa = h'%x, sb = h'%x, sc = h'%x\n", sa, sb, sc);
printf("unsigned: sa = d'%u, sb = d'%u, sc = d'%u\n", sa, sb, sc);
printf("signed:
sa = d'%d, sb = d'%d, sc = d'%d\n", sa, sb, sc);
}
34
Korea Univ
Example
• Suppose that we use a 4-bit (-8 ~ 7)
5-7
0101
0111
0101
+ 1001
01110
#include <stdio.h>
void main()
{
int sa, sb, sc;
sa = 5;
sb = 7;
sc = sa - sb ;
printf("hex:
sa = h'%x, sb = h'%x, sc = h'%x\n", sa, sb, sc);
printf("unsigned: sa = d'%u, sb = d'%u, sc = d'%u\n", sa, sb, sc);
printf("signed:
sa = d'%d, sb = d'%d, sc = d'%d\n", sa, sb, sc);
}
35
Korea Univ
Overflow/Underflow
• Overflow/Underflow
 The answer to an addition or subtraction exceeds the
magnitude that can be represented with the allocated
number of bits
• Overflow/Underflow is a problem in computers
because the number of bits to hold a number is fixed
 For this reason, computers detect and flag the occurrence
of an overflow/underflow
• Detection of an overflow/underflow after the addition
of two binary numbers depends on whether the
numbers are considered to be signed or unsigned
36
Korea Univ
Overflow/Underflow in Unsigned Numbers
• When two unsigned numbers are added,
overflow is detected from the end carry-out of
the most significant position
 If the end carry is 1, there is an overflow
• When two unsigned numbers are subtracted,
underflow is detected when the end carry is 0
37
Korea Univ
Overflow/Underflow in Signed Numbers
• With signed numbers, an overflow/underflow can’t occur
for an addition if one number is positive and the other is
negative.
 Adding a positive number to a negative number produces a
result whose magnitude is equal to or smaller than the larger of
the original numbers
• An overflow may occur in addition if two numbers are
both positive
 When x and y both have sign bits of 0 (positive numbers)
• If the sum has sign bit of 1, there is an overflow
• An underflow may occur in addition if two numbers are
both negative
 When x and y both have sign bits of 1 (negative numbers)
• If the sum has sign bit of 0, there is an underflow
38
Korea Univ
Examples
8-bit Signed number addition
8-bit Signed number addition
10000001 (-127)
11111010 ( -6)
-------------------01111011 (-133)
01001000 (+72)
00111001 (+57)
-------------------10000001 (+129)
What is largest
positive number
represented by 8-bit?
What is smallest
negative number
represented by 8-bit?
39
Korea Univ
Overflow/Underflow in Signed Numbers
• We can detect overflow/underflow with the following logic
 Suppose that we add two k-bit numbers
xk-1xk-2… x0 + yk-1yk-2… y0 = sk-1sk-2… s0
Overflow = xk-1yk-1sk-1 + xk-1yk-1sk-1
• There is an easier formula
 Let the carry out of a k-bit full adder be ck-1ck-2… c0
Overflow = ck-1 + ck-2
 If a 0 (ck-2) is carried in, the only way that 1 (ck-1) can be carried
out is when xk-1 = 1 and yk-1= 1 (Adding two negative numbers
results in a non-negative number)
 If a 1 (ck-2) is carried in, the only way that 0 (ck-1) can be carried
out is when xk-1 = 0 and yk-1= 0 (Adding two positive numbers
results in a negative number)
40
Korea Univ
Overflow/Underflow Detection of
Signed Numbers
Carry
A3
B3
A2
B2
A1
B1
A0
B0
A
B
A
B
A
B
A
B
Full
Cin
Cout
Adder
S
Full
Cin
Cout
Adder
S
Full
Cin
Cout
Adder
S
Full
Cout Adder Cin
S
S3
S2
S1
S0
Overflow/
Underflow
Cn-1
Overflow/
Underflow
n-bit Adder/Subtractor
Cn-2
Prof. Sean Lee’s Slide, Georgia Tech
41
Korea Univ
Recap
• Unsigned numbers
 Overflow could occur when 2 unsigned numbers are added
• An end carry of 1 indicates an overflow
 Underflow could occur when 2 unsigned numbers are
subtracted
• An end carry of 0 indicates an underflow (minuend < subtrahend)
• Signed numbers
 Overflow could occur when 2 signed positive numbers are
added
 Underflow could occur when 2 signed negative numbers are
added
 Overflow flag (Cn-1^ Cn-2) indicates either overflow or
underflow
42
Korea Univ
Recap
• Binary numbers in 2s complement system are added
and subtracted by the same basic addition and
subtraction rules as used in unsigned numbers
 Therefore, computers need only one common hardware
circuit to handle both types (signed, unsigned numbers) of
arithmetic
• The programmer must interpret the results of
addition or subtraction differently, depending on
whether it is assumed that the numbers are signed
or unsigned
43
Korea Univ
Backup Slides
44
Korea Univ
Prefix Adder
• Computes generate and propagate signals for all of
the columns (!) to perform addition even faster
• Computes G and P for 2-bit blocks, then 4-bit
blocks, then 8-bit blocks, etc. until the generate and
propagate signals are known for each column
 Then, the prefix adder has log2N stages
• The strategy is to compute the carry in (Ci-1) for
each of the columns as fast as possible and then to
compute the sum:
Si = (Ai  Bi)  Ci-1
45
Korea Univ
Prefix Adder
• A carry is generated by being either generated in a
column or propagated from a previous column
• Define column -1 to hold Cin, so
G-1 = Cin, P-1 = 0
Then,
Ci-1 = Gi-1:-1
because there will be a carry out of column i-1 if the
block spanning columns i-1 through -1 generates a carry
• Thus, we can rewrite the sum equation as:
Si = (Ai  Bi)  Gi-1:-1
46
Korea Univ
Prefix Adder
• The generate and propagate signals for a block spanning bits
i:j are
Gi:j = Gi:k  Pi:k Gk-1:j
Pi:j = Pi:kPk-1:j
• These signals are called the prefixes because they must be
precomputed before the final sum computation can complete
• In words, these prefixes describe that
 A block will generate a carry if the upper part (i:k) generates a
carry or the upper part propagates a carry generated in the lower
part (k-1:j)
 A block will propagate a carry if both the upper and lower parts
propagate the carry.
47
Korea Univ
4-bit Prefix Adder
A3
A2
A1
A0
B3
B2
B1
B0
P2, G2
P1, G1
Cin
P0, G0
P-1, G-1
Remember that P2:-1 is always “0”
since P-1 = 0, but intermediate
propagate signals (P1:-1 ,P0:-1 ,P2:1)
are used for calculating
subsequent generate signals
G-1 = Cin, P-1 = 0
Pi = Ai Bi , Gi = Ai + Bi
P0:-1, G0:-1
P2:1, G2:1
P2:-1, G2:-1
P2:-1 = P2:1 P0:-1 ,
G2:-1 = G2:1 + P2:1 G0:-1
P1:-1, G1:-1
C2 = G 2:-1 C1 = G 1:-1 C0 = G 0:-1
S3
S2
P2:1 = P2 P1, G2:1 = G2 + P2 G1
P0:-1 = P0 P-1, G0:-1 = G0 + P0 G-1
S1
C-1 = G -1
S0
48
P1:-1 = P1 P0:-1 ,
G1:-1 = G1 + P1 G0:-1
S3 = A3 + B3 + G2:-1
S2 = A2 + B2 + G1:-1
+
S1 = A1 + B1 G0:-1
+
+
S0 = A0 B0 G-1
Korea Univ
16-bit Prefix Adder
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
-1
G-1 = Cin, P-1 = 0
14:13
12:11
10:9
14:11 13:11
14:7
13:7
10:7
12:7
14
13
12
Legend
6:5
9:7
11:7
14:-1 13:-1 12:-1 11:-1 10:-1
15
8:7
11
10
9:-1
8:-1
9
4:3
6:3
5:3
6:-1
5:-1
2:1
0:-1
2:-1
4:-1
1:-1
3:-1
7:-1
8
7
6
5
4
3
2
i
1
0
i
i:j
Ai Bi
Pi:i
Pi:k Pk-1:jGi:k
Gk-1:j
Gi-1:-1 Ai Bi
Gi:i
Pi:j
Gi:j
Si
49
Korea Univ
Prefix Adder Delay
• The delay of an N-bit prefix adder is:
tPA = tpg + log2N(tpg_prefix ) + tXOR
where
 tpg is the delay of the column generate and propagate gates
 tpg_prefix is the delay of the black prefix cell
50
Korea Univ
Flags in CPU
• In general, computer has several flags (registers) to
indicate state of operations such as addition and
subtraction




N: Negative
Z: Zero
C: Carry
V: Overflow
• We have only one adder inside a computer
 CPU does comparison of signed or unsigned numbers by
subtraction using adder
 Computer sets the flags depending on the operation result
 Then, do these flags provide enough information to judge
that one is bigger than or less than the other?
51
Korea Univ
Example
void example(void)
{
unsigned int a, b, c;
signed int
aa, bb, cc;
 a == b ?
• Do subtraction
• True if the Z flag is set
• Unsigned number comparison
a = 0x10;
b = 0x20;
aa = 0x30;
bb = 0x40;
if (a > b)
else
• Equality
 a>b?
• Do subtraction
• True if C is set and Z is clear
c = a + b;
c = a - b;
• Signed number comparison
 a>b?
• Do subtraction
• True if N == V, meaning either
if (aa > bb) cc = aa + bb;
else
cc = aa - bb;
 Both N and V are set (1) or
 Both N and V are clear (0)
return;
}
52
Korea Univ
Example
• Signed number comparison
 a>b?
• Do subtraction
• True if N == V, meaning either
 Both N and V are set (1) or
 Both N and V are clear (0)
7
6
5
4
3
2
1
0
-1
-2
-3
-4
-5
-6
-7
-8
0111 0110 0101 0100 0011 0010 0001 0000 1111 1110 1101 1100 1011 1010 1001 1000
• N == V
• Both are 0, meaning that overflow didn’t happen
• Examples: 5 – 1, 3 – (-4), (-3) – (-4)
• Both are 1, meaning that overflow did happen
• Examples: 5 – (-3), 7 – (-4)
53
Korea Univ
EFLGAS in x86
54
Korea Univ
EFLGAS in x86
55
Korea Univ
CPSR in ARM
56
Korea Univ
CPSR in ARM
57
Korea Univ
Download