Hi Sebastian,

I wanted to close the loop on this one, since I started out with the same 
questions and it didn't seem like you received an answer. I think you more or 
less have the correct understanding of how each of the clocks are derived, but 
to reiterate:

-The ADC clock rate (i.e. the sample rate), is derived from the reference clock 
supplied by the LMX2594 to the RF data converter, the frequency of which is 
what you enter into the "Reference Clock" field of the RFDC Casper block. 
Assuming you have "Enable Tile PLLs" checked in the RFDC block, the PLL 
internal to the RF data converter is responsible for this.
-The user clock rate is derived from the PL reference clock supplied by the 
LMK04828 to the FPGA fabric, the frequency of which is what you enter into the 
"RFPLL PL Clock Rate" field in the RFSoC4x2 XSG block. The PLL associated with 
the FPGA's MMCM is responsible for this.
-The output clock is used for clock forwarding from one ADC tile to another, 
although I believe this is currently not implemented for the Casper RFDC block

What clock rates one can obtain for each of these are constrained by the 
dividers and VCOs internal to each of the corresponding PLLs. For the RF data 
converter, these can be found here:

https://docs.amd.com/r/en-US/pg269-rf-data-converter/PLL-Parameters

Whereas for the MMCM, the constraints can be found here:

https://docs.amd.com/r/en-US/ug572-ultrascale-clocking/MMCM-Attributes

There is also the further constraint that your user clock must match the 
required AXI4 stream clock, which is equal to:

User clock = AXI4 stream clock = Sample rate / Decimation / Number of AXI4 
stream samples per user clock

The Casper RFDC block will automatically compute this for you when you enter 
something into the "Sampling Rate" field. It will also automatically compute 
the ADC reference clock, but interestingly the PLL constraints it assumes 
aren't quite the same as what's specified in the ADC documentation above, and 
ultimately the reference clock it gives you will result in a sample rate that 
doesn't quite match up with the one you specify in the Sampling Rate field and 
is incompatible with the required AXI4 stream clock shown (have a close look at 
calc_refclk.m in the casper-astro/mlib_devel repo). Similarly, the jasper 
backend will mis-configure the MMCM if you do not specify a user clock rate 
that is compatible with the constraints of the corresponding PLL (see 
clk_factors.py in casper-astro/mlib_devel/jasper_library, it will only give the 
closest frequency to what you specify).

For this reason, I do not rely on the RFDC block to guide me to the correct 
clock frequencies. In practice what I do is I start with PL reference and ADC 
reference clocks supplied by the LMK04828 and LMX2594 (e.g. 122.88 and 491.52 
MHz in the default Casper config files), and use the above PLL constraints to 
work forwards and calculate all possible sample rates I can use given those 
clock rates and my required decimation and AXI4 stream sample number. If 
desired, I can send along a handy Python script that does this.

-Walter

-- 
You received this message because you are subscribed to the Google Groups 
"casper@lists.berkeley.edu" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to casper+unsubscr...@lists.berkeley.edu.
To view this discussion visit 
https://groups.google.com/a/lists.berkeley.edu/d/msgid/casper/PH7PR14MB5368930D7E91BE73519BEF6EACB72%40PH7PR14MB5368.namprd14.prod.outlook.com.

Reply via email to