ece/cs 552: integer dividers
DESCRIPTION
Basic Arithmetic and the ALU Integer division Restoring, non-restoring These are not crucial for the projectTRANSCRIPT
![Page 1: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/1.jpg)
ECE/CS 552: Integer Dividers
© Prof. Mikko Lipasti
Lecture notes based in part on slides created by Mark Hill, David Wood, Guri Sohi, John Shen and Jim Smith
![Page 2: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/2.jpg)
Basic Arithmetic and the ALU
• Integer division– Restoring, non-restoring
• These are not crucial for the project
2
![Page 3: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/3.jpg)
Integer Division
• Again, back to 3rd grade (74 ÷ 8 = 9 rem 2)
3
1 0 0 1 Quotient
Divisor 1 0 0 0 1 0 0 1 0 1 0 Dividend
- 1 0 0 0
1 0
1 0 1
1 0 1 0
- 1 0 0 0
1 0 Remainder
![Page 4: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/4.jpg)
Integer Division• How does hardware know if division fits?
– Condition: if remainder ≥ divisor– Use subtraction: (remainder – divisor) ≥ 0
• OK, so if it fits, what do we do?– Remaindern+1 = Remaindern – divisor
• What if it doesn’t fit?– Have to restore original remainder
• Called restoring division
4
![Page 5: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/5.jpg)
Integer Division
5Done
Test Remainder
2a. Shift the Quotient register to the left,setting the new rightmost bit to 1
3. Shift the Divisor register right 1 bit
33rd repetition?
Start
Remainder < 0
No: < 33 repetitions
Yes: 33 repetitions
2b. Restore the original value by addingthe Divisor register to the Remainder
register and place the sum in theRemainder register. Also shift the
Quotient register to the left, setting thenew least significant bit to 0
1. Subtract the Divisor register from theRemainder register and place the result in the Remainder register
Remainder > 0–
1 0 0 1 QuotientDivisor
1 0 0 0 1 0 0 1 0 1 0 Dividend
- 1 0 0 01 01 0 11 0 1 0
- 1 0 0 01 0 Remaind
er
![Page 6: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/6.jpg)
Integer Division
6
64-bit ALU
Controltest
QuotientShift left
RemainderWrite
DivisorShift right
64 bits
64 bits
32 bits
1 0 0 1 QuotientDivisor
1 0 0 0 1 0 0 1 0 1 0 Dividend
- 1 0 0 01 01 0 11 0 1 0
- 1 0 0 01 0 Remaind
er
![Page 7: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/7.jpg)
Division Improvements
• Skip first subtract– Can’t shift ‘1’ into quotient anyway– Hence shift first, then subtract
• Undo extra shift at end
• Hardware similar to multiplier– Can store quotient in remainder register– Only need 32b ALU
• Shift remainder left vs. divisor right
7
![Page 8: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/8.jpg)
Improved Divider
8Done. Shift left half of Remainder right 1 bit
Test Remainder
3a. Shift the Remainder register to the left, setting the new rightmost bit to 1
32nd repetition?
Start
Remainder < 0
No: < 32 repetitions
Yes: 32 repetitions
3b. Restore the original value by addingthe Divisor register to the left half of theRemainder register and place the sum
in the left half of the Remainder register.Also shift the Remainder register to theleft, setting the new rightmost bit to 0
2. Subtract the Divisor register from theleft half of the Remainder register andplace the result in the left half of the
Remainder register
Remainder 0
1. Shift the Remainder register left 1 bit
–>
![Page 9: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/9.jpg)
Improved Divider
9
Write
32 bits
64 bits
Shift leftShift right
Remainder
32-bit ALU
Divisor
Controltest
![Page 10: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/10.jpg)
Further Improvements
• Division still takes:– 2 ALU cycles per bit position
• 1 to check for divisibility (subtract)• One to restore (if needed)
• Can reduce to 1 cycle per bit– Called non-restoring division– Avoids restore of remainder when test fails
10
![Page 11: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/11.jpg)
Non-restoring Division
• Consider remainder to be restored:Ri = Ri-1 – d < 0
– Since Ri is negative, we must restore it, right?– Well, maybe not. Consider next step i+1:
Ri+1 = 2 x (Ri) – d = 2 x (Ri – d) + d
• Hence, we can compute Ri+1 by not restoring Ri, and adding d instead of subtracting d– Same value for Ri+1 results
• Throughput of 1 bit per cycle
11
![Page 12: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/12.jpg)
NR Division Example
12
Iteration
Step Divisor
Remainder
0Initial values 0010 0000
0111Shift rem left 1 0010 0000
1110
12: Rem = Rem - Div 0010 1110
11103b: Rem < 0 (add next), sll 0
0010 1101 1100
22: Rem = Rem + Div 0010 1111
11003b: Rem < 0 (add next), sll 0
0010 1111 1000
32: Rem = Rem + Div 0010 0001
10003a: Rem > 0 (sub next), sll 1
0010 0011 0001
4Rem = Rem – Div 0010 0001
0001Rem > 0 (sub next), sll 1 0010 0010
0011Shift Rem right by 1 0010 0001
0011
![Page 13: ECE/CS 552: Integer Dividers](https://reader033.vdocument.in/reader033/viewer/2022052308/5a4d1b397f8b9ab05999e218/html5/thumbnails/13.jpg)
Summary
• Integer dividers covered– Multicycle restoring– Non-restoring
• Other approaches– SRT division [Sweeney, Robertson, Tocher] uses lookup tables
• Famous Intel fdiv bug caused by incomplete table
– Newton-Raphson method• Estimate reciprocal, iterate to refine, multiply
– Beyond the scope of this course
13