Reference clock generation
It’s an advantage of the RFSoC that all of the DAC and ADC clocks are synthesized from a common reference and are always phase-locked with respect to each other. This reference is generated by dedicated clock synthesizer chips which are normally locked to an on-board reference oscillator. The on-board oscillator is pretty good (sub-ppm stability, check the board schematics), better than the linewidths of most devices.
The clock chips are configured the first time you initialize QickSoc() after powering on your board; after that, they are normally only reconfigured if you are specifying a certain configuration (such as external clock, see below).
You will see some LEDs come on when the clocks are configured; they should then stay on continously without flickering, except when reconfigured.
On the ZCU216/ZCU208, the clock chips and their status LEDs are on the CLK104 daughterboard. For the other boards, the clock chips and LEDs are on the main board.
ZCU111: four LEDs in a row, labeled “4208 STATUS” and “MUXOUT RF1/2/3”
ZCU216/ZCU208: the clock chips and LEDs are on the CLK104 daughterboard; one LED is a power indicator and three are status
RFSoC4x2: four LEDs in a row, labeled “CLOCK STATUS”
External clock
You might want to lock your board to an external clock source for two reasons:
Frequency stability: the on-board reference oscillator is good but not perfect. If you play a continuous tone from a DAC into a spectrum analyzer and put your finger on the oscillator’s metal can, you will see the frequency shift by hundreds of Hz. You might need better stability, such as what you get from a rubidium reference.
Synchronization: you may need the RFSoC to be phase- or frequency-locked to other instrumentation or other RFSoCs.
QICK, and all of the supported RFSoC boards, accept an external reference clock.
To make your board lock to a reference, use the external_clk=True argument to QickSoc().
See the API documentation for the connector and the needed frequency.
To figure out the needed power in whatever unit makes sense to you, the input circuit is as follows:
ZCU111: 3 dB attenuator to single-ended AC-coupled LMK04208 input.
ZCU216/ZCU208 (the clock references are on the CLK104 daughterboard): 3 dB attenuator to single-ended AC-coupled LMK04828B input.
RFSoC4x2: no attenuation, to single-ended AC-coupled LMK04828B input.
The LMK04208/LMK04828B data sheets specify an input signal of 0.25/0.35 to 2.4 Vpp. You can work out the details, but 0-10 dBm is a safe range.
There is also an clk_output=True argument that you can use to output a reference signal (you can use this independently of whether you’re using an external clock).
This is at a frequency that’s not likely to be useful to you, except as a way to monitor the lock.