270 likes | 352 Views
Arithmetic II CPSC 321. Andreas Klappenecker. Any Questions?. Review: Recursive Procedures. The number of ways to order n items is given by n x (n-1) x … x 2 x 1 = n! There is just one way to order 0 items, hence 0!=1 Write a program to calculate n!. Review: Recursive Procedures.
E N D
Arithmetic IICPSC 321 Andreas Klappenecker
Review: Recursive Procedures • The number of ways to order n items is given by n x (n-1) x … x 2 x 1 = n! • There is just one way to order 0 items, hence 0!=1 Write a program to calculate n!.
Review: Recursive Procedures int fac(int n) { if (n==0) return 1; else return n*fac(n-1); } A MIPS assembly language program for the same problem is almost as simple!
Factorial Numbers fac: bne $a0, $zero, gen # if $a0<>0, goto gen ori $v0, $zero, 1 # else return 1 jr $ra # gen: <save registers> addiu $a0, $a0, -1 # $a0 = n-1 jal fac # $v0 = fac(n-1) <restore registers> mul $v0, $v0, $a0 # $v0 = fac(n-1) x n jr $ra # return n!
Factorial Numbers <save registers>= addiu $sp, $sp, -8 # multipush sw $ra, 4($sp) # save $ra sw $a0, 0($sp) # save $a0 <restore registers>= lw $a0, 0($sp) # restore $a0=n lw $ra, 4($sp) # restore $ra addiu $sp, $sp, 8 # multipop
Practice, Practice, Practice! • Why recursive procedures? • Often shorter than iterative versions! • It is often straightforward to write the recursive version, but sometimes difficult to find an iterative version. • Towers of Hanoi • Quicksort • Generate all permutations • Backtracking
Today’s Menu Arithmetic-Logic Units Logic Design Revisited Faster Addition Multiplication (if time permits)
Goals • We recall some basic logic gates • Determine the truth tables for the Boolean functions • We recall half-adders and full-adders • Ripple-carry adders • Discuss faster adders
Logic Gates • AND gate • OR gate • NOT gate What are the truth tables?
Logic Gates • NOR gate • NAND gate • XOR gate What are the truth tables?
Half Adder a s b c
Full Adder • Give a Boolean formula for s • s=cin xor a xor b • Give a Boolean formula for cout • cout =ab+cin(a xor b) • Design now a circuit using and, or, xor.
Full Adder cin s a b cout s=cin xor a xor bcout = ab+cin(a xor b)
Critical Path cin s a b cout Suppose that each gate has a unit delay. What is the critical path (= path with the longest delay)?
Ripple Carry Adders • Each gates causes a delay • our example: 3 gates for carry generation • book has example with 2 gates • Carry might ripple through all n adders • O(n) gates causing delay • intolerable delay if n is large • Carry lookahead adders
Faster Adders Why are they called like that? cout=ab+cin(a xor b) =ab+acin+bcin =ab+(a+b)cin = g + p cin Generate g = ab Propagate p = a+b
Fast Adders Iterate the idea, generate and propagate ci+1 = gi + pici = gi + pi(gi-1 + pi-1 ci-1) = gi + pigi-1+ pipi-1ci-1 = gi + pigi-1+ pipi-1gi-2 +…+ pipi-1 …p1g0 +pipi-1 …p1p0c0 Two level AND-OR circuit Carry is known early!
Carry Lookahead Adders • Based on the previous identity • Fast because critical path is shorter • O(log n) gate delays [assuming 2-input gates] • More complex to implement • Design is less regular • Layout of one bit adder cells depend on i • Compromise • couple blocks of carry lookahead adders
Building an ALU • Addition • Subtraction • AND • OR • What is missing?
Tailoring the ALU to the MIPS • Need to support the set-on-less-than instruction (slt) • remember: slt is an arithmetic instruction • produces 1 if rs < rt and 0 otherwise • use subtraction: (a-b) < 0 implies a < b • Need to support test for equality (beq $t5, $t6, $t7) • use subtraction: (a-b) = 0 implies a = b
SLT • Determine a<b • Calculate b-a • If MSB equals • 1, then a<b • 0, then a>=b • Changes? • Operation less than • Output of subtraction • Overflow
SLT • 4 operations • subtraction output available • Connect • MSB set output • w/ LSB less
LSB indicates whether a<b • 0 if false • 1 if true
Test for equality • Notice control lines:000 = and001 = or010 = add110 = subtract111 = slt • Note: zero is a 1 when the result is zero!
Summary • We can build an ALU to support the MIPS instruction set • key idea: use multiplexor to select the output we want • we can efficiently perform subtraction using two’s complement • we can replicate a 1-bit ALU to produce a 32-bit ALU • Important points about hardware • all of the gates are always working • the speed of a gate is affected by the number of inputs to the gate • the speed of a circuit is affected by the number of gates in series (on the “critical path” or the “deepest level of logic”) • We focused on basic principles. We noted that • clever changes to organization can improve performance (similar to using better algorithms in software) • faster addition, next time: faster multiplication