Top Banner
July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 1 Part III The Arithmetic/Logic Unit
28

July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

Jan 01, 2016

Download

Documents

Jonathan Ward
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 1

Part IIIThe Arithmetic/Logic Unit

Page 2: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 2

III The Arithmetic/Logic Unit

Topics in This Part

Chapter 9 Number Representation

Chapter 10 Adders and Simple ALUs

Chapter 11 Multipliers and Dividers

Chapter 12 Floating-Point Arithmetic

Overview of computer arithmetic and ALU design:• Review representation methods for signed integers• Discuss algorithms & hardware for arithmetic ops• Consider floating-point representation & arithmetic

Page 3: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 3

11 Multipliers and DividersModern processors perform many multiplications & divisions:

• Encryption, image compression, graphic rendering• Hardware, vs programmed shift-add/sub, algorithms

Topics in This Chapter

11.1 Shift-Add Multiplication

11.2 Hardware Multipliers

11.3 Programmed Multiplication

11.4 Shift-Subtract Division

11.5 Hardware Dividers

11.6 Programmed Division

Page 4: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 4

11.1 Shift-Add Multiplication

Figure 11.1 Multiplication of 4-bit numbers in dot notation.

Multiplicand

Partial products bit-matrix

x y

z

y x 2 0 0

y x 2 1 1

y x 2 2 2

y x 2 3 3

Multiplier

Product

z(j+1) = (z(j) + yj x 2k) 2–1 with z(0) = 0 and z(k) = z |––– add –––|

|–– shift right ––|

Page 5: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 5

Binary and Decimal Multiplication

Figure 11.2 Step-by-step multiplication examples for 4-digit unsigned numbers.

Position 7 6 5 4 3 2 1 0 Position 7 6 5 4 3 2 1 0========================= =========================x24 1 0 1 0 x104 3 5 2 8y 0 0 1 1 y 4 0 6 7========================= =========================z

(0) 0 0 0 0 z (0) 0 0 0 0

+y0x24 1 0 1 0 +y0x104 2 4 6 9 6–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(1) 0 1 0 1 0 10z (1) 2 4 6 9 6

z (1) 0 1 0 1 0 z

(1) 0 2 4 6 9 6+y1x24 1 0 1 0 +y1x104 2 1 1 6 8–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(2) 0 1 1 1 1 0 10z (2) 2 3 6 3 7 6

z (2) 0 1 1 1 1 0 z

(2) 2 3 6 3 7 6+y2x24 0 0 0 0 +y2x104 0 0 0 0 0–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(3) 0 0 1 1 1 1 0 10z (3) 0 2 3 6 3 7 6

z (3) 0 0 1 1 1 1 0 z

(3) 0 2 3 6 3 7 6+y3x24 0 0 0 0 +y3x104 1 4 1 1 2–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(4) 0 0 0 1 1 1 1 0 10z (4) 1 4 3 4 8 3 7 6

z (4) 0 0 0 1 1 1 1 0 z

(4) 1 4 3 4 8 3 7 6========================= =========================

Example 11.1

Page 6: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 6

Two’s-Complement Multiplication

Figure 11.3 Step-by-step multiplication examples for 2’s-complement numbers.

Position 7 6 5 4 3 2 1 0 Position 7 6 5 4 3 2 1 0========================= =========================x24 1 0 1 0 x24 1 0 1 0y 0 0 1 1 y 1 0 1 1========================= =========================z

(0) 0 0 0 0 0 z (0) 0 0 0 0 0

+y0x24 1 1 0 1 0 +y0x24 1 1 0 1 0–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(1) 1 1 0 1 0 2z (1) 1 1 0 1 0

z (1) 1 1 1 0 1 0 z

(1) 1 1 1 0 1 0+y1x24 1 1 0 1 0 +y1x24 1 1 0 1 0–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(2) 1 0 1 1 1 0 2z (2) 1 0 1 1 1 0

z (2) 1 1 0 1 1 1 0 z

(2) 1 1 0 1 1 1 0+y2x24 0 0 0 0 0 +y2x24 0 0 0 0 0–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(3) 1 1 0 1 1 1 0 2z (3) 1 1 0 1 1 1 0

z (3) 1 1 1 0 1 1 1 0 z

(3) 1 1 1 0 1 1 1 0+(–y3x24) 0 0 0 0 0 +(–y3x24) 0 0 1 1 0–––––––––––––––––––––––––– ––––––––––––––––––––––––––2z

(4) 1 1 1 0 1 1 1 0 2z (4) 0 0 0 1 1 1 1 0

z (4) 1 1 1 0 1 1 1 0 z

(4) 0 0 0 1 1 1 1 0========================= =========================

Example 11.2

Page 7: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 7

11.2 Hardware Multipliers

Multiplier y

Mux

Adder out c

0 1

Doublewidth partial product z

Multiplicand x

Shift

Shift

(j)

j y

Add’Sub

Enable

Select

in c

Figure 11.4 Hardware multiplier based on the shift-add algorithm.

Page 8: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 8

The Shift Part of Shift-Add

Figure11.5 Shifting incorporated in the connections to the partial product register rather than as a separate phase.

out c

To adder j y

From adder

Sum

Partial product Multiplier

/ k – 1

/ k – 1

/ k

/ k

Page 9: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 9

High-Radix Multipliers

Radix-4 multiplication in dot notation.

Multiplicand x y

z

Multiplier

Product

0, x, 2x, or 3x

z(j+1) = (z(j) + yj x 2k) 4–1 with z(0) = 0 and z(k/2) = z |––– add –––|

|–– shift right ––| Assume k even

Page 10: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 10

Tree Multipliers

Figure 11.6 Schematic diagram for full/partial-tree multipliers.

Adder

Large tree of carry-save

adders

. . .

All partial products

Product

Adder

Small tree of carry-save

adders

. . .

Several partial products

Product

Log-depth

Log-depth

(a) Full-tree multiplier (b) Partial-tree multiplier

Page 11: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 11

Array Multipliers

Figure 11.7 Array multiplier for 4-bit unsigned operands.

3

2

1

0

4 5 6 7

0

1

2

3

2 1 0 x x x

y

y

y

z

y

3 x

0

0

0

0

0

0

0

0

0

0

0

z

z

z

z z z z

HA FA FA

MA MA MA MA

MA MA MA MA

MA MA MA MA

MA MA MA MA

FA

0

Our original dot-notation representing multiplication

Straightened dots to depict array multiplier to the left

Page 12: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 12

11.3 Programmed MultiplicationMiniMIPS instructions related to multiplication

mult $s0,$s1 # set Hi,Lo to ($s0)($s1); signedmultu $s2,$s3 # set Hi,Lo to ($s2)($s3); unsignedmfhi $t0 # set $t0 to (Hi)mflo $t1 # set $t1 to (Lo)

Finding the 32-bit product of 32-bit integers in MiniMIPS

Multiply; result will be obtained in Hi,Lo For unsigned multiplication:

Hi should be all-0s and Lo holds the 32-bit resultFor signed multiplication:

Hi should be all-0s or all-1s, depending on the sign bit of Lo

Example 11.3

Page 13: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 13

Figure 11.8 Register usage for programmed multiplication superimposed on the block diagram for a hardware multiplier.

 

Multiplication When There Is No Multiply Instruction

$t2 (counter)

Part of the control in hardware

Also, holds LSB of Hi during shift

Multiplier y

Mux

Adder out

c

0 1

Doublewidth partial product z

Multiplicand x

Shift

Shift

(j)

j

y

Add’Sub

Enable

Select

in

c

$a0 (multiplicand x)

$a1 (multiplier y)

$v1 (Lo part of z) $v0 (Hi part of z)

$t0 (carry-out)

$t1 (bit j of y)

Example 11.4 (MiniMIPS shift-add program for multiplication)

Page 14: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

October 2005 Michael Frank, FAMU-FSU College of Engineering

14

MIPS Assembly Code forthis Multiplication Algorithm

shamu: move $v0,$zero # Initialize Hi to 0move $v1,$zero # Initialize Lo to 0addi $t2,$zero,32 # Initialize repetition counter to 32.

mloop: move $t0,$zero # Loop: Initialize carry to 0.andi $t1,$a1,1 # LSB of multiplier to shift out.srl $a1,$a1,1 # Shift the multiplier right.beqz $t1,no_add # If bit shifted out was not 0, thenaddu $v0,$v0,$a0 # add multiplicand into Hi word,sltu $t0,$v0,$a0 # and remember the carry out.

no_add: andi $t1,$v0,1 # LSB of Hi word to shift out.srl $v0,$v0,1 # Shift Hi word of product right.sll $t0,$t0,31 # Shift carry left to position 31.or $v0,$t0,$v0 # OR the carry into the Hi word.srl $v1,$v1,1 # Shift Lo word of product right.sll $t1,$t1,31 # Shift bit left to position 31.or $v1,$t1,$v1 # OR the bit into the Lo word.addi $t2,$t2,-1 # Decrement loop counter.bnez $t2,mloop # Continue while counter is nonzero.jr $ra # Return product=($v0,$v1) to caller.

Page 15: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

October 2005 Michael Frank, FAMU-FSU College of Engineering

15

C language equivalentunsigned long shamu(unsigned int mcand, unsigned int mer) {

unsigned int Hi,Lo,carry,bit,counter;Lo = Hi = 0; /* Initialize product registers to 0. */counter = 32; /* Initialize repetition counter to 32. */do { /* Repeat the following loop: */

carry = 0; /* Initialize carry-out bit to 0. */bit = mer & 1; /* t1 := LSB of m'er. */mer >>= 1; /* Shift m'er right by 1. */if (bit) { /* If low bit of multiplier was 1, then */ Hi += mcand; /* Add mcand into Hi */ carry = (Hi < mcand); /* Carry out from add */} /* END IF. */bit = Hi & 1; /* LSB of Hi */Hi = (carry << 31) & (Hi >> 1); /* Shift carry into Hi */Lo = (bit << 31) & (Lo >> 1); /* Shift into Lo */counter--; /* Decrement counter. */

} while (counter > 0); return ((unsigned long)Hi)<<32 & Lo; /* Return 64-bit result.

*/} /* END FUNCTION shamu() */

Page 16: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 16

11.4 Shift-Subtract Division

Figure11.9 Division of an 8-bit number by a 4-bit number in dot notation.

z(j) = 2z(j1) ykj x 2k with z(0) = z and z(k) = 2k s

| shift ||–– subtract ––|

2 1

2

y

2

x 2

2

1

0

3

0

Subtracted bit-matrix

Divisor x Dividend z

s Remainder

Quotient y

y x 3

y x 2

y x

Page 17: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 17

Integer and Fractional Unsigned Division

Figure 11.10 Division examples for binary integers and decimal fractions.

Position 7 6 5 4 3 2 1 0 Position –1 –2 –3 –4 –5 –6 –7 –8========================= ==========================z 0 1 1 1 0 1 0 1 z . 1 4 3 5 1 5 0 2x24 1 0 1 0 x . 4 0 6 7========================= ==========================z

(0) 0 1 1 1 0 1 0 1 z (0) . 1 4 3 5 1 5 0 2

2z (0) 0 1 1 1 0 1 0 1 10z

(0) 1 . 4 3 5 1 5 0 2–y3x24 1 0 1 0 y3=1 –y–1x 1 . 2 2 0 1 y–1=3–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(1) 0 1 0 0 1 0 1 z (1) . 2 1 5 0 5 0 2

2z (1) 0 1 0 0 1 0 1 10z

(1) 2 . 1 5 0 5 0 2–y2x24 0 0 0 0 y2=0 –y–2x 2 . 0 3 3 5 y–2=5–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(2) 1 0 0 1 0 1 z (2) . 1 1 7 0 0 2

2z (2) 1 0 0 1 0 1 10z

(2) 1 . 1 7 0 0 2–y1x24 1 0 1 0 y1=1 –y–3x 0 . 8 1 3 4 y–3=2–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(3) 1 0 0 0 1 z (3) . 3 5 6 6 2

2z (3) 1 0 0 0 1 10z

(3) 3 . 5 6 6 2–y0x24 1 0 1 0 y0=1 –y–4x 3 . 2 5 3 6 y–4=8–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(4) 0 1 1 1 z (4) . 3 1 2 6

s 0 1 1 1 s . 0 0 0 0 3 1 2 6y 1 0 1 1 y . 3 5 2 8========================= ==========================

Example 11.5

Page 18: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 18

Division with Same-Width Operands

Figure 11.11 Division examples for 4/4-digit binary integers and fractions.

Position 7 6 5 4 3 2 1 0 Position –1 –2 –3 –4 –5 –6 –7 –8========================= ==========================z 0 0 0 0 1 1 0 1 z . 0 1 0 1x24 0 1 0 1 x . 1 1 0 1========================= ==========================z

(0) 0 0 0 0 1 1 0 1 z (0) . 0 1 0 1

2z (0) 0 0 0 1 1 0 1 2z

(0) 0 . 1 0 1 0–y3x24 0 0 0 0 y3=0 –y–1x 0 . 0 0 0 0 y–1=0–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(1) 0 0 0 1 1 0 1 z (1) . 1 0 1 0

2z (1) 0 0 1 1 0 1 2z

(1) 1 . 0 1 0 0–y2x24 0 0 0 0 y2=0 –y–2x 0 . 1 1 0 1 y–2=1–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(2) 0 0 1 1 0 1 z (2) . 0 1 1 1

2z (2) 0 1 1 0 1 2z

(2) 0 . 1 1 1 0 –y1x24 0 1 0 1 y1=1 –y–3x 0 . 1 1 0 1 y–3=1–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(3) 0 0 0 1 1 z (3) . 0 0 0 1

2z (3) 0 0 1 1 2z

(3) 0 . 0 0 1 0–y0x24 1 0 1 0 y0=0 –y–4x 0 . 0 0 0 0 y–4=0–––––––––––––––––––––––––– –––––––––––––––––––––––––––z

(4) 0 0 1 1 z (4) . 0 0 1 0

s 0 0 1 1 s . 0 0 0 0 0 0 1 0y 0 0 1 0 y . 0 1 1 0========================= ==========================

Example 11.6

Page 19: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

October 2005 Michael Frank, FAMU-FSU College of Engineering

19

C++ function for division of unsigned 32-bit integersunsigned int myDivide // DEFINE FUNCTION myDivide():(unsigned int dividend, // Argument 0: Number to be divided. unsigned int divisor, // Argument 1: Number to divide it by. unsigned int &remainder) // Argument 2: Place to put remainder.{unsigned int quotient = 0; // Quotient: Initially zero. int position = 0; // Bit position: Initially zero. while (!(divisor & (1<<31))) {// While divisor MSB is empty, position++; // Increment bit position, divisor <<= 1; } // & shift divisor left. do{quotient <<= 1; // Repeatedly, make room for quotient bit; if (dividend >= divisor) { // if we can do a subtraction here, dividend -= divisor; // then do it, quotient |= 1; } // and set quotient bit to 1; divisor >>= 1; } // shift divisor right to a new position; while (--position >= 0); // decrement pos and continue while >=0 remainder = dividend; // Remainder is the remaining dividend. return quotient;} // Return quotient (& remainder).

Page 20: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

October 2005 Michael Frank, FAMU-FSU College of Engineering

20

Equivalent MIPS assembly for 32-bit unsigned divisionmyDivide: move $v0, $zero # quotient := 0; move $t0, $zero # position := 0;leftShift: and $t1, $a1, 0x80000000 # while (divisor & 0x80000000 bne $t1, $zero, doTop # != 0) { addi $t0, $t0, 1 # position++; sll $a1, $a1, 1 # divisor <<= 1; b leftShift # }doTop: sll $v0, $v0, 1 # do { quotient <<= 1; sltu $t1, $a0, $a1 # $t4 := (dividend < divisor) bne $t1, $zero, endIf # if ($t4 == 0) {// d’dend >=

d’sor subu $a0, $a0, $a1 # dividend -= divisor; or $v0, $v0, 1 # quotient |= 1; }

endIf: srl $a1, $a1, 1 # divisor >>= 1; addi $t0, $t0, -1 # position--; bgez $t0, doTop # } while (position >= 0);

endFor: sw $a0, 0($a2) # rem := remainder; jr $ra # return.

Page 21: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 21

Signed DivisionMethod 1 (indirect): strip operand signs, divide, set result signs

Dividend Divisor Quotient Remainder z = 5 x = 3 y = 1 s = 2 z = 5 x = –3 y = –1 s = 2 z = –5 x = 3 y = –1 s = –2 z = –5 x = –3 y = 1 s = –2

Method 2 (direct 2’s complement): develop quotient with digits –1 and 1, chosen based on signs, convert to digits 0 and 1

Restoring division: perform trial subtraction, choose 0 for q digit if partial remainder negative

Nonrestoring division: if sign of partial remainder is correct, then subtract (choose 1 for q digit) else add (choose –1)

Page 22: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 22

11.5 Hardware Dividers

Figure 11.12 Hardware divider based on the shift-subtract algorithm.

Load

Quotient y

Mux

Adder

0 1

Partial remainder z (initially z)

Divisor x

Shift

Shift

(j)

k– j

y

1

Enable

Select

Quotient

digit selector

1

out

c

in

c

Trial difference (Always subtract)

Page 23: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 23

The Shift Part of Shift-Subtract

Figure 11.13 Shifting incorporated in the connections to the partial remainder register rather than as a separate phase.

To adder

From adder

Partial remainder Quotient

/ k

/ k

/ k

/ k

k–j q

MSB

Page 24: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 24

High-Radix Dividers

Radix-4 division in dot notation.

Divisor x Dividend z

s Remainder

Quotient y

0, x, 2x, or 3x

z(j) = 4z(j1) (yk2j+1 yk2j)two x 2k with z(0) = z and z(k/2) = 2ks

| shift ||––––––– subtract –––––––| Assume k even

Page 25: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 25

Array Dividers

Figure 11.14 Array divider for 8/4-bit unsigned integers.

2 1 0 x x x

1 y

2 y

3 y 3 z

0 y

3 x

2 z

1 z

0 z

4 z 5 z 6 z 7 z

MS MS MS MS

MS MS MS MS

MS MS MS MS

MS MS MS MS

Our original dot-notation for division

Straightened dots to depict an array divider 2 1 0 s s s 3 s

0

0

0

0

Page 26: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 26

11.6 Programmed DivisionMiniMIPS instructions related to division

div $s0,$s1 # Lo = quotient, Hi = remainderdivu $s2,$s3 # unsigned version of divisionmfhi $t0 # set $t0 to (Hi)mflo $t1 # set $t1 to (Lo)

Compute z mod x, where z (singed) and x > 0 are integers

Divide; remainder will be obtained in Hi

if remainder is negative, then add |x| to (Hi) to obtain z mod xelse Hi holds z mod x

Example 11.7

Page 27: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 27

Figure 11.15 Register usage for programmed division superimposed on the block diagram for a hardware divider.

 

Division via Repeated SubtractionsExample 11.8 (MiniMIPS shift-add program for division)

Load

Quotient y

Mux

Adder

0 1

Partial remainder z (initially z)

Divisor x

Shift

Shift

(j)

k– j

y

1

Enable Select

Quotient digit

selector

1

out

c

in

c Trial difference

(Always subtract)

$t2 (counter)

$a0 (divisor x)

$a1 (quotient y)

$v1 (Lo part of z) $v0 (Hi part of z)

$t1 (bit k j of y)

Part of the control in hardware

$t0 (MSB of Hi)

Page 28: July 2005Computer Architecture, The Arithmetic/Logic UnitSlide 1 Part III The Arithmetic/Logic Unit.

July 2005 Computer Architecture, The Arithmetic/Logic Unit Slide 28

Load

Quotient y

Mux

Adder

0 1

Partial remainder z (initially z)

Divisor x

Shift

Shift

(j)

k– j

y

1

Enable

Select

Quotient

digit selector

1

out

c

in

c

Trial difference (Always subtract)

Multiplier y

Mux

Adder out c

0 1

Doublewidth partial product z

Multiplicand x

Shift

Shift

(j)

j y

Add’Sub

Enable

Select

in c

Divider vs Multiplier: Hardware Similarities

2 1 0 x x x

1 y

2 y

3 y 3 z

0 y

3 x

2 z

1 z

0 z

4 z 5 z 6 z 7 z

MS MS MS MS

MS MS MS MS

MS MS MS MS

MS MS MS MS

Our original dot-notation for division

Straightened dots to depict an array divider 2 1 0 s s s 3 s

0

0

0

0

Figure 11.12 Figure 11.4

3

2

1

0

4 5 6 7

0

1

2

3

2 1 0 x x x

y

y

y

z

y

3 x

0

0

0

0

0

0

0

0

0

0

0

z

z

z

z z z z

HA FA FA

MA MA MA MA

MA MA MA MA

MA MA MA MA

MA MA MA MA

FA

0

Our original dot-notation representing multiplication

Straightened dots to depict array multiplier to the left Figure 11.14 Figure 11.7Turn upside-down