* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Arithmetic Processing Number Representation Basic Fixed Point
Survey
Document related concepts
Transcript
CS/EE 5830/6830
VLSI ARCHITECTURE
Arithmetic Processing
AP = (operands, operation, results, conditions,
singularities)
Operands
are:
Set
of numerical values
Range
Precision (number of bits)
Number Representation System (NRS)
Operand:
+, -, *, \, etc.
Values of results (zero, neg, etc.)
Singularities: Illegal results (overflow, NAN, etc.)
Conditions:
Chapter 1 – Basic Number Representations
and Arithmetic Algorithms
Number Representation
Need to map numbers to bits
(or
some other representation, but we’ll use bits)
Representation you choose matters!
Complexity
of arithmetic operations depends heavily
on representation!
But, be careful of conversions
Basic Fixed Point NRS
Number represented by ordered n-tuple of symbols
Symbols
are digits
is a digit-vector
Number of digits in digit-vector is precision
n-tuple
Arithmetic
that’s easy in one representation may lose its
advantage when you convert back and forth…
Digit Values
Rule of Interpretation
A set of numerical values for the digits
is the set of possible values for
is the cardinality of
Binary (cardinality 2) is
Decimal (cardinality 10) is {0,1,2,3,4,5,6,7,8,9}
Balanced ternary (cardinality 3) is
Set of integers represented by a digit-vector with n
digits is a finite set with max elements of
Mapping of set of digit-vectors to numbers
(1,3)
“Thirteen”
€
Digit-Vectors
Numbers (N, Z, R, …)
1
Mappings…
Positional Weighted Systems
Integer x represented by digit vector
Digit-vectors
Not Useful!
N,R,Z,…
Nonredundant
Digit-vectors
Rule of interpretation
Where weight vector is
N,R,Z,…
Redundant
Digit-vectors
N,R,Z,…
Ambiguous
Radix Number Systems
Weights are not arbitrary
they
Fixed-Radix Systems
are related to a radix vector
In fixed-radix system all elements of the radix
vector have the same value r (the radix)
Weight
So
vector is
So
that
Radix
2:
4:
Radix 10:
Or
Radix
Mixed-Radix Systems
Time is the most common…
Hours,
Minutes, Seconds
Canonical Systems
Canonical if
Binary
= {0,1}
= {0,1,2,3,4,5,6,7)
Decimal = {0,1,2,3,4,5,6,7,8,9}
Octal
X=(5,37,43)
= 20,263 seconds
5
x 3600 = 18,000
37 x 60 = 2,220
43 x 1
=
43
Total
= 20,263 seconds
Range
of values with n radix-r digits is
2
Non-Canonical Systems
Digit set that is non canonical…
Conventional Number Systems
Non-canonical
decimal
Non-canonical binary
A system with fixed positive radix r and canonical
set of digit values
Radix-r
conventional number system
all this fuss, these are what we’ll mostly worry
about…
After
Redundant
if non-canonical
Specifically
I.e.
binary system with
(1,1,0,1) and (1,1,1,-1) both represent “thirteen”
Aside – Residue Numbers
Weights
P = (17, 13, 11, 7, 5, 3, 2)
Digit-vector (13 4 8 2 0 0 0)
Number = “thirty”
30
mod 17 = 13
mod 13 = 4
30 mod 11 = 8
Etc…
30
Can
allow fast add and multiply
notion of digits on left being more significant than
digits on the right (i.e. no weighting)
No
Lots of Choices…
We’ll also see some signed-digit redundant binary
(carry-save, signed-digit)
Aside – Residue Numbers
Example of a non-radix number system
are not defined recursively
Residue Number System (RNS) uses a set of pairwise
relatively prime numbers
A positive integer x is represented by a vector
binary (radix 2)
Back to Binary
Non-negative integers – digits = {0,1}
Range with n bits is
Higher power of 2 radix – group bits in to groups
with
bits
X
= (1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1)
= ((1,1), (0,0), (0,1), (0,1), (1,1), (0,1))
= ( 3, 0, 1, 1, 3, 1) base 4 (quaternary)
= ((1,1,0), (0,0,1), (0,1,1), (1,0,1))
= (6,1,3,5) base 8 (octal)
= ((1,1,0,0)(0,1,0,1)(1,1,0,1))
= (C, 5, D) base 16 (hexadecimal)
3
Signed Integers
Transformation
Three choices for representing signed ints
Directly
Signed
Use
in the number system
digit NRS, i.e. {-1, 0, 1}
extra symbol to represent the sign
Sign
and Magnitude
Additional
mapping on positive integers
True
and Complement system
Signed integer X
Positive Integer XR
Digit-Vector
X
True and Complement System
Transform signed numbers into unsigned, then use
conventional systems
Signed integers in the range
Negative
“minus two”
x
“six”
xR
(1,1,0)
Z (signed)
N (unsigned)
Digit vectors
Converse Mapping
Convert back and forth
represented by xR
Such
that
is the Complementation constant
Unambiguous if
C
Mapping
is
True forms
Complement
forms
Boundary conditions
If x R = C /2 can be represented, you can assign
it to either
Two standard forms
Representation
is no longer symmetric
Not closed under sign change operation
€
If
can be represented, then there are two
representations of 0
Range complement system
Also
called Radix Complement
complement in radix 2
Two’s
Digit Complement System
Also
called Diminished Radix Complement
complement in radix 2
One’s
4
Two’s Compliment
One’s Compliment
For n bits in the digit vector,
Example
three bits: C = 8
Example
is outside the range
3 bits, you can’t represent 8
only one representation of 0
Two
So,
can be represented, so you have a
three bits: C = 7
is representable in 3 bits
With
representations of 0
cannot be represented
choice
Symmetric
Usually
For n bits in the digit vector
choose second for sign detection
range…
Range is then
Range is then
(asymmetric)
Examples (n=3 bits)
Range Comparison (3 bits)
Decimal Binary
Sign &
Two’s
One’s
(unsigned) Magnitude compliment Compliment
Two’s compliment
-3
represented as 101
111 represents -1
One’s compliment
-3
represented as 100
7
111
6
110
5
101
4
100
3
011
011
011
011
2
010
010
010
010
1
001
001
001
001
0
000
000/100
000
000/111
-1
101
111
110
-2
110
110
101
-3
111
101
100
-4
Example: 2’s comp, n=4
-1
1111
-2
1110
-3 1101
Example: 1’s comp, n=4
+0
0000
+1
0001
0010 +2
-4 1100
-5 1011
-6 1010
-8
0111
-2
0100 +4
-4 1011
+7
1111
1110
1101
-3 1100
0110 +6
1000
-0
-1
0011 +3
0101 +5
-7 1001
100
-5
0000
+0
+1
0001
0010 +2
0011 +3
0100 +4
1010
-6
0101 +5
0110 +6
1001
1000
-7
0111
+7
5
Converse Mapping (2’s comp)
Two’s Comp. Example
If
n −2
Most significant bit has negative
x = −X n −1 2 n −1 + ∑ X i 2 i weight, remaining have positive
i=0
If
n=5: X = 11011 = -16 + 8 + 0 + 2 + 1 = -5
X = 01011 = 0 + 8 + 0 + 2 + 1 = 11
€
n −2
x = −X n −1 2 n −1 + ∑ X i 2 i
i=0
Most significant bit has negative
weight, remaining have positive
€
Converse Mapping (1’s comp)
One’s Comp. Example…
Similar in one’s complement (case for Xn-1=1)
n −2
x = −X n −1 (2 n −1 −1) + ∑ X i 2 i
i=0
n −2
x = −X n −1 (2 n −1 −1) + ∑ X i 2 i
€
Most significant bit has negative
weight, remaining have positive.
Weight of MSB is different
because C=2n-1. Intuition is that
You have to add 1 to jump over
The extra representation of 0.
n=5: X = 11011 = -(16-1) + 8 + 0 + 2 + 1 = -4
X = 01011 = 0 + 8 + 0 + 2 + 1 = 11
i=0
Remember this! We’ll use it later when we need to
adjust things in arrays of signed addition. Think of
partial product arrays in multiplication….
€
Sign Bits
Conveniently, sign is determined by
high-order bit
Addition (unsigned)
Adding two n-bit operands results in n+1 result bits
Usually
call the n+1 bit Cout
Because
(Assuming xR = C/2 is
assigned to represent
x = -C/2)
In
terms of digit vectors
= overflow!
Cout
6
Addition (Signed)
Addition: two’s comp.
Assume no overflow for a moment…
C=2n, and mod2n means ignore Xn
(the carry out)!
Makes
Use
addition simple – add the numbers and ignore
the carry out
the property
xR
yR
+
cout
cin
zR
Addition: one’s comp.
Addition: one’s comp.
C=rn-1, so mod operation is not as easy
zR=wRmod(2n-1)
If the cout is 1, subtract 2n (ignore cout), and add 1
(end-around carry)
xR
So:
cin
zR
Change of Sign
+
cout
Ignore
cout
yR
Change of Sign
Start with bitwise negation
every bit in the digit vector
Boolean style:
One’s Complement:
Flip
{−A = C − A = r
Fundamental property of n-digit radix-r
+
n
−1 − A = A
if A ≥ 0
Two’s Complement:
€
{−A = C − A = r
+
n
− A = A +1
if A ≥ 0
€
7
Another two’s comp. check
Verify the property
Use
Two’s comp subtract
two’s complement definition…
yR
xR
+
cout
1 cin
zR
Two’s comp add/subtract
Two’s comp add/subtract
yR
yR
xR
cout
Sub
+
Overflow?
cin
cout
zR
Overflow (unsigned)
Overflow condition means that the result can’t be
represented in n bits
For
unsigned addition, this simply means that the cout
was 1
For n=4, this means the result was bigger than 15
10102 (1010) + 11002 (1210) = 101102 (2210)
Sub
xR
+
zR
cin
ab
00
01
10
11
c
0
1
1
0
Overflow (signed)
Still the same definition – the result can’t be
represented in n bits
But,
now not as easy as looking at cout
4 bits, and two’s comp, answer was smaller than –8
or larger than 7
Overflow if (pos) + (pos) = (neg) 5+6=11 or
(neg) + neg) = (pos) -5+-6=-11
For
Can
you ever have overflow with (pos) + (neg)?
8
Example: 2’s comp, n=4
-1
-2
1111
+0
0000
1110
Overflow (signed)
0001
0010 +2
-3 1101
-4 1100
0100 +4
-6 1010
0101 +5
0110 +6
-7 1001
-8
0111
1000
+7
Overflow (signed)
Implied Digits (unsigned)
Or, consider all possible cases around MSB…
Xn-1
Yn-1
Cn-1
Cn
Zn-1
0
0
0
0
0
No
0
0
1
0
1
Yes
0
1
0
0
1
No
0
1
1
1
0
No
1
0
0
0
1
No
1
0
1
1
0
No
1
1
0
1
0
Yes
1
1
1
1
1
No
Signed numbers can be thought of as having infinite
replicas of the sign bit to the left
Four
bits:
OVF
Changing number of bits (signed)
if result is different sign
0011 +3
-5 1011
Overflow only possible if args are same sign
Overflow
+1
Unsigned numbers have an infinite number of
leading 0’s
5,243
1
= …0,000,000,000,005,234
1010 = …0 0000 0000 0001 1010
Changing from n bits to m bits (m>n) is a simple
matter of padding with 0’s to the left
Shifting
Shifting corresponds to multiply and divide by
powers of 2
Left arithmetic shift
Shift
Eight
bits:
in 0’s in LSB, OVF if
Right arithmetic shift
Divide
by 2 (integer result)(1-bit shift)
Remember
to copy the sign bit in empty MSB!
9
Multiplication (unsigned)
Multiplication (unsigned)
Pencil and paper method
Compute
n terms of
and then sum them
The
ith term requires an i-position shift, and a
multiplication of x by the single digit Yi
Requires n-1 adders
Multiplication (unsigned)
Multiplication (unsigned)
B0
B1
B2
B3
Multiplication (unsigned)
Serial Multiplicaton (unsigned)
Instead of using n-1 adders, can iterate with 1
takes n steps for n bits
10
Multiplication (signed!)
Remember that MSB has negative weight
Division (unsigned)
x=qd+w (quotient, divisor, remainder)
0<d, x<rnd (precludes /0 and OVF)
Basic division is n iterations of the recurrence
w[0] = x
Consider
Add
partial products as normal
Subtract multiplicand in last step…
w[ j +1] = rw[ j] − d ∗qn −1− j
j = 0,...,n −1
n −1
where q = ∑ qi r i and d ∗ = dr n
i=0
i.e.
€
Division (unsigned)
divisor is aligned with most-significant half of
residual
Long Division
In each step of the iteration
Get
one digit of quotient
of digit is bounded such that
Value
This
means you find the right digit such that the current
remainder is less than (shifted) divisor
In
binary you only have to guess 1 or 0
1 and fix if you’re wrong (restoring)
Guess
Restoring Division
1.
2.
3.
4.
5.
Restoring Division
Shift current result one bit left
Subtract divisor from this result
If the result of step 2 is neg,
q=0, else q=1
If the result of step 2 is neg, restore old value of
result by adding divisor back
Repeat n times…
This is what the recurrence in the book says…
11
Restoring Division
Restoring Division Example
Shift
Subtract divisor (add negative)
use tentative partial residual to decide on quotient bit
partial residual was negative, so restore by adding divisor back in
“real” partial residual is starting point for next iteration
Shift
Subtract divisor (add negative)
use tentative partial residual to decide on quotient bit
partial residual was positive, so residual is correct – no restoration needed
Shift
Subtract divisor (add negative)
use tentative partial residual to decide on quotient bit
partial residual was negative, so restore by adding divisor back in
“real” partial residual is starting point for next iteration
Shift
Subtract divisor (add negative)
use tentative partial residual to decide on quotient bit
partial residual was positive, so residual is correct – no restoration needed
Non-performing Division
Consider what happens
Non-restoring Division
Result
at each step is 2r-d (r is current result)
If the result is negative, we restore by adding d back in
But, if you store the result in a separate place and don’t
update the result until you know if it’s negative, then you
can save some restoring steps
Non-restoring Division
Consider again
At
each step 2residual-d
it’s negative, restore to 2r by adding d back in
Then shift to get 4r, then subtract getting 4r-d
Suppose you don’t restore, but continued with the shift
resulting in 4r-2d
Now add d instead of subtract resulting in 4r-d
That’s what you wanted!
If
Non-restoring Division Example
For positive partial residual – subtract divisor
For negative partial residual – add divisor back in
This corrects for the mistake you made on the last iteration…
If the last residual is negative – do one final restoration
12
Whew!
Basic number representation systems
Unsigned,
signed
Conversions
Basic addition, subtraction of signed numbers
Multiplication of unsigned and signed
Division of signed
Now let’s speed up the operations!
13