Presentation is loading. Please wait.

Presentation is loading. Please wait.

Lecture 9 Basic Dividers.

Similar presentations


Presentation on theme: "Lecture 9 Basic Dividers."— Presentation transcript:

1 Lecture 9 Basic Dividers

2 Computer Arithmetic: Algorithms and Hardware Design
Required Reading Behrooz Parhami, Computer Arithmetic: Algorithms and Hardware Design Chapter 13, Basic Division Schemes 13.1, Shift/Subtract Division Algorithms 13.3, Restoring Hardware Dividers 13.4, Non-Restoring and Signed Division Note errata at:

3 Recommended Reading J-P. Deschamps, G. Bioul, G. Sutter, Synthesis of Arithmetic Circuits: FPGA, ASIC and Embedded Systems Chapter 6, Arithmetic Operations: Division 6.1, Natural Numbers 6.2.1, General Algorithm 6.2.2, Restoring Division Algorithm 6.2.3, Base-2 Non-Restoring Division Algorithm

4 Notation and Basic Equations

5 Notation z Dividend z2k-1z2k z2 z1 z0 d Divisor dk-1dk d1 d0 q Quotient qk-1qk q1 q0 s Remainder sk-1sk s1 s0 (s = z - dq)

6 Basic Equations of Division
z = d q + s | s | < | d | sign(s) = sign(z) z > 0 0  s < | d | z < 0 - | d | < s  0

7 Unsigned Integer Division Overflow
Must check overflow because obviously the quotient q can also be 2k bits. For example, if the divisor d is 1, then the quotient q is the dividend z, which is 2k bits Condition for no overflow (i.e. q fits in k bits): z = q d + s < (2k-1) d + d = d 2k z = zH 2k + zL < d 2k zH < d

8 Sequential Integer Division
Basic Equations s(0) = z s(j) = 2 s(j-1) - qk-j (2k d) s(k) = 2k s

9 Sequential Integer Division
Justification s(1) = 2 z - qk-1 (2k d) s(2) = 2(2 z - qk-1 (2k d)) - qk-2 (2k d) s(3) = 2(2(2 z - qk-1 (2k d)) - qk-2 (2k d)) - qk-3 (2k d) s(k) = 2( (2(2 z - qk-1 (2k d)) - qk-2 (2k d)) - qk-3 (2k d) . . . - q0 (2k d) = = 2k z - (2k d) (qk-1 2k-1 + qk-2 2k-2 + qk-3 2k-3 + … + q020) = = 2k z - (2k d) q = 2k (z - d q) = 2k s

10 Fig. 13.2 Examples of sequential division with integer and fractional operands.

11 Fractional Division

12 Unsigned Fractional Division
zfrac Dividend z-1z z-(2k-1)z-2k dfrac Divisor d-1d d-(k-1) d-k qfrac Quotient q-1q q-(k-1) q-k sfrac Remainder …0s-(k+1) s-(2k-1) s-2k k bits

13 Integer vs. Fractional Division
For Integers: z = q d + s  2-2k z 2-2k = (q 2-k) (d 2-k) + s (2-2k) For Fractions: zfrac = qfrac dfrac + sfrac where zfrac = z 2-2k dfrac = d 2-k qfrac = q 2-k sfrac = s 2-2k

14 Unsigned Fractional Division Overflow
Condition for no overflow: zfrac < dfrac

15 Sequential Fractional Division
Basic Equations s(0) = zfrac s(j) = 2 s(j-1) - q-j dfrac 2k · sfrac = s(k) sfrac = 2-k · s(k)

16 Sequential Fractional Division
Justification s(1) = 2 zfrac - q-1 dfrac s(2) = 2(2 zfrac - q-1 dfrac) - q-2 dfrac s(3) = 2(2(2 zfrac - q-1 dfrac) - q-2 dfrac) - q-3 dfrac s(k) = 2( (2(2 zfrac - q-1 dfrac) - q-2 dfrac) - q-3 dfrac . . . - q-k dfrac = = 2k zfrac - dfrac (q-1 2k-1 + q-2 2k-2 + q-3 2k-3 + … + q-k20) = = 2k zfrac - dfrac 2k (q q q … + q-k2-k) = = 2k zfrac - (2k dfrac) qfrac = 2k (zfrac - dfrac qfrac) = 2k sfrac

17 Restoring Unsigned Integer Division

18 Restoring Unsigned Integer Division
s(0) = z for j = 1 to k if 2 s(j-1) - 2k d > 0 qk-j = 1 s(j) = 2 s(j-1) - 2k d else qk-j = 0 s(j) = 2 s(j-1)

19 Fig. 13.6 Example of restoring unsigned division.

20 Fig. 13.5 Shift/subtract sequential restoring divider.

21 Non-Restoring Unsigned Integer Division

22 Non-Restoring Unsigned Integer Division
s(1) = 2 z - 2k d for j = 2 to k if s(j-1)  0 qk-(j-1) = 1 s(j) = 2 s(j-1) - 2k d else qk-(j-1) = 0 s(j) = 2 s(j-1) + 2k d end for if s(k)  0 q0 = 1 q0 = 0 Correction step

23 Non-Restoring Unsigned Integer Division
Correction step s = 2-k · s(k) z = q d + s z, q, d ≥ s<0 z = (q-1) d + (s+d) z = q’ d + s’

24 Fig. 13.7 Example of nonrestoring unsigned division.

25 Fig. 13.8 Partial remainder variations for restoring and nonrestoring division.

26 Non-Restoring Unsigned Integer Division
Justification s(j-1) ≥ 0 2 s(j-1) - 2k d < 0 2 (2 s(j-1) ) - 2k d ≥ 0 Restoring division Non-Restoring division s(j) = 2 s(j-1) s(j+1) = 2 s(j) - 2k d = = 4 s(j-1) - 2k d s(j) = 2 s(j-1) - 2k d s(j+1) = 2 s(j) + 2k d = = 2 (2 s(j-1) - 2k d) + 2k d = = 4 s(j-1) - 2k d

27 Signed Integer Division

28 Signed Integer Division
z d | z | | d | sign(z) sign(d) Unsigned division sign(s) = sign(z) + sign(z) = sign(d) | q | | s | sign(q) = - sign(z)  sign(d) q s

29 Examples of Signed Integer Division
Examples of division with signed operands z = 5 d = 3  q = 1 s = 2 z = 5 d = –3  q = –1 s = 2 z = –5 d = 3  q = –1 s = –2 z = –5 d = –3  q = 1 s = –2 Magnitudes of q and s are unaffected by input signs Signs of q and s are derivable from signs of z and d

30 Non-Restoring Signed Integer Division

31 Non-Restoring Signed Integer Division
s(0) = z for j = 1 to k if sign(s(j-1)) == sign(d) qk-j = 1 s(j) = 2 s(j-1) - 2k d = 2 s(j-1) - qk-j (2k d) else qk-j = -1 s(j) = 2 s(j-1) + 2k d = 2 s(j-1) - qk-j (2k d) q = BSD_2’s_comp_conversion(q) Correction_step

32 Non-Restoring Signed Integer Division
Correction step s = 2-k · s(k) z = q d + s sign(s) = sign(z) z = (q-1) d + (s+d) z = q’ d + s’ z = (q+1) d + (s-d) z = q” d + s”

33 Fig. 13.9 Example of nonrestoring signed division.
======================== z 24d –24d s(0) 2s(0) sign(s(0))  sign(d), +24d so set q3 = -1 and add –––––––––––––––––––––––– s(1) 2s(1) sign(s(1)) = sign(d), +(–24d) so set q2 = 1 and subtract s(2) 2s(2) sign(s(2))  sign(d), +24d so set q1 = -1 and add s(3) 2s(3) sign(s(3)) = sign(d), +(–24d) so set q0 = 1 and subtract s(4) sign(s(4))  sign(z), +(–24d) so perform corrective subtraction s(4) s q ======================== p = Shift, compl MSB Add 1 to correct Check: 33/(-7) = -4

34 BSD  2’s Complement Conversion
q = (qk-1 qk q1 q0)BSD = = (pk-1 pk p1 p0 1)2’s complement where Example: qBSD qi pi -1 p 1 1 q2’scomp = no overflow if pk-2 = pk (qk-1  qk-2)

35 Fig. 13.10 Shift-subtract sequential nonrestoring divider.
NOTE: qk-j and add/subtract control determined by both divisor sign and sign of new partial remainder (via an XOR operation). Divisor sign is 0 for unsigned division. 2. note that cout is the complement of the sign of the new partial remainder, i.e. if new partial remainder = 0, then cout = 1; if new partial remainder = 1, then cout=0


Download ppt "Lecture 9 Basic Dividers."

Similar presentations


Ads by Google