Lecture 9 Basic Dividers 1 Required Reading Behrooz Parhami Computer Arithmetic Algorithms and Hardware Design Chapter 13 B

Document Sample
Lecture 9 Basic Dividers 1 Required Reading Behrooz Parhami Computer Arithmetic Algorithms and Hardware Design Chapter 13 B Powered By Docstoc
					Lecture 9



        Basic Dividers



                         1
                   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:
http://www.ece.ucsb.edu/~parhami/text_comp_arit_1ed.htm#errors
              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
   Notation
      and
Basic Equations
                   Notation

z Dividend               z2k-1z2k-2 . . . z2 z1 z0

d Divisor                dk-1dk-2 . . . d1 d0

q Quotient               qk-1qk-2 . . . q1 q0

s   Remainder            sk-1sk-2 . . . s1 s0
    (s = z - dq)

                                                5
   Basic Equations of Division


            z=dq +s

             |s|<|d|

          sign(s) = sign(z)


  z>0                       z<0
0s<|d|                  -|d|<s0
                                    6
     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 2 k + z L < d 2 k

                             zH < d
                                                                   7
Sequential Integer Division
     Basic Equations


             s(0) = z

   s(j) = 2 s(j-1) - qk-j (2k d)

           s(k) = 2k s



                                   8
             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(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
                                                                  9
Fig. 13.2 Examples of sequential division with integer
              and fractional operands.




                                                         10
Fractional Division
      Unsigned Fractional Division

zfrac Dividend          .z-1z-2 . . . z-(2k-1)z-2k

dfrac Divisor           .d-1d-2 . . . d-(k-1) d-k

qfrac Quotient          .q-1q-2 . . . q-(k-1) q-k

sfrac Remainder   .000…0s-(k+1) . . . s-(2k-1) s-2k
                    k bits

                                               12
        Integer vs. Fractional Division
For Integers:
                          z=qd+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           qfrac = q 2-k
                dfrac = d 2-k            sfrac = s 2-2k   13
     Unsigned Fractional Division Overflow
Condition for no overflow:


                   zfrac < dfrac




                                       14
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)

                                    15
           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(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-1 2-1 + q-2 2-2 + q-3 2-3 + … + q-k2-k) =
     = 2k zfrac - (2k dfrac) qfrac = 2k (zfrac - dfrac qfrac) = 2k sfrac
                                                                  16
Restoring Unsigned Integer
         Division
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)

                                      18
Fig. 13.6 Example of restoring unsigned division.




                                                    19
Fig. 13.5 Shift/subtract sequential restoring divider   .




                                                            20
Non-Restoring Unsigned
   Integer Division
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
  else
      q0 = 0
      Correction step
Non-Restoring Unsigned Integer Division
            Correction step

                s = 2-k · s(k)

                z=qd+s

        z, q, d ≥ 0          s<0


           z = (q-1) d + (s+d)
              z = q’ d + s’


                                   23
Fig. 13.7 Example of nonrestoring unsigned division.




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




                                                       25
Signed Integer Division
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) = 2 s(j-1) - 2k d

 s(j+1) = 2 s(j) - 2k d =              s(j+1) = 2 s(j) + 2k d =
        = 4 s(j-1) - 2k d                     = 2 (2 s(j-1) - 2k d) + 2k d =
                                              = 4 s(j-1) - 2k d
                                                                         27
         Signed Integer Division
             z   d


 |z|   |d|        sign(z)   sign(d)


 Unsigned
 division
                 sign(s) = sign(z)
|q|    |s|                    + sign(z) = sign(d)
                 sign(q) =
                              - sign(z)  sign(d)

                                             28
             q       s
    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




                                                       29
    Non-Restoring
Signed Integer Division
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

                                                             31
Non-Restoring Signed Integer Division
                Correction step

                      s = 2-k · s(k)

                      z=qd+s

                 sign(s) = sign(z)


z = (q-1) d + (s+d)                    z = (q+1) d + (s-d)
   z = q’ d + s’                          z = q” d + s”


                                                             32
    Fig. 13.9 Example of nonrestoring signed division.
========================
z            0010 0001
2 4d       1 1001
–2  4d     0 0111
========================
s(0)       0 0010 0001
2s (0)     0 0100 001                 sign(s(0))  sign(d),
+2  4d     1 1001                     so set q3 = -1 and add
––––––––––––––––––––––––
s(1)       1 1101 001
2s (1)     1 1010 01                  sign(s(1)) = sign(d),
+(–24d)    0 0111                     so set q2 = 1 and subtract
––––––––––––––––––––––––
s(2)       0 0001 01
2s (2)     0 0010 1                   sign(s(2))  sign(d),
+2  4d     1 1001                     so set q1 = -1 and add
––––––––––––––––––––––––
s(3)       1 1011 1
2s (3)     1 0111                     sign(s(3)) = sign(d),
+(–2   4d) 0 0111                     so set q0 = 1 and subtract
––––––––––––––––––––––––
s(4)       1 1110                     sign(s(4))  sign(z),
+(–2   4d) 0 0111                     so perform corrective subtraction
––––––––––––––––––––––––
s(4)       0 0101                p=     0 1 0 1        Shift, compl MSB
s                     0101            1 1 0 1 1       Add 1 to correct
q                   - 1 1 -1 1
========================                1 1 0 0       Check: 33/(-7) = -4   33
   BSD  2’s Complement Conversion

         q = (qk-1 qk-2 . . . q1 q0)BSD =

           = (pk-1 pk-2 . . . p1 p0 1)2’s complement

where                   Example:
                           qBSD              1 -1 1 1
    qi    pi
    -1    0                   p              1 011
     1    1
                           q2’scomp          00111 =0111

           no overflow if pk-2 = pk-1        (qk-1  qk-2)   34
Fig. 13.10 Shift-subtract sequential nonrestoring divider.

                                         NOTE:
                                         1.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


                                                               35

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:16
posted:3/6/2012
language:
pages:35