Arithmetic Hardware

1-Bit Half Adder

  • Used to add single bit numbers, doesn’t take no Carry-in, but their is a carry out, sum and carry-out

  • Sum = A’B + AB’ = A Xor B

  • Count = AB


Using the half-adder, we can’t use the carryout from the previous one, a limitation, basically can’t add the adders(can’t link them)


1-Bit Full Adder

  • Sum = A Xor B XOR Cin(carryin)

  • Cout = AB + ACin + BCin

  • It can be constructued using two half adders and one OR gate



More explanation on how the sum was gotten.


Standard Gate Logic Design Apporach




Alternative implementation

Ripple-Carry Adder

We cascade 1-bit adders together

Parallel Adder


Example of logic implementation

With overflow, when it is 0, there is no overflow, and when there is 1, there is overflow

The reason why it is a XOR gate is because the only conditions to have overflow is 01 and 10, which match the definition of overflow

Subtraction with Ripple-Carry adder



Disadvantage with Ripple-Carry Adder

Very long delay

    Carry bit may have to propagate from LSB to MSB

    Worst case delay for n-bit adder = 2n gate delays

Carrys from low to high order stages

The key to speeding up addition is determining carry values sooner/quicker


Carry -Lookahead Logic


32-Bit ALI


Computer Arithmetic

(Arithmetic logic unit) = ALU


Integer Multiplication


Combinational Multipier

multiplying each one, and at the end, do the sum of each at the bottom

Problem is it is waaay to many gates, 12 adders, need 88 gates total.


Some obervations:

The # of bits in the product is larger than the number in either the multiplicand or the multiplier(factor a and factor b)

m bits x n bits = m + n bit product


Overflow is a possible issue


Binary rule “choices”

0 => place 0

1=>place a copy


3 versions of unsigned multiplication hardware

    sucessive refinement


Version 1

the multiplicand and produce is 64 bit

If the LSB of multiciand is 1, add that to the product, other then, keep going



Example 1 with this version

11 × 9


0000 1011(11) times 1001(9), initializing currently, with iteration 0 and step 0, and product currently at 0000 0000


iteration 1, steps 1a. 2, 3, wiht the action adding and shift, product is currently the multipcant, and the multiple is shifting the value of everything to the left(0001 0110) while the other one shift to the right(0100)


How the logic/implementation of it works.

96 Steps, around 100 clock cycles.


Observations on Version 1:

Half the bits of the miltiplicand are always 0, so the 64-bit adder is wasted


Version 2



Version 2 Example(11 × 9)


Observations

Product register wastes space, so


Version 3


it places the multiplier in the lower half of the product(essentially using the product as a multiplier)


Example 3(same numbers, just how to implement it)



Multiplying by a Constant

Essentially, it mutlplies short constants with a series of shifts and adds, with it having the same effect as multplying 2² or 2³, stuff like that.


Signed Multiplication


Make moth positive, leave out the sign bit, run for 31 stpes, nad set sign bit negative of signs of inputs differ( + / - = -)


Booth’s Algorithm

Multiply two-s complement signed numbers, uses the same hardware as before, and reduce the number of steps



The multiplcation is handled by algorithm 3 from last time for multiplying(the one where the product is a representation of the multiplyer)


When product is 10, substract multiplcand from the left half of the prpduct and place the result in the left half of the Product register.

When prduct is 01, add multiplcand to the left half of the prpduct and palce the result in the left half of the Pruduct register



Example(-6 X -5)


-6 = 1010 = 0110

-5 = 1011



Another Example:


Solution:



Orginally for speed, since shifts are faster than adding and works proprerly for 2’s complement numbers without the specifal fix for sign