Unexpected DAC amplitudes when varying gain

Hi all,

I am using PYNQ 2.7.0 on the RFSoC 4x2.

I am having a problem where changing the gain for the DAC output does not produce the amplitudes in the waveform that I would expect. Specifically, slight increases in the gain cause the amplitude of the sampled waveform to increase then decrease, where I would expect linear increase in amplitude. This has previously been posted about before, but no response: https://discuss.pynq.io/t/dac-channel-amplitude/7710/2

I would expect linear increase in amplitude due the fact I am not changing the gain on the receiver/ADC, and also due to this comment under the AmplitudeController class in transmitter.py:

class AmplitudeController(DefaultIP):

    """Driver for the transmit control IP Core.

    The Amplitude Controller is a simple IP core written
    in VHDL. The core outputs a user defined value on the master
    AXI-Stream interface when the enable register is high.
    This core was purposely designed to communicate with the
    RF Digital-to-Analogue Converter (RF DAC). The user
    can set the amplitude of the signal written to the RF DAC
    and use the RF DAC's fine mixer to generate a tone for
    loopback purposes on their development board.

    Attributes
    ----------
    enable : a bool
        If high, enables the output of the gain register on to
        the master AXI-Stream interface.

    gain : a float
        A float in Volts, that describes the amplitude of the
        output master AXI-Stream signal. Must be in range 0 to 1.

    """

You can reproduce this behavior using the base overlay in the 01_rf_dataconverter_introduction notebook. I’ve linked a much simplified notebook below, and also screenshots of the data I’m getting.
gain_tests_for_pynq_support.ipynb (141.2 KB)