Wallace tree multiplication rules

alumultipliervhdl

I was looking at this wallace tree diagram for an 8×8 multiplier:

enter image description here

and I'm confused about why the pairs of two (and the one pair of 3) are not added together in the initial reduction layer. My understanding is that all pairs of three should be sent into a full adder and all pairs of two should be sent into a half adder. Is this diagram incorrect, or is my understanding incorrect?

Best Answer

The pairs of 3 are sent to a carry-save adder, which takes a sum of 3 inputs and reduce it to a sum of 2 inputs (x + y + x => c + s). A carry-save adder's propagation time is constant, while traditional a 2 input adder's propagation time is proportional the the width of the operands. You can also use a half-adder, which performs the reduction (a + b => 2*c + s) in constant time.

For the multiplier to be as fast as possible, you want the layers to use only carry-save and half-adders, as well as have the final 2 input addition to have the lowest width possible. Like this, all your layers performs in constant time, and the final one has the lowest propagation time possible.

You should find that if you reduce the pairs of 2 in the first layers with half-adders, you won't save any layers or reduce the width of the final addition, thus the multiplication won't be faster.

Related Topic