Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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