Tool/software:
Hello,
I'm trying to configure the LMK05318B to operate with two alternative references, PRIREF is 10 MHz and SECREF is 125 MHz.
The GUI tool correctly determined that the TDC is 5 MHz, thus PRIREF shall be divided by R=2, SECREF shall be divied by R=25; the feedback divider is 2500 / 4 / 5 = 125.
If I supply on SECREF 125 MHz and disable every reference input qualification function, the DLL locks as expected, so configuration of dividers should be correct.
I'm trying to enable the reference input monitoring functions to detect when a valid reference is actually present.
The amplitude monitoring function seems to work, however it is not enough to determine if the supplied reference has the right frequency.
So I tried to enable alternately both the early / late function and the frequency detection function,testing the 125 MHz reference on SECREF: none worked.
The GUI tool computed early / late function registers PRIREF_MISSCLK_DIV=00008A and PRIREF_EARLY_CLK_DIV=000070 (for 10 MHz reference),
and SECREF_MISSCLK_DIV=00000D and SECREF_EARLY_CLK_DIV=000007 (for 125 MHz reference).
Given that there's no explanation in the documentation, I'm performing some retro-engineering to try to understand how the detection works:
from what I can understand, a counter operating at 625MHz (2500 MHz of VCO1 divided by 4) counts clock cycles between rising edges of reference.
For PRIREF (5 MHz) the period count is 625 / 5 = 125 (0x7D), which is exactly in the middle of values 0x70 and 0x8A computed by the GUI tool.
The values could be correct, but I have no 10 MHz reference to check this.
For SECREF (125 MHz) the period count is 625 / 125 = 5 (0x05), which is outside the acceptable range computed by the GUI tool (0x07 - 0x0D).
If I modify the register values to from 0x07 / 0x0D to 0x03 / 0x07, the early / late detector pass, however given the high frequency employed and the lower values obtained,
the measurement precision is very poor. Given that the values computed by the GUI are exactly the double of expected (and working) value,
I suppose there could be some sort of multiplier, which could be used to double / multiply the internal clock derived by VCO1, used to count the time interval
between reference rising edges.
I already tried to change SECREF_WINDOW_DET_DBLR_EN to 1 (register 0xC9) with no effect.
I'm trying to let frequency detection work.
The GUI tool computed PRIREF_PPM_MIN =SECREF_PPM_MIN = 0x0064 (100) and PRIREF_PPM_MAX =SECREF_PPM_MAX = 0x006E (110).
PRIREF_PPMDIV =SECREF_PPMDIV = 16 (register 0xD8 value is 0xF).
PRIREF_CNTSTRT = 0x00001E85, PRIREF_HOLD_CNTSTRT = 0x000F4280, while SECREF_CNTSTRT = 0x00017D79, SECREF_HOLD_CNTSTRT = 0x000F4248.
With these numbers, SECREF 125 MHz reference always fails detection.
Given that there's no explanation in the documentation, I tried to understand how frequency detection works.
I suppose SECREF_HOLD_CNTSTRT can be used to determine a time interval, expressed as the number of cycles of internal clock divided by SECREF_PPMDIV.
Inside the observation time interval, the number of reference cycles is counted and divided by SECREF_CNTSTRT.
The result is then compared with the range defined by SECREF_PPM_MIN / SECREF_PPM_MAX.
The detection never works, no matter how I change the SECREF_PPM_MIN / SECREF_PPM_MAX values.
Could you please explain clearly how register values for early / late and frequency monitor shall be calculated?
Thanks
Andrea