CS152 / Kubiatowicz Lec6.1 2/12/03©UCB Spring 2003 CS152 Computer Architecture and Engineering Lecture 6 Multiply, Divide, Shift February 12, 2003 John.

Slides:



Advertisements
Similar presentations
Arithmetic for Computers
Advertisements

Datorteknik IntegerMulDiv bild 1 MIPS mul/div instructions Multiply: mult $2,$3Hi, Lo = $2 x $3;64-bit signed product Multiply unsigned: multu$2,$3Hi,
CMPE 325 Computer Architecture II
Computer Architecture ECE 361 Lecture 6: ALU Design
Prof. John Nestor ECE Department Lafayette College Easton, Pennsylvania ECE Computer Organization Lecture 8 - Multiplication.
Division CPSC 321 Computer Architecture Andreas Klappenecker.
CMPT 334 Computer Organization Chapter 3 Arithmetic for Computers [Adapted from Computer Organization and Design 5 th Edition, Patterson & Hennessy, ©
Lecture Objectives: 1)Perform binary division of two numbers. 2)Define dividend, divisor, quotient, and remainder. 3)Explain how division is accomplished.
Chapter 3 Arithmetic for Computers. Multiplication More complicated than addition accomplished via shifting and addition More time and more area Let's.
EECC550 - Shaaban #1 Lec # 7 Spring MIPS Integer ALU Requirements Add, AddU, Sub, SubU, AddI, AddIU:  2’s complement adder/sub with overflow.
361 div.1 Computer Architecture ECE 361 Lecture 7: ALU Design : Division.
ECE 232 L8.Arithm.1 Adapted from Patterson 97 ©UCBCopyright 1998 Morgan Kaufmann Publishers ECE 232 Hardware Organization and Design Lecture 8 Computer.
CS152 / Kubiatowicz Lec5.1 2/8/99©UCB Spring 1999 CS152 Computer Architecture and Engineering Lecture 5 VHDL, Multiply, Shift Feb 8, 1999 John Kubiatowicz.
Arithmetic IV CPSC 321 Andreas Klappenecker. Any Questions?
Integer Multiplication and Division ICS 233 Computer Architecture and Assembly Language Dr. Aiman El-Maleh College of Computer Sciences and Engineering.
Computer Organization Multiplication and Division Feb 2005 Reading: Portions of these slides are derived from: Textbook figures © 1998 Morgan Kaufmann.
CS151B Computer Systems Architecture Winter 2002 TuTh 2-4pm BH Instructor: Prof. Jason Cong Lecture 6 – ALU Design II: Multiply, Divide, and Floating.
Integer Multiplication and Division
CS141-L3-1Tarun Soni, Summer ‘03 More ALUs and floating point numbers  Today: The rest of chap 4:  Multiplication, Division and Floating point numbers.
Contemporary Logic Design Arithmetic Circuits © R.H. Katz Lecture #24: Arithmetic Circuits -1 Arithmetic Circuits (Part II) Randy H. Katz University of.
David Culler Electrical Engineering and Computer Sciences
1 Lecture 8: Binary Multiplication & Division Today’s topics:  Addition/Subtraction  Multiplication  Division Reminder: get started early on assignment.
Chapter Four Arithmetic and Logic Unit
ECE 15B Computer Organization Spring 2010 Dmitri Strukov Lecture 6: Logic/Shift Instructions Partially adapted from Computer Organization and Design, 4.
Week 7.1Spring :332:331 Computer Architecture and Assembly Language Spring 2005 Week 7 [Adapted from Dave Patterson’s UCB CS152 slides and Mary.
ECE 232 L9.Mult.1 Adapted from Patterson 97 ©UCBCopyright 1998 Morgan Kaufmann Publishers ECE 232 Hardware Organization and Design Lecture 9 Computer Arithmetic.
CS152 Lec6.1 CS152 Computer Architecture and Engineering Lecture 6 VHDL, Multiply, Shift.
Ceg3420 l7 Multiply 1 Fall 1998 © U.C.B. CEG3420 Computer Design Lecture 7: VHDL, Multiply, Shift.
ALU S.Rawat. ALU ALU an Engine for any Computational Silicon. We have different units ALU/FPUs for Integers/Floats respectively. Mainly Decided based.
CS 152 Lec 5.1 CS 152: Computer Architecture and Engineering Lecture 5 Hardware Description Languages, Multiple and Divide Randy H. Katz, Instructor Satrajit.
CS151B Computer Systems Architecture Winter 2002 TuTh 2-4pm BH Instructor: Prof. Jason Cong Lecture 6 – ALU Design II: Multiply, Divide, and Floating.
Cs 152 L5 Cost.1 DAP Fa 1997  UCB ECE Computer Architecture Lecture Notes Adders Shantanu Dutt Univ. of Illinois at Chicago Excerpted from.
Computer Architecture ALU Design : Division and Floating Point
ECE232: Hardware Organization and Design
Copyright 1995 by Coherence LTD., all rights reserved (Revised: Oct 97 by Rafi Lohev, Oct 99 by Yair Wiseman, Sep 04 Oren Kapah) IBM י ב מ 10-1 The ALU.
Lec 13Systems Architecture1 Systems Architecture Lecture 13: Integer Multiplication and Division Jeremy R. Johnson Anatole D. Ruslanov William M. Mongan.
King Fahd University of Petroleum and Minerals King Fahd University of Petroleum and Minerals Computer Engineering Department Computer Engineering Department.
Lecture 6: Multiply, Shift, and Divide
CS152 Computer Architecture and Engineering Lecture 6 Verilog (finish) Multiply, Divide, Shift February 11, 2004 John Kubiatowicz (
Cs 152 l6 Multiply 1 DAP Fa 97 © U.C.B. ECE Computer Architecture Lecture Notes Multiply, Shift, Divide Shantanu Dutt Univ. of Illinois at.
05/03/2009CA&O Lecture 8,9,10 By Engr. Umbreen sabir1 Computer Arithmetic Computer Engineering Department.
CS61C Finishing the Datapath: Subtract, Multiple, Divide Lecture 21
Integer Multiplication and Division
Arithmetic.1 2/15 Computer Arithmetic ALU Performance is critical ( App. C5, C6 4 th ed.)
Integer Multiplication and Division ICS 233 Computer Architecture and Assembly Language Dr. Aiman El-Maleh College of Computer Sciences and Engineering.
Csci 136 Computer Architecture II – Multiplication and Division
Mohamed Younis CMCS 411, Computer Architecture 1 CMSC Computer Architecture Lecture 11 Performing Division March 5,
EI 209 Chapter 3.1CSE, 2015 EI 209 Computer Organization Fall 2015 Chapter 3: Arithmetic for Computers Haojin Zhu ( )
Addition, Subtraction, Logic Operations and ALU Design
CDA 3101 Spring 2016 Introduction to Computer Organization
Division Quotient Divisor Dividend – – Remainder.
1 ALU for Computers (MIPS) design a fast ALU for the MIPS ISA requirements ? –support the arithmetic/logic operations: add, addi addiu, sub, subu, and,
Integer Multiplication and Division COE 301 Computer Organization Dr. Muhamed Mudawar College of Computer Sciences and Engineering King Fahd University.
By Wannarat Computer System Design Lecture 3 Wannarat Suntiamorntut.
Integer Multiplication and Division ICS 233 Computer Architecture & Assembly Language Prof. Muhamed Mudawar College of Computer Sciences and Engineering.
1 Lecture 5Multiplication and Division ECE 0142 Computer Organization.
Computer System Design Lecture 3
Computer Architecture & Operations I
Computer Architecture & Operations I
Integer Multiplication and Division
MIPS mul/div instructions
Part II : Lecture III By Wannarat.
Morgan Kaufmann Publishers
Multiplication & Division
CDA 3101 Summer 2007 Introduction to Computer Organization
CDA 3101 Spring 2016 Introduction to Computer Organization
CS352H: Computer Systems Architecture
Topic 3c Integer Multiply and Divide
Computer Architecture EECS 361 Lecture 6: ALU Design
Number Representation
Presentation transcript:

CS152 / Kubiatowicz Lec6.1 2/12/03©UCB Spring 2003 CS152 Computer Architecture and Engineering Lecture 6 Multiply, Divide, Shift February 12, 2003 John Kubiatowicz ( lecture slides:

CS152 / Kubiatowicz Lec6.2 2/12/03©UCB Spring 2003 Review: Elements of the Design Process °Divide and Conquer (e.g., ALU) Formulate a solution in terms of simpler components. Design each of the components (subproblems) °Generate and Test (e.g., ALU) Given a collection of building blocks, look for ways of putting them together that meets requirement °Successive Refinement (e.g., multiplier, divider) Solve "most" of the problem (i.e., ignore some constraints or special cases), examine and correct shortcomings. °Formulate High-Level Alternatives (e.g., shifter) Articulate many strategies to "keep in mind" while pursuing any one approach. °Work on the Things you Know How to Do The unknown will become “obvious” as you make progress.

CS152 / Kubiatowicz Lec6.3 2/12/03©UCB Spring 2003 Review: ALU Design °Bit-slice plus extra on the two ends °Overflow means number too large for the representation °Carry-look ahead and other adder tricks A M S 32 4 Ovflw ALU0 a0b0 cinco s0 ALU31 a31b31 cinco s31 B32 C/L to produce select, comp, c-in signed-arith and cin xor co

CS152 / Kubiatowicz Lec6.4 2/12/03©UCB Spring 2003 Review: Carry Look Ahead (Design trick: peek) ABC-out 000“kill” 01C-in“propagate” 10C-in“propagate” 111“generate” G = A and B P = A xor B A0 B0 A1 B1 A2 B2 A3 B3 S S S S G P G P G P G P C0 = Cin C1 = G0 + C0  P0 C2 = G1 + G0  P1 + C0  P0  P1 C3 = G2 + G1  P2 + G0  P1  P2 + C0  P0  P1  P2 G C4 =... P

CS152 / Kubiatowicz Lec6.5 2/12/03©UCB Spring 2003 Review: Design Trick: Guess (or “Precompute”) n-bit adder CP(2n) = 2*CP(n) n-bit adder 1 0 Cout CP(2n) = CP(n) + CP(mux) Carry-select adder

CS152 / Kubiatowicz Lec6.6 2/12/03©UCB Spring 2003 Review: Carry Skip Adder: reduce worst case delay 4-bit Ripple Adder A0B S P0 P1 P2 P3 4-bit Ripple Adder A4B S P0 P1 P2 P3 Exercise: optimal design uses variable block sizes Just speed up the slowest case for each block

CS152 / Kubiatowicz Lec6.7 2/12/03©UCB Spring 2003 MIPS arithmetic instructions °InstructionExampleMeaningComments °add add $1,$2,$3$1 = $2 + $33 operands; exception possible °subtractsub $1,$2,$3$1 = $2 – $33 operands; exception possible °add immediateaddi $1,$2,100$1 = $ constant; exception possible °add unsignedaddu $1,$2,$3$1 = $2 + $33 operands; no exceptions °subtract unsignedsubu $1,$2,$3$1 = $2 – $33 operands; no exceptions °add imm. unsign.addiu $1,$2,100$1 = $ constant; no exceptions °multiply mult $2,$3Hi, Lo = $2 x $364-bit signed product °multiply unsignedmultu$2,$3Hi, Lo = $2 x $3 64-bit unsigned product °divide div $2,$3Lo = $2 ÷ $3,Lo = quotient, Hi = remainder ° Hi = $2 mod $3 °divide unsigned divu $2,$3Lo = $2 ÷ $3,Unsigned quotient & remainder ° Hi = $2 mod $3 °Move from Himfhi $1$1 = HiUsed to get copy of Hi °Move from Lomflo $1$1 = LoUsed to get copy of Lo

CS152 / Kubiatowicz Lec6.8 2/12/03©UCB Spring 2003 MULTIPLY (unsigned) °Paper and pencil example (unsigned): Multiplicand 1000 Multiplier Product °m bits x n bits = m+n bit product °Binary makes it easy: 0 => place 0 ( 0 x multiplicand) 1 => place a copy ( 1 x multiplicand) °4 versions of multiply hardware & algorithm: successive refinement

CS152 / Kubiatowicz Lec6.9 2/12/03©UCB Spring 2003 Unsigned Combinational Multiplier °Stage i accumulates A * 2 i if B i == 1 °Q: How much hardware for 32 bit multiplier? Critical path? B0B0 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 B1B1 B2B2 B3B3 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P7 0000

CS152 / Kubiatowicz Lec6.10 2/12/03©UCB Spring 2003 How does it work? °At each stage shift A left ( x 2) °Use next bit of B to determine whether to add in shifted multiplicand °Accumulate 2n bit partial product at each stage B0B0 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 B1B1 B2B2 B3B3 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P

CS152 / Kubiatowicz Lec6.11 2/12/03©UCB Spring 2003 Carry Save addition of 4 integers °Adding:A 2 A 1 A 0 +B 2 B 1 B 0 +C 2 C 1 C 0 +D 2 D 1 D 0 ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ S 4 S 3 S 2 S 1 S 0 °Add Columns first, then rows! °Full Adder = 3  2 element °Can be used to reduce critical path of multiply °Example: 53 bit multiply (for floating point): At least 53 levels with naïve technique Only 9 with Carry save addition!

CS152 / Kubiatowicz Lec6.12 2/12/03©UCB Spring 2003 Unisigned shift-add multiplier (version 1) °64-bit Multiplicand reg, 64-bit ALU, 64-bit Product reg, 32-bit multiplier reg Product Multiplier Multiplicand 64-bit ALU Shift Left Shift Right Write Control 32 bits 64 bits Multiplier = datapath + control

CS152 / Kubiatowicz Lec6.13 2/12/03©UCB Spring 2003 Multiply Algorithm Version 1 ProductMultiplierMultiplicand : : : : : : Shift the Multiplier register right 1 bit. Done Yes: 32 repetitions 2. Shift the Multiplicand register left 1 bit. No: < 32 repetitions 1. Test Multiplier0 Multiplier0 = 0 Multiplier0 = 1 1a. Add multiplicand to product & place the result in Product register 32nd repetition? Start

CS152 / Kubiatowicz Lec6.14 2/12/03©UCB Spring 2003 Observations on Multiply Version 1 °1 clock per cycle =>  100 clocks per multiply Ratio of multiply to add 5:1 to 100:1 °1/2 bits in multiplicand always 0 => 64-bit adder is wasted °0’s inserted in right of multiplicand as shifted => least significant bits of product never changed once formed °Instead of shifting multiplicand to left, shift product to right?

CS152 / Kubiatowicz Lec6.15 2/12/03©UCB Spring 2003 MULTIPLY HARDWARE Version 2 °32-bit Multiplicand reg, 32 -bit ALU, 64-bit Product reg, 32-bit Multiplier reg Product Multiplier Multiplicand 32-bit ALU Shift Right Write Control 32 bits 64 bits Shift Right

CS152 / Kubiatowicz Lec6.16 2/12/03©UCB Spring 2003 How to think of this? B0B0 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 B1B1 B2B2 B3B3 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P Remember original combinational multiplier:

CS152 / Kubiatowicz Lec6.17 2/12/03©UCB Spring 2003 Simply warp to let product move right... °Multiplicand stay’s still and product moves right B0B0 B1B1 B2B2 B3B3 P0P0 P1P1 P2P2 P3P3 P4P4 P5P5 P6P6 P7P A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3 A0A0 A1A1 A2A2 A3A3

CS152 / Kubiatowicz Lec6.18 2/12/03©UCB Spring 2003 Multiply Algorithm Version 2 3. Shift the Multiplier register right 1 bit. Done Yes: 32 repetitions 2. Shift the Product register right 1 bit. No: < 32 repetitions 1. Test Multiplier0 Multiplier0 = 0 Multiplier0 = 1 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 32nd repetition? Start : : : : : : : : : : : : Product Multiplier Multiplicand

CS152 / Kubiatowicz Lec6.19 2/12/03©UCB Spring 2003 Still more wasted space! 3. Shift the Multiplier register right 1 bit. Done Yes: 32 repetitions 2. Shift the Product register right 1 bit. No: < 32 repetitions 1. Test Multiplier0 Multiplier0 = 0 Multiplier0 = 1 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 32nd repetition? Start : : : : : : : : : : : : Product Multiplier Multiplicand

CS152 / Kubiatowicz Lec6.20 2/12/03©UCB Spring 2003 Observations on Multiply Version 2 °Product register wastes space that exactly matches size of multiplier => combine Multiplier register and Product register

CS152 / Kubiatowicz Lec6.21 2/12/03©UCB Spring 2003 MULTIPLY HARDWARE Version 3 °32-bit Multiplicand reg, 32 -bit ALU, 64-bit Product reg, (0-bit Multiplier reg) Product (Multiplier) Multiplicand 32-bit ALU Write Control 32 bits 64 bits Shift Right

CS152 / Kubiatowicz Lec6.22 2/12/03©UCB Spring 2003 Multiply Algorithm Version 3 Done Yes: 32 repetitions 2. Shift the Product register right 1 bit. No: < 32 repetitions 1. Test Product0 Product0 = 0 Product0 = 1 1a. Add multiplicand to the left half of product & place the result in the left half of Product register 32nd repetition? Start : : : : : : : : Product Multiplicand

CS152 / Kubiatowicz Lec6.23 2/12/03©UCB Spring 2003 Observations on Multiply Version 3 °2 steps per bit because Multiplier & Product combined °MIPS registers Hi and Lo are left and right half of Product °Gives us MIPS instruction MultU °How can you make it faster? °What about signed multiplication? easiest solution is to make both positive & remember whether to complement product when done (leave out the sign bit, run for 31 steps) apply definition of 2’s complement -need to sign-extend partial products and subtract at the end Booth’s Algorithm is elegant way to multiply signed numbers using same hardware as before and save cycles -can handle multiple bits at a time

CS152 / Kubiatowicz Lec6.24 2/12/03©UCB Spring 2003 Administrivia °Lab 2 due tomorrow, midnight Execute m:/bin/submit and follow instructions °Lab 3 ready soon (probably not until tomorrow) °Getting kicked out of 306 Starting Wednesday 2/19 in 405 (Monday is a holiday!)

CS152 / Kubiatowicz Lec6.25 2/12/03©UCB Spring 2003 Motivation for Booth’s Algorithm °Example 2 x 6 = 0010 x 0110: 0010 x shift (0 in multiplier) add (1 in multiplier) add (1 in multiplier) shift (0 in multiplier) °ALU with add or subtract gets same result in more than one way: 6= – = – = °For example ° 0010 x shift (0 in multiplier) – 0010 sub (first 1 in multpl.) shift (mid string of 1s) add (prior step had last 1)

CS152 / Kubiatowicz Lec6.26 2/12/03©UCB Spring 2003 Booth’s Algorithm Current BitBit to the RightExplanationExampleOp 10Begins run of 1s sub 11Middle of run of 1s none 01End of run of 1s add 00Middle of run of 0s none Originally for Speed (when shift was faster than add) °Replace a string of 1s in multiplier with an initial subtract when we first see a one and then later add for the bit after the last one beginning of runend of run middle of run –

CS152 / Kubiatowicz Lec6.27 2/12/03©UCB Spring 2003 Booths Example (2 x 7) 1a. P = P - m shift P (sign ext) 1b > nop, shift > nop, shift > add 4a shift 4b done OperationMultiplicandProductnext? 0. initial value > sub

CS152 / Kubiatowicz Lec6.28 2/12/03©UCB Spring 2003 Booths Example (2 x -3) 1a. P = P - m shift P (sign ext) 1b > add a shift P 2b > sub a shift 3b > nop 4a shift 4b done OperationMultiplicandProductnext? 0. initial value > sub

CS152 / Kubiatowicz Lec6.29 2/12/03©UCB Spring 2003 Radix-4 Modified Booth’s Algorithm Current Bit to theExplanationExampleRecode BitsRight 0 00Middle of zeros Single one Begins run of 1s Begins run of 1s Ends run of 1s Ends run of 1s Isolated Middle of run °Same insight as one-bit Booth’s, simply adjust for alignment of 2 bits. °Allows multiplication 2-bits at a time. –

CS152 / Kubiatowicz Lec6.30 2/12/03©UCB Spring 2003 Divide: Paper & Pencil 1001 Quotient Divisor Dividend – – Remainder (or Modulo result) See how big a number can be subtracted, creating quotient bit on each step Binary => 1 * divisor or 0 * divisor Dividend = Quotient x Divisor + Remainder => | Dividend | = | Quotient | + | Divisor | 3 versions of divide, successive refinement

CS152 / Kubiatowicz Lec6.31 2/12/03©UCB Spring 2003 DIVIDE HARDWARE Version 1 °64-bit Divisor reg, 64-bit ALU, 64-bit Remainder reg, 32-bit Quotient reg Remainder Quotient Divisor 64-bit ALU Shift Right Shift Left Write Control 32 bits 64 bits

CS152 / Kubiatowicz Lec6.32 2/12/03©UCB Spring b. Restore the original value by adding the Divisor register to the Remainder register, & place the sum in the Remainder register. Also shift the Quotient register to the left, setting the new least significant bit to 0. Divide Algorithm Version 1 °Takes n+1 steps for n-bit Quotient & Rem. Remainder QuotientDivisor Test Remainder Remainder < 0 Remainder  0 1. Subtract the Divisor register from the Remainder register, and place the result in the Remainder register. 2a. Shift the Quotient register to the left setting the new rightmost bit to Shift the Divisor register right1 bit. Done Yes: n+1 repetitions (n = 4 here) Start: Place Dividend in Remainder n+1 repetition? No: < n+1 repetitions

CS152 / Kubiatowicz Lec6.33 2/12/03©UCB Spring 2003 Divide Algorithm I example (7 / 2) Remainder QuotientDivisor : : : : : : : : : : : : : : : Answer: Quotient = 3 Remainder = 1

CS152 / Kubiatowicz Lec6.34 2/12/03©UCB Spring 2003 Divide: Paper & Pencil Quotient Divisor Dividend – – Remainder (or Modulo result) No way to get a 1 in leading digit! (this is an overflow, i.e quotient would have n+1 bits)  switch order to shift first and then subtract, can save 1 iteration

CS152 / Kubiatowicz Lec6.35 2/12/03©UCB Spring 2003 Observations on Divide Version 1 °1/2 bits in divisor always 0 => 1/2 of 64-bit adder is wasted => 1/2 of divisor is wasted °Instead of shifting divisor to right, shift remainder to left?

CS152 / Kubiatowicz Lec6.36 2/12/03©UCB Spring 2003 Divide Algorithm I example: wasted space Remainder QuotientDivisor : : : : : : : : : : : : : : :

CS152 / Kubiatowicz Lec6.37 2/12/03©UCB Spring 2003 DIVIDE HARDWARE Version 2 °32-bit Divisor reg, 32-bit ALU, 64-bit Remainder reg, 32-bit Quotient reg Remainder Quotient Divisor 32-bit ALU Shift Left Write Control 32 bits 64 bits Shift Left

CS152 / Kubiatowicz Lec6.38 2/12/03©UCB Spring 2003 Divide Algorithm Version 2 Remainder Quotient Divisor b. Restore the original value by adding the Divisor register to the left half of the Remainderregister, &place the sum in the left half of the Remainder register. Also shift the Quotient register to the left, setting the new least significant bit to 0. Test Remainder Remainder < 0 Remainder  0 2. Subtract the Divisor register from the left half of the Remainder register, & place the result in the left half of the Remainder register. 3a. Shift the Quotient register to the left setting the new rightmost bit to Shift the Remainder register left 1 bit. Done Yes: n repetitions (n = 4 here) nth repetition? No: < n repetitions Start: Place Dividend in Remainder

CS152 / Kubiatowicz Lec6.39 2/12/03©UCB Spring 2003 Observations on Divide Version 2 °Eliminate Quotient register by combining with Remainder as shifted left Start by shifting the Remainder left as before. Thereafter loop contains only two steps because the shifting of the Remainder register shifts both the remainder in the left half and the quotient in the right half The consequence of combining the two registers together and the new order of the operations in the loop is that the remainder will shifted left one time too many. Thus the final correction step must shift back only the remainder in the left half of the register

CS152 / Kubiatowicz Lec6.40 2/12/03©UCB Spring 2003 DIVIDE HARDWARE Version 3 °32-bit Divisor reg, 32 -bit ALU, 64-bit Remainder reg, (0-bit Quotient reg) Remainder (Quotient) Divisor 32-bit ALU Write Control 32 bits 64 bits Shift Left “HI”“LO”

CS152 / Kubiatowicz Lec6.41 2/12/03©UCB Spring 2003 Divide Algorithm Version 3 Remainder Divisor b. Restore the original value by adding the Divisor register to the left half of the Remainderregister, &place the sum in the left half of the Remainder register. Also shift the Remainder register to the left, setting the new least significant bit to 0. Test Remainder Remainder < 0 Remainder  0 2. Subtract the Divisor register from the left half of the Remainder register, & place the result in the left half of the Remainder register. 3a. Shift the Remainder register to the left setting the new rightmost bit to Shift the Remainder register left 1 bit. Done. Shift left half of Remainder right 1 bit. Yes: n repetitions (n = 4 here) nth repetition? No: < n repetitions Start: Place Dividend in Remainder

CS152 / Kubiatowicz Lec6.42 2/12/03©UCB Spring 2003 Observations on Divide Version 3 °Same Hardware as Multiply: just need ALU to add or subtract, and 64-bit register to shift left or shift right °Hi and Lo registers in MIPS combine to act as 64-bit register for multiply and divide °Signed Divides: Simplest is to remember signs, make positive, and complement quotient and remainder if necessary Note: Dividend and Remainder must have same sign Note: Quotient negated if Divisor sign & Dividend sign disagree e.g., –7 ÷ 2 = –3, remainder = –1 What about? –7 ÷ 2 = –4, remainder = +1 °Possible for quotient to be too large: if divide 64-bit integer by 1, quotient is 64 bits (“called saturation”)

CS152 / Kubiatowicz Lec6.43 2/12/03©UCB Spring 2003 MIPS logical instructions °InstructionExampleMeaningComment °and and $1,$2,$3$1 = $2 & $33 reg. operands; Logical AND °or or $1,$2,$3$1 = $2 | $33 reg. operands; Logical OR °xor xor $1,$2,$3$1 = $2  $33 reg. operands; Logical XOR °nor nor $1,$2,$3$1 = ~($2 |$3)3 reg. operands; Logical NOR °and immediate andi $1,$2,10$1 = $2 & 10Logical AND reg, constant °or immediate ori $1,$2,10$1 = $2 | 10Logical OR reg, constant °xor immediate xori $1, $2,10 $1 = ~$2 &~10Logical XOR reg, constant °shift left logical sll $1,$2,10$1 = $2 << 10Shift left by constant °shift right logical srl $1,$2,10$1 = $2 >> 10Shift right by constant °shift right arithm. sra $1,$2,10$1 = $2 >> 10Shift right (sign extend) °shift left logical sllv $1,$2,$3$1 = $2 << $3 Shift left by variable °shift right logical srlv $1,$2, $3 $1 = $2 >> $3 Shift right by variable °shift right arithm. srav $1,$2, $3 $1 = $2 >> $3 Shift right arith. by variable

CS152 / Kubiatowicz Lec6.44 2/12/03©UCB Spring 2003 Shifters Two kinds: logical-- value shifted in is always "0" arithmetic-- on right shifts, sign extend msblsb"0" msblsb"0" Note: these are single bit shifts. A given instruction might request 0 to 32 bits to be shifted!

CS152 / Kubiatowicz Lec6.45 2/12/03©UCB Spring 2003 Combinational Shifter from MUXes °What comes in the MSBs? °How many levels for 32-bit shifter? °What if we use 4-1 Muxes ? 1 0 sel A B D Basic Building Block 8-bit right shifter S 2 S 1 S 0 A0A0 A1A1 A2A2 A3A3 A4A4 A5A5 A6A6 A7A7 R0R0 R1R1 R2R2 R3R3 R4R4 R5R5 R6R6 R7R7

CS152 / Kubiatowicz Lec6.46 2/12/03©UCB Spring 2003 General Shift Right Scheme using 16 bit example If added Right-to-left connections could support Rotate (not in MIPS but found in ISAs)

CS152 / Kubiatowicz Lec6.47 2/12/03©UCB Spring 2003 Funnel Shifter XY R °Shift A by i bits (sa= shift right amount) °Logical: Y = 0, X=A, sa=i °Arithmetic? Y = _, X=_, sa=_ °Rotate? Y = _, X=_, sa=_ °Left shifts? Y = _, X=_, sa=_ Instead Extract 32 bits of 64. Shift Right 32 Y X R

CS152 / Kubiatowicz Lec6.48 2/12/03©UCB Spring 2003 Barrel Shifter Technology-dependent solutions: transistor per switch

CS152 / Kubiatowicz Lec6.49 2/12/03©UCB Spring 2003 Summary °Multiply: successive refinement to see final design 32-bit Adder, 64-bit shift register, 32-bit Multiplicand Register Booth’s algorithm to handle signed multiplies There are algorithms that calculate many bits of multiply per cycle (see exercises 4.36 to 4.39 in COD) °Booth Encoding: introducing multiple representations Numbers can be encoded in different ways  SRT Divide (for instance) Handles multiplication of negative numbers transparently °Divide can use same hardware as multiply: Hi & Lo registers in MIPS °Shifter: success refinement 1/bit at a time shift register to barrel shifter

CS152 / Kubiatowicz Lec6.50 2/12/03©UCB Spring 2003 To Get More Information °Chapter 4 of your text book: David Patterson & John Hennessy, “Computer Organization & Design,” Morgan Kaufmann Publishers, °David Winkel & Franklin Prosser, “The Art of Digital Design: An Introduction to Top-Down Design,” Prentice-Hall, Inc., °Kai Hwang, “Computer Arithmetic: Principles, archtiecture, and design”, Wiley 1979