![Page 1: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/1.jpg)
Arithmetic IIICPSC 321
Andreas Klappenecker
![Page 2: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/2.jpg)
Any Questions?
![Page 3: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/3.jpg)
Today’s Menu
AdditionMultiplicationFloating Point Numbers
![Page 4: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/4.jpg)
Recall: Full Adder
cin
ab
cout
s
3 gates delay for first adder, 2(n-1) for remaining adders
![Page 5: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/5.jpg)
Ripple Carry Adders
• Each gates causes a delay• our example: 3 gates for carry generation • book has example with 2 gates
• Carry might ripple through all n adders• O(n) gates causing delay• intolerable delay if n is large
• Carry lookahead adders
![Page 6: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/6.jpg)
Faster Adders
cin a b cout s
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1
cout=ab+cin(a xor b) =ab+acin+bcin
=ab+(a+b)cin
= g + p cin
Generate g = abPropagate p = a+b
Why are they called like that?
![Page 7: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/7.jpg)
Fast Adders
Iterate the idea, generate and propagateci+1 = gi + pici
= gi + pi(gi-1 + pi-1 ci-1)
= gi + pigi-1+ pipi-1ci-1
= gi + pigi-1+ pipi-1gi-2 +…+ pipi-1 …p1g0
+pipi-1 …p1p0c0
Two level AND-OR circuit Carry is known early!
![Page 8: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/8.jpg)
• Need to support the set-on-less-than instruction
(slt)
• remember: slt is an arithmetic instruction
• produces 1 if rs < rt and 0 otherwise
• use subtraction: (a-b) < 0 implies a < b
• Need to support test for equality (beq $t5, $t6,
$t7)
• use subtraction: (a-b) = 0 implies a = b
A Simple ALU for MIPS
![Page 9: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/9.jpg)
ALU
000 = and001 = or010 = add110 = subtract111 = slt
•Note: zero is a 1 when the result is zero!Set
a31
0
Result0a0
Result1a1
0
Result2a2
0
Operation
b31
b0
b1
b2
Result31
Overflow
Bnegate
Zero
ALU0Less
CarryIn
CarryOut
ALU1Less
CarryIn
CarryOut
ALU2Less
CarryIn
CarryOut
ALU31Less
CarryIn
![Page 10: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/10.jpg)
Multipliers
![Page 11: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/11.jpg)
• More complicated than addition• accomplished via shifting and addition• Let's look at 3 versions based on the grade school
algorithm
0010 (multiplicand)__ x_1011 (multiplier)
0010 x 1 00100 x 1 001000 x 0 0010000 x 1 00010110 • Shift and add if multiplier bit equals 1
Multiplication
![Page 12: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/12.jpg)
Multiplication
Done
1. TestMultiplier0
1a. Add multiplicand to product andplace the result in Product register
2. Shift the Multiplicand register left 1 bit
3. Shift the Multiplier register right 1 bit
32nd repetition?
Start
Multiplier0 = 0Multiplier0 = 1
No: < 32 repetitions
Yes: 32 repetitions
64-bit ALU
Control test
MultiplierShift right
ProductWrite
MultiplicandShift left
64 bits
64 bits
32 bits
0010 (multiplicand)__ x_1011 (multiplier) 0010 x 1 00100 x 1
001000 x 0 0010000 x 1
0010110
![Page 13: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/13.jpg)
Multiplication
If each step took a clock cycle, this algorithm would use almost 100 clock cycles to multiply two 32-bit numbers.
Requires 64-bit wide adderMultiplicand register 64-bit wide
![Page 14: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/14.jpg)
Variations on a Theme
• Product register has to be 64-bit• Nothing we can do about that!• Can we take advantage of that fact?• Yes! Add multiplicand to 32 MSBs• product = product >> 1• Repeat last steps
0010 (multiplicand)__ x_1011 (multiplier) 0010 x 1 00100 x 1
001000 x 0 0010000 x 1
0010110
![Page 15: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/15.jpg)
Second Version
MultiplierShift right
Write
32 bits
64 bits
32 bits
Shift right
Multiplicand
32-bit ALU
Product Control test
Done
1. TestMultiplier0
1a. Add multiplicand to the left half ofthe product and place the result inthe left half of the Product register
2. Shift the Product register right 1 bit
3. Shift the Multiplier register right 1 bit
32nd repetition?
Start
Multiplier0 = 0Multiplier0 = 1
No: < 32 repetitions
Yes: 32 repetitions
![Page 16: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/16.jpg)
Version 1 versus Version 2
MultiplierShift right
Write
32 bits
64 bits
32 bits
Shift right
Multiplicand
32-bit ALU
Product Control test
64-bit ALU
Control test
MultiplierShift right
ProductWrite
MultiplicandShift left
64 bits
64 bits
32 bits
![Page 17: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/17.jpg)
Critique
• Registers needed for • multiplicand• multiplier• product
• Use lower 32 bits of product register:• place multiplier in lower 32 bits• add multiplicand to higher 32 bits• product = product >> 1• repeat
![Page 18: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/18.jpg)
Final Version
ControltestWrite
32 bits
64 bits
Shift rightProduct
Multiplicand
32-bit ALU
Done
1. TestProduct0
1a. Add multiplicand to the left half ofthe product and place the result inthe left half of the Product register
2. Shift the Product register right 1 bit
32nd repetition?
Start
Product0 = 0Product0 = 1
No: < 32 repetitions
Yes: 32 repetitionsMultiplier (shifts right)
![Page 19: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/19.jpg)
Summary
It was possible to improve upon the well-known grade school algorithm by• reducing the adder from 64 to 32
bits• keeping the multiplicand fixed• shifting the product register• omitting the multiplier register
![Page 20: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/20.jpg)
The Booth Multiplier
Let’s kick it up a notch!
![Page 21: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/21.jpg)
Runs of 1’s
• 011102 = 14 = 8+4+2 = 16 – 2
• Runs of 1s (current bit, bit to the right):
• 10 beginning of run• 11 middle of a run• 01 end of a run of 1s• 00 middle of a run of 0s
![Page 22: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/22.jpg)
Run’s of 1’s
• 0111 1111 11002 = 2044• How do you get this conversion
quickly?• 0111 11112 = 128 – 1 = 127• 0111 1111 11112 = 2048 – 1• 0111 1111 11002 = 2048 – 1 – 3 =
2048 – 4
![Page 23: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/23.jpg)
0010
0110
0000 shift
-0010 sub
0000 shift
0010 add
00001100
Example
0010
0110
0000 shift
0010 add
0010 add
0000 shift
00001100
![Page 24: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/24.jpg)
Booth Multiplication
Current and previous bit
00: middle of run of 0s, no action01: end of a run of 1s, add multiplicand10: beginning of a run of 1s, subtract
mcnd11: middle of string of 1s, no action
![Page 25: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/25.jpg)
Example: 0010 x 0110
Iteration
Mcand
Step Product
0 0010 Initial values 0000 0110,0
1 0010 0010
00: no op arith>> 1
0000 0110,0
0000 0011,0
2 0010 0010
10: prod-=Mcandarith>> 1
1110 0011,0 1111 0001,1
3 0010 0010
11: no oparith>> 1
1111 0001,1 1111 1000,1
4 0010
0010
01: prod+=Mcandarith>> 1
0001 1000,1 0000 1100,0
![Page 26: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/26.jpg)
Negative numbers
Booth’s multiplication works also with negative numbers:2 x -3 = -6 00102 x 11012 = 1111 10102
![Page 27: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/27.jpg)
Negative Numbers
00102 x 11012 = 1111 10102
0) Mcnd 0010 Prod 0000 1101,0
1) Mcnd 0010 Prod 1110 1101,1 sub
1) Mcnd 0010 Prod 1111 0110,1 >>
2) Mcnd 0010 Prod 0001 0110,1 add
2) Mcnd 0010 Prod 0000 1011,0 >>
3) Mcnd 0010 Prod 1110 1011,0 sub
3) Mcnd 0010 Prod 1111 0101,1 >>
4) Mcnd 0010 Prod 1111 0101,1 nop
4) Mcnd 0010 Prod 1111 1010,1 >>
![Page 28: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/28.jpg)
Summary
• Extends the final version of the grade school algorithm
• Simple change: add, subtract, or do nothing if last and previous bit respectively satisfy 0,1; 1,0 or 0,0; 1,1
• 0111 11002 = 128 – 4 = 1000 0002 – 0000 01002
![Page 29: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/29.jpg)
Floating Point Numbers
![Page 30: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/30.jpg)
Floating Point Numbers
We often use calculations based on real numbers, such as• e = 2.71828…• Pi = 3.14592…We represent approximations to such numbers by floating point numbers• 1.xxxxxxxxxx2 x 2yyyy
![Page 31: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/31.jpg)
Floating-Point Representation: float
We need to distribute the 32 bits among sign, exponent, and significand• seeeeeeeexxxxxxxxxxxxxxxxxxxxxxxThe general form of such a number is • (-1)s x F x 2E • s is the sign, F is derived from the significand field, and E is derived from the exponent field
![Page 32: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/32.jpg)
Floating Point Representation: double
• 1 bit sign, 11 bits for exponent, 52 bits for significand
• seeeeeeeeeeexxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Range of float: 2.0 x 10-38 … 2.0 x 1038
Range of double: 2.0 x 10-308 … 2.0 x 10308
![Page 33: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/33.jpg)
IEEE 754 Floating-Point Standard
• Makes leading bit of normalized binary number implicit 1 + significand
• If significand is s1 s2 s3 s4 s5 s6 … then the value is
(-1)s x (1 + s1/2 + s2/4 + s3/8 + … ) 2E
• Design goal of IEEE 754: Integer comparisons should yield meaningful comparisons for floating point numbers
![Page 34: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/34.jpg)
IEEE 754 Standard
• Negative exponents are a difficulty for sorting
• Idea: most positive … most negative 1111 1111 … 0000 0000• IEEE 754 uses a bias of 127 for single
precision. • Exponent -1 is represented by -1 + 127 = 126
![Page 35: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/35.jpg)
IEEE 754 Example
Represent -0.75 in single precision format. -0.75 = -3/4 = -112 / 4 = -0.112
In scientific notation: -0.11 x 20 = -1.1 x 2-1
the latter form is normalized sc. notation
Value: (-1)s x (1+ significand) x 2(Expnt – 127)
![Page 36: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/36.jpg)
Example (cont’d)
• -1.1 x 2-1 = (-1)1 x (1 + .1000 0000 0000 0000 0000
000) x 2(126 – 127)
The single precision representation is 1 0111 1110 1000 0000 0000 0000 0000
000
BAM!
![Page 37: Arithmetic III CPSC 321 Andreas Klappenecker. Any Questions?](https://reader036.vdocument.in/reader036/viewer/2022062714/56649d6c5503460f94a4b3f8/html5/thumbnails/37.jpg)
Conclusion
• We learned how to multiply• Three variations on the grade school
algorithm • Booth multiplication• Floating point representation a la IEEE 754
(Photo’s are courtesy of www.emerils.com,some graphs are due to Patterson and Hennessy)