Wallace tree

A Wallace tree is an efficient hardware implementation of a digital circuit that multiplies two integers. It was devised by the Australian computer scientist Chris Wallace in 1964.
The Wallace tree has three steps:
Compared to naively adding partial products with regular adders, the benefit of the Wallace tree is its faster speed. It has formula_1 reduction layers, but each layer has only formula_2 propagation delay. A naive addition of partial products would require formula_3 time.
As making the partial products is formula_2 and the final addition is formula_1, the total multiplication is formula_1, not much slower than addition. From a complexity theoretic perspective, the Wallace tree algorithm puts multiplication in the class NC1.
The downside of the Wallace tree, compared to naive addition of partial products, is its much higher gate count.
These computations only consider gate delays and don't deal with wire delays, which can also be very substantial.
The Wallace tree can be also represented by a tree of 3/2 or 4/2 adders.
It is sometimes combined with Booth encoding.
Detailed explanation.
The Wallace tree is a variant of long multiplication. The first step is to multiply each digit (each bit) of one factor by each digit of the other. Each of this partial products has weight equal to the product of its factors. The final product is calculated by the weighted sum of all these partial products.
The first step, as said above, is to multiply each bit of one number by each bit of the other, which is accomplished as a simple and gate, resulting in formula_7 bits; the partial product of bits formula_8 by formula_9 has weight formula_10
In the second step, the resulting bits are reduced to two numbers; this is accomplished as follows:
As long as there are three or more wires with the same weight add a following layer:-
In the third and final step, the two resulting numbers are fed to an adder, obtaining the final product.
Example.
formula_11, multiplying formula_12 by formula_13: