Distributed arithmetic design


Introduction

Distributed arithmetic is an important algorithm for DSP applications. It is based on a bit level rearrangement of the MAC "multiply accumulate" operation to replace it with set of addition and shifting operations.

Theoretical derivation

Download the ps file or the pdf file for the theoretical derivation

Practical Derivation

This algorithm is based on the scaling accumulation algorithm described in [1]. This accumulator takes one parallel and one serial inputs. The parallel input in DA algorithm is considered to be a constant. Several Scaling accumulator units can be used in parallel to do the MAC operation for many terms. The next figer shows two serial inputs (A,B) that are multiplied by the constants (C1,C2). These constants and the AND operation with input bit can be considered as product terms.
The output of this circuit is A*C1 + B*C2

If we moved the adder-shifter circuits at the end of the circuit and using single circuit we eleminate large number of adders = N number of inputs to only one. The constants with the AND operators and partial sums can represent product terms that can have predefined equations. These equations can be implemented using ROM where its contents are defined by the constants and its address the inputs bits (A,B in our example)

Since only one bit of each input goes to the ROM address The rom contents is defined as follows assuming we have three inputs:

Addr (000) => 0

Addr (001) => C0

Addr (010) => C1

Addr (011) => C0+C1

Addr (100) => C2

Addr (101) => C0+C2

Addr (110) => C1+C2

Addr (111) => C0+C1+C2

This algorithm can be implemented in many different approaches depending on he system constraints. For more information refer to the links below.

The Implementation I used is shown in the next figure where the first block is a 2D shifter that is connected to the address lines of the Distributed Arithmetic Look-up Table (DALUT). The result is added serially to produce filter's result.

Implementation

The VHDL code is available on the opencores CVS under arith_cores modules.

Source files:

Advantages

Resources and references


Last update: 30 September 2000
1