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.

[参考译文] LMK05318B:DLL PRIREF 和 SECREF 早期/后期和频率检测问题

Guru**** 2546020 points
Other Parts Discussed in Thread: LMK05318B

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1569512/lmk05318b-dll-priref-and-secref-early-late-and-frequency-detection-issues

器件型号:LMK05318B


工具/软件:

您好:

我正在尝试将 LMK05318B 配置为使用两个替代基准运行、即 PRIREF 为 10MHz、SECREF 为 125MHz。
GUI 工具正确确定 TDC 为 5MHz、因此 PRIREF 应除以 R=2、SECREF 应被 R=25 整除;反馈分频器为 2500/4/5 = 125。
如果 I SUPPLY 位于 SECREF 125MHz 上并禁用每个基准输入限定功能、DLL 将按预期锁定、因此分频器配置应正确。

我正在尝试启用基准输入监控功能、以检测有效基准何时实际存在。
振幅监控功能似乎有效、但不足以确定所提供的基准是否具有正确的频率。
因此、我尝试同时启用早期/后期功能和频率检测功能、在 SECREF 上测试 125MHz 基准: 均无效。

GUI 工具计算的早期/后期函数寄存器 PRIREF_MISSCLK_DIV=00008A 和 PRIREF_EEARTH_CLK_DIV=000070(用于 10MHz 基准)。
和 SECREF_MISSCLK_DIV=00000D 和 SECREF_EEARLY CLK_DIV=000007(用于 125MHz 基准)。

鉴于文档中没有任何说明、我正在执行一些改造工程以尝试了解检测的工作原理:
据我所知、在 625MHz (VCO1 除以 4 的 2500MHz) 下运行的计数器对基准上升沿之间的时钟周期进行计数。  
对于 PRIREF (5MHz)、周期计数为 625/5 = 125 (0x7D)、恰好位于 GUI 工具计算的值 0x70 和 0x8A 的中间。  
这些值可能是正确的、但我没有 10MHz 参考来进行检查。  
对于 SECREF (125MHz)、周期计数为 625/125 = 5 (0x05)、这超出了 GUI 工具计算的可接受范围 (0x07 - 0x0D)。
如果我将寄存器值从 0x07/0x0D 修改为 0x03/0x07、那么较早/较晚的检测器会通过测试、但考虑到使用的频率较高且获得的值较低、  
测量精度很差。 鉴于 GUI 计算的值恰好是预期(和工作)值的两倍、  
我想可能有某种乘法器、它可用于将由 VCO1 获得的内部时钟加倍/相乘、以用于计算时间间隔
之间的差值。
我已经尝试将 SECREF_WINDOW_DET_DBLR_EN 更改为 1(寄存器 0xC9)但无效。

我尝试让频率检测正常工作。
GUI 工具计算得出的 PRIREF_PPM_MIN = SECREF_PPM_MIN = 0x0064 (100)、并且 PRIREF_PPM_MAX = SECREF_PPM_MAX = 0x006E (110)。
PRIREF_PPMDIV =SECREF_PPMDIV = 16(寄存器 0xD8 值为 0xF)。
PRIREF_CNTSTRT = 0x00001E85、PRIREF_HOLD_CNTSTRT = 0x000F4280、而 SECREF_CNTSTRT = 0x00017D79、SECREF_HOLD_CNTSTRT = 0x000F4248。
使用这些数字时、SECREF 125MHz 基准始终会失败检测。
鉴于文档中没有说明、我尝试了解频率检测的工作原理。
我假设可以使用 SECREF_HOLD_CNTSTRT 来确定时间间隔、表示为内部时钟周期数除以 SECREF_PPMDIV。
在观察时间间隔内、基准周期数被计数并除以 SECREF_CNTSTRT。
然后将结果与 SECREF_PPM_MIN /SECREF_PPM_MAX 定义的范围进行比较。
无论如何更改 SECREF_PPM_MIN /SECREF_PPM_MAX 值、检测都不起作用。


您能否清楚地解释一下应如何计算早期/后期和频率监控器的寄存器值?

谢谢

Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jennifer 您好:
    很高兴在这个频道上再次找到你!

    感谢片段,确实我搜索了 TICS Pro 较新版本的文件,并找到了这些文件。

    我尝试按照建议逐个启用探测器。
    频率检测器绝不会在 SECREF 上用作 125MHz 基准。
    我可以确认,早期/后期工作,但只有在一个系数校正后,如解释.

    对于频率检测:
    我尝试重复计算、并获得非常相同的结果。
    我想我了解了逻辑引擎的工作原理、使用由 XO 计时的计数器(可能加倍)进行计数
    周期 SECREF_HOLD_CNTSTRT 以确定时间间隔和另一个由 SECREF 计时的计数器、
    除以 SECREF_PPMDIV 因子、以对 SECREF_CNTSTRT 周期的几个周期进行计数。
    当时间过去时、如果没有精度误差、则第二个计数器的当前值应接近 0。  
    如果基准时钟速度稍快(+ppm 误差)、则计数器将具有一个与 ppm 误差成正比的正值。  
    可以将其与 SECREF_PPM_MIN 和 SECREF_PPM_MAX 值进行比较、以确定是否存在错误
    在可接受的范围内。
    但是、如果基准时钟略慢(-ppm 误差)、计数器的值将略低于 SECREF_CNTSTRT。
    在这种情况下、与阈值进行直接比较肯定会失败、因为该值非常大、除非设计了一些内部逻辑
    计数器的值作为有符号整数值、并在符号为负时将该值取反。
    目前、我无法按所需的 ppm 尝试调整 SECREF 上的 125MHz 基准 I SUPPLY、
    我也不知道频率是略低于还是高于确切值。  
    也就是说、即使我配置了高 ppm 范围、频率检测器始终会出现故障、肯定会高于精度误差之和。

    早/晚:
    实际上、在代码中、如果计数器值太小、则会设置一个无文档记载的寄存器:ref_CMOS_CLK_1p25G_EN
    搜索 PDF 上的通信、但它不存在。
    仔细查看 LMK05318B.ini 文件似乎表明这是 R68 的 Bit5(在 PDF 上是保留位)。
    不过、我怀疑这会影响 PRIREF 和 SECREF 的计算:GUI 工具上可能存在错误、
    因为在我的情况下 PRIREF 是通过清除位(正常情况)计算的、所以 SECREF 是通过将位置为有效来计算的。
    请提供建议。

    Andrea

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我终于设法让它工作!

    对于频率检测:
    我正在使用没有倍频器的 XO、因此我必须重新计算新设置的所有值。  

    早/晚:
    我修改了将 1 写入 R68 的 REF_CMOS_CLK_1p25G_EN 位 5 的配置。  
    然后考虑 1250MHz 时钟而不是 625MHz、重新计算早期延迟系数。

    谢谢

    Andrea