This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LMK04832: LMK04832: Help getting synchronized clock outputs and SYSREFs in multi-LMK04832 setup

Part Number: LMK04832


Hi,

I'm following onto this post here: https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1219876/lmk04832-help-getting-synchronized-clock-outputs-in-multi-lmk04832-setup/4606427?tisearch=e2e-sitesearch&keymatch=%20user%3A532781#4606427.

To summarize, I have two LMK04832s in zero-delay mode with a common 6MHz reference and I have 132MHz and 6MHz (SYSREF) outputs. I need the 132MHz and 6MHz to have predictable/repeatable phases after programming across the two LMKs, with all 6MHz outputs being in phase and all 132MHz outputs in phase. Note I unfortunately only have visibility to CLK_OUT3 on the LMKs which I can configure to the 132M or 6M. I've attached my HexRegisters.txt file.

R0 (INIT)	0x000090
R0	0x000010
R2	0x000200
R3	0x000306
R4	0x000463
R5	0x0005D1
R6	0x000670
R12	0x000C51
R13	0x000D04
R256	0x010018
R257	0x01010A
R258	0x010280
R259	0x010340
R260	0x010410
R261	0x010500
R262	0x010601
R263	0x010700
R264	0x010818
R265	0x01090A
R266	0x010A00
R267	0x010B40
R268	0x010C10
R269	0x010D00
R270	0x010E01
R271	0x010F10
R272	0x011018
R273	0x01110A
R274	0x011280
R275	0x011340
R276	0x011410
R277	0x011500
R278	0x011601
R279	0x011700
R280	0x011818
R281	0x01190A
R282	0x011A00
R283	0x011B40
R284	0x011C20
R285	0x011D00
R286	0x011E01
R287	0x011F10
R288	0x012018
R289	0x01210A
R290	0x012200
R291	0x012340
R292	0x012410
R293	0x012500
R294	0x012601
R295	0x012701
R296	0x012818
R297	0x01290A
R298	0x012A00
R299	0x012B40
R300	0x012C10
R301	0x012D00
R302	0x012E01
R303	0x012F01
R304	0x013018
R305	0x01310A
R306	0x013200
R307	0x013340
R308	0x013420
R309	0x013500
R310	0x013601
R311	0x013711
R312	0x013825
R313	0x013903
R314	0x013A02
R315	0x013B10
R316	0x013C00
R317	0x013D08
R318	0x013E01
R319	0x013F0D
R320	0x014001
R321	0x014100
R322	0x014200
R323	0x014311
R324	0x0144FF
R325	0x014510
R326	0x014618
R327	0x01471A
R328	0x014802
R329	0x014942
R330	0x014A02
R331	0x014B06
R332	0x014C00
R333	0x014D00
R334	0x014EC0
R335	0x014F7F
R336	0x015000
R337	0x015102
R338	0x015200
R339	0x015300
R340	0x015405
R341	0x015500
R342	0x015601
R343	0x015700
R344	0x01580A
R345	0x015900
R346	0x015A01
R347	0x015BD4
R348	0x015C20
R349	0x015D00
R350	0x015E1E
R351	0x015F1B
R352	0x016000
R353	0x016119
R354	0x01624D
R355	0x016300
R356	0x016400
R357	0x01650C
R361	0x016958
R362	0x016A20
R363	0x016B00
R364	0x016C00
R365	0x016D00
R366	0x016E3B
R371	0x017310
R375	0x017700
R386	0x018200
R387	0x018300
R358	0x016600
R359	0x016700
R360	0x0168C6
R1365	0x055500

I've been able to get the 132MHz outputs synced iff I have SYNC_DISSYSREF set. If SYNC_DISSYSREF is set (with all DCLKX_Y_PD clear) I can toggle SYNC_POL and the 132MHz clocks are aligned. I am using reclocked sync like suggested to achieve this.

However, I'm not confident the 6MHz outputs are aligned and I'm wondering if any of the following are related:

  • SYNC_DISSYSREF is always 1. When I set it to 0 during the SYNC_POL toggle I observe the 132MHz outputs at different frequencies on the LMKs so I've kept it 1. However, I don't know if this is necessary for synced SYSREF outputs
  • I'm not doing any reset of the PLL R Dividers

Any help in what I could be missing would be appreciated. I am very close to ultimately having two ADCs synchronized, but they are always a few degrees off (and not just a relative offset) in measuring phase of an input tone.

Thanks,

Nick

  • With SYNC_DISSYSREF set, you are preventing the SYSREF divider from being reset when the SYNC event is triggered. This is what you want for a configuration where you have a common 6MHz reference being distributed and the SYSREF divider is fed back in zero-delay mode. Because you have R=1 and N=1 at PLL1, this should guarantee a deterministic, repeatable phase relationship between the reference input and the SYSREF. You have the same divider values and digital delay values on all 132MHz clocks and on all 6MHz SYSREFs, they are using the same formats, etc. At least this much looks unobjectionably correct.

    Am I correct in understanding that "not just a relative offset" means the measurement of the phase error is slightly different for each SYNC (potentially by a random amount), but nominally close to correct? The suggestions below assume this is what you mean, I'll revisit if you meant something else.

    I'd also like to know what input tone you're trying to measure with the ADC, so I can quantify what "a few degrees" error is in absolute terms - for instance, if you're measuring a 10MHz tone, a one-degree variation is around 280ps, so even one degree of error could constitute setup issues; but if you're measuring a 3GHz tone, now a one-degree variation is less than 1ps, which is getting into difficult-to-debug device architecture issues. It would further be helpful to know what level of accuracy you are expecting.

    For now, here's some sources of skew that can show up between devices:

    • The datasheet makes note of the clock skew between different clock pairs, which would be a constant offset on a per-device basis. This may contribute to some static offset, but not changing offset like what I think you're describing. It's worth considering in the future, if possible, using clocks in the same clock group for better skew matching; better yet, if you can use both clocks in a pair as device clocks, and route the SYSREFs from other outputs. You have a lot of flexibility on SYSREF timing with the local analog delay, so it's better to aim for the closest match on the device clocks that you can achieve.
    • If the devices are at different temperatures or have significantly different supply voltages (a few %), these could result in variations at the phase detector timing of PLL1, which would affect the input-to-output phase. The relative drift across temperature is on the order of 1ps/°C, though there's also some variation in that number (maybe ±0.5ps/°C) as a function of process variation. I'm not sure about supply voltage variation, but keep in mind that unlike PLL2, PLL1 phase detector runs directly off of the 3.3V PLL1 supply, so it is particularly susceptible to noise or voltage variation. Variation at the charge pump changes the timing relationship of the inputs at the phase detector by ± a few picoseconds.
    • Note that the temperature differences can apply across long cabling setups as well. We've had customers try to route clocks across a few meters of cabling at drastically different temperatures, resulting in tens of picoseconds of timing error. This is especially problematic when multiple assemblies are involved, since there can be significant temperature gradients across a chassis or system.
    • Sometimes programming sequence can affect results. Every time the LSB of the PLL2_N is programmed, a recalibration of the internal VCO is triggered, which substitutes the value of the PLL2_N_CAL divider temporarily (to eliminate some uncertainties with PLL2_N and feedback mux). As a result, if the PLL2_N_CAL and the PLL2_PRE_PD are not properly set before the LSB of the N-divider is programmed, the calibration can fail and arbitrary coefficients will be selected. This can result in significant mismatch between the VCO operating VTUNE voltages, which looks like different timings at the phase detector - I've seen tens of picoseconds of variation caused by programming sequence errors. I think in some ways the nested configuration should be resistant to this, since the latency through the PLL2 loop to OSCIN is sort of irrelevant anyway and the PLL1 VCXO phase shifts to compensate it, but this can cause other issues, like...
    • We have seen some effect from different VCXO phases in nested zero-delay configurations, maybe a few picoseconds between runs. We're not yet sure exactly what's responsible, but the operating theory is that the VCXO phase results in deterministic spurs at certain intervals, which has an average effect of altering the overall input-to-output phase relationship by a few picoseconds in a somewhat-deterministic pattern. You could test for this by stepping your SYSREF dynamic digital delay one step forward at a time, though note that there is a datasheet note about how to configure dynamic delay for SYSREF and it's somewhat particular. You'd step one device's SYSREF divider forward one VCO step at a time, and check if the phase error between the ADCs shifts with it. Keep in mind that shifting the SYSREF divider phase doesn't actually change the input-to-output phase relationship, because that's guaranteed by the zero-delay configuration; but it does change the 132MHz phase offset, so you might want to also step those outputs along with the SYSREF to ensure everything stays nominally in-phase to the same VCO cycle. Likewise, this changes the input-to-VCXO and output-to-VCXO phase relationship, which moves the timing of the VCO in a way that might minimize spurs or timing impacts. I suspect a PLL2_R divider reset could also help if timed to force a deterministic phase at the VCXO, though I'm not sure how well it would work with the OSCIN multiplier enabled.
  • Thanks for your extremely detailed response Derek. After taking your suggestions and digging further into it, it's looking more like the clocks might be all in phase between our LMKs and it's not our actual problem. Suggestions that helped include:

    • temperature and wind was noticeably affecting the VCXOs (not the actual LMKs) and we cooled and isolated those
    • shorter cabling
    • confirming our register settings.

    We are working on a multi Xilinx RFSoC system where we are trying to get the two sets of ADCs in the chips to come up at deterministic phases relative to each other. We have the LMK feeding an LMX02820 to generate a high frequency 2112MHz for ADC sampling. We are currently seeing up to 200ps in phase variance when we reprogram the LMK04832 (or cycle power) and rerun all the Xilinx sync stuff and I was initially thinking it was the clocking, but now I'm leaning less this way. Interestingly, I can reprogram the LMXs and the phase relation between the two RFSoCs doesn't change.

    I'm now back to digging into the RFSoC. Thanks for your help with this.