Location : Home >> Technology Notes >> ASIC Design for Signal Processing

Multipliers

[Last modified 11:12:52 PM on Tuesday, 27 July 2010]

Beating the Optimal Multiplier
This section provides a brief overview of the outcomes of my industrial experience project with Bell Labs Research. A 10x10 bit multiplier had already been previously built, by using 3:2 and 4:2 adder cells in what was considered to be an "optimal" arrangement. My task was to build a multiplier, which could use VHDL generics to allow the multiplication of numbers of any size. The original multiplier was to be used as a benchmark, with the ultimate aim being to match its speed for a 10x10 bit configuration.

A number of architectures were built and analysed, but only the final design is described here. The actual design itself is quite straightforward, however it was the coding style which proved to be an important factor in the synthesis results.

Recursive Adder Tree using GENERATE statements

This design, illustrated in figure 1, is not the one used, but illustrates the concepts used in the chosen architecture.

Architecture of the recursive adder design
Figure 1 : Architecture of the "recursive" design. Instances of the adder entity may instantiate further instance of the same entity within themselves.

This architecture works by feeding all of the booth recoded partial products and correction terms into a recursive array adder. This adder uses a series of VHDL generate statements to: The problem with this technique is that it does not synthesise well, but this can be overcome by alternative methods of coding the same concept.

Adder tree using process statement

This design has a similar approach to the first, but uses a process statement and loops. It takes an array of partial products, and continually reduces them with 4:2 and 3:2 compressors until there are only two left.

The inputs to the top level of adders are the size of the output, containing the partial products shifted to the appropriate columns. The extra bits around the partial product are padded with zeros, and it is left to the synthesiser to remove and optimise these.


Conclusions on multiplier architectures and coding style

It was found that the speed of a synthesised circuit is dependant on not only the architecture chosen, but also the coding style used to implement that design.

In particular, the following conclusions were drawn about the effect of coding style on the performance of a design : One of main time saving techniques used in the fastest designs is the use of carry-save adders to combine the partial products into a final answer. The ability of these to combine three or four numbers to two, in a time that is independent of the width of the numbers, is a much more efficient alternative than using traditional adder. Using these, a carry propagate is only required for the final addition of the adder tree.

These observations have been followed when incorporating the multipliers into complex multipliers, which in turn form the basis for the matrix multipliers, and ultimately the signal processor.


Alternative Algorithms

Several possible architectures were considered and built, and the following are two of the more interesting of the alternative ideas:
References
(C)opyright 2001-2010, Geoff Knagge.
Continued use of this site indicates your agreement to the Conditions of use and Privacy Policy.
multipliers.shtml, last modified 11:12:52 PM on Tuesday, 27 July 2010