Fig. 6. Fortran program to test 8-bit RTM multiplier of Fig. 4.
To have a concrete task to discuss, Figure 7 gives an algorithm for taking
a weighted average. The components of a data vector, X[i], are each multiplied
by weights, W[i], which are then summed (forming the vector dot product)
and divided by the total weight, W. We will assume that the data remains
within 8 bits, to avoid distraction from the central points. Since multiplication
is available and not division, we have written the flowchart to use
multiplication by 11W. The weights are themselves constant, hence
1/W is a given constant, just as W is. Since we are working with integers,
11W will be a fraction between 0 and 1, hence not representable. However,
we can simply take 11W to be the fractional part (as an integer), which is
equivalent to rescaling the expression. Actually since such a representation
will cause unnecessary errors, we would have to use the integer division
system to do the task properly.
One can attempt to produce an RTM flowchart directly from Figure 7, just as we did for the multiplication itself. However, unlike Figure 3, not every component of Figure 7 is a primitive module -- in particular, the two
117