Binary Fractions
As with integers, the results are loaded low, and the MSB is a sign extension of the seventh bit. If
this value were loaded into the accumulator, we could store the results back to memory in a
variety of ways:
• Store both low and high accumulator values back to memory. This offers maximum
detail, but has the same problems as with integer multiply.
• Store only the high (or low) accumulator back to memory. This creates a potential for
a memory littered with varying Q-types.
• Store the upper accumulator shifted to the left by 1. This would store values back to
memory in the same Q format as the input values, and with equal precision to the
inputs. How shall the left shift be performed? Here’s three methods:
− Explicit shift
− Shift on store
− Use Product Mode shifter
Correcting Redundant Sign Bit
Correcting Redundant Sign Bit
Correcting Redundant Sign Bit
Correcting Redundant Sign Bit
Correcting Redundant Sign Bit
IQmath
IQmath
: automatically handled
: automatically handled
(next topic)
(next topic)
Q math in “C”, shift in software:
Q math in “C”, shift in software:
int
int
x,y,z;
x,y,z;
z = ((long)x * (long)y) >> 15;
z = ((long)x * (long)y) >> 15;
Accumulator
Accumulator
1 1 1 1 0 1 0 0
1 1
1 1
1 1 0 1 0 0
1 1 0 1 0 0
Redundant
Redundant
Sign Bit
Sign Bit
8 - 10 C28x - Numerical Concepts & IQmath