The DSPLib contains two different DDS/Mixer implementations. These will be referred to as the dds_mixer and dds_mixer_lut. They both differ in their implementations of the DDS and hence do not have identical outputs. The dds_mixer solution is available only on AIE, while the dds_mixer_lut is available on AIE, AIE-ML and AIE-MLv2. The dds_mixer_lut has modes that enable higher SFDR figures for the signal generator than the dds_mixer. Both implementations have three different modes of operation. The mode of the component is driven by template parameter TP_MIXER_MODE.
In DDS-only mode (MIXER_MODE_0), there is a single output port that contains the sine/cosine components corresponding to the programmed phase increment. The phase increment is a fixed uint32_t value provided as a constructor argument, where 2^31 corresponds to pi radians (180 degrees). The number of samples sent through the output port is determined by the TP_INPUT_WINDOW_SIZE parameter. The output port can be a window interface or a stream interface depending on the use of TP_API.
Mixer inputs are enabled with the TP_MIXER_MODE template parameter. There are two modes that have the mixer functionality enabled.
- In
MIXER_MODE_1, a single input port is exposed, and the input samples are complex multiplied by the DDS output for the given phase increment. - In
MIXER_MODE_2, two input ports are exposed for multi-carrier operation, with the first behaving as inMIXER_MODE_1, and the second input port being complex-multiplied with the complex conjugate of the DDS signal, then accumulated with the result of the first complex multiply operation.