Lably
Skip to content

Wallace tree

Efficient hardware implementation of a digital multiplier

  • 3 min read
  • 2 chapters

Related on Lably

Through Computer hardware and Adder (electronics)

Wallace multipliers were devised by the Australian computer scientist Chris Wallace in 1964.

The Wallace tree has three steps:

  1. Multiply each bit of one of the arguments, by each bit of the other.
  2. Reduce the number of partial products to two by layers of full and half adders.
  3. Group the wires in two numbers, and add them with a conventional adder.

Compared to naively adding partial products with regular adders, the benefit of the Wallace tree is its faster speed. It has O(log⁡n) reduction layers, but each layer has only O(1) propagation delay. A naive addition of partial products would require O(log2⁡n) time. As making the partial products is O(1) and the final addition is O(log⁡n), the total multiplication is O(log⁡n), 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 these 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 n2 bits; the partial product of bits am by bn has weight 2(m+n)

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:-

  • Take any three wires with the same weights and input them into a full adder. The result will be an output wire of the same weight and an output wire with a higher weight for each three input wires.
  • If there are two wires of the same weight left, input them into a half adder.
  • If there is just one wire left, connect it to the next layer.

In the third and final step, the two resulting numbers are fed to an adder, obtaining the final product.

Sign in to keep reading

One more chapter is free with a Lably account.

More in Computing and communication