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.

[参考译文] ADC12J1600:启动之间的确定性延迟。

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/721914/adc12j1600-deterministic-latency-between-startups

器件型号:ADC12J1600
我正在尝试使 ADC12J1600在启动之间具有确定性延迟。 使用频率为12.5MHz (器件时钟的1/128)的脉冲参考频率。 该频率是 LMFC 的次谐波。 我还尝试了一个连续的 sysref。 JESD204B 链路启动且 FPGA 从 ADC 接收数据、但每个启动的 RBD 计数值会随机变化、并且涵盖1到32的整个范围。 我还可以在数据中观察到这种随机延迟。 此外、寄存器 CLKGEN_1 (0x031)中的脏捕获(位7)设置为高电平、SysRefGet (位6)设置为低电平。 根据文档、这表示 SYSREF 不满足设置或保持要求。 我已经尝试使用寄存器 CLKGEN_2 (0x032)中的 RDEL (3-0)来循环遍历 SYSREF 的所有不同延迟。 我还尝试向 SYSREF 或与 RDEL 组合的器件时钟添加一些外部延迟。 结果始终相同、脏捕获为高电平、SysRefGet 为低电平、RBD 计数为随机值。 您是否对可能出现的问题或如何进一步调查问题有任何建议? 
我们使用以下设置: L=1、M=2、F=4、N=15、N'=16、 S=1、K=32、DDR=0、P54=1
抽取= 32。 器件时钟为1600MHz。 Sysref 12.5MHz 脉冲或连续。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    对于该配置、最大 LMFC (本地多帧时钟)频率为1.5625MHz。
    F_LMFC = F_BIT /(F * K *每个八位位组10位)
    对于 F_CLK = 1600MHz、DDR = 0、P54 = 1 f_bit = 1600MHz * 1.25 = 2000MHz。
    因此 F_BIT = 2000 /(4 * 32 * 10)= 1.5625MHz
    请尝试将 SYSREF 频率更改为1.5625MHz 或该频率的次谐波、并让我知道行为是否有所改善。
    此致、
    Jim B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我尝试将 SYSREF 的频率更改为1.5625MHz、但它没有改变行为。 我没有尝试 1.5625MHz 的次谐波、因为硬件无法为 SYSREF 生成该低频率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好
    如果从未设置 SysRefGet 位、则表示未检测到有效的 SYSREF 上升沿。
    请确认您是将 SYSREF 信号从时钟源直流耦合到 ADC12J1600。 如果可能、请发送一个原理图来显示 SYSREF 源和 ADC SYSREF 输入之间的连接。
    ADC12J1600 SYSREF 输入端 SYSREF 信号的共模电压和差分摆幅是多少? 如果共模电压过高、可能会导致正确检测出现问题。
    写入 CLKGEN_0 (地址0x030)的值是多少。 确保位7和位6都被置位以启用 SYSREF 接收器和 SYSREF 处理。
    可能需要设置 DC_LVPECL_SYSREF_EN、具体取决于 SYSREF 源的类型和连接/终端方法。
    此致、
    Jim B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    遗憾的是、硬件设计人员和项目负责人决定我不能在公共论坛上共享有关硬件的任何信息。 我只能说交流耦合。 我既不能提供原理图、也不能提供任何电压测量。

    寄存器 CLKGEN_0 (0x30)中的位7和位6都被置位。 首先、两个位都设置为0、然后在延迟后将位7设置为高电平、在额外的延迟后将位6设置为高电平。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道。
    对于交流耦合系统、您需要使用以下两种情况之一进行操作:
    1) 1)运行连续 SYSREF。 连续 SYSREF 将确保交流耦合 SYSREF 输入在适当的电压下偏置。
    2) 2)运行突发模式 SYSREF。 在启用 SYSREF 处理之前、突发必须足够长、以便正确偏置 SYSREF 接收器。 正确设置 LMFC 时序后、可以禁用 SYSREF 处理、然后关闭 SYSREF 突发。 如果需要重新同步链路、则必须重复此过程。
    您能否向我发送您要发送到 ADC12J1600器件的整个寄存器写入序列? 我将对其进行检查、并推荐所需的任何更改。
    如果您无法共享设置、我将在明天提供建议的配置写入序列。
    对于该抽取和通道速率设置、请确保应用的 SYSREF 频率为 F_SYSREF = F_bit/(4 * 32 * 10)。
    此致、
    Jim B
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    这是我为 ADC 推荐的配置写入序列。

    • 为 ADC 加电
    • 为时钟源加电
    • 打开到 ADC 的 DEVCLK 和 SYSREF

    ADC12J1600初始化

    • 写入0x0021 0x00 //启动所有寄存器的复位
    • 写入0x0021 0x01 //使复位无效
    • 写入0x0201 0xFC //扰频器打开、KM1 = 31、SDR、JESD 被禁用
    • 写入0x0040 0x04 //为高速 PCB 设置串行器预加重
    • 写入0x0066 0x03 //启用时序优化的前景校准模式
    • 写入0x0208 0x07 //将超范围处理更改为最长间隔
    • 写入0x0051 0x84 //针对大信号优化校准
    • 写入0x0200 0x17 // 6.02dB 增益、32倍抽取
    • 写入0x0202 0x80 // P54 PLL 开启、单端同步、正常数据模式
    • 写入0x0030 0xC0 // SYSREF 接收器启用,SYSREF 处理器启用
    • 写入0x0201 0xFD //扰频器打开、KM1 = 31、SDR、JESD 被启用

    ADC SYSREF 延迟校准程序

    • 写入0x032 0x80 //将 RDEL 设定为最小值

    开始循环

    • 写入0x030 0xF0 //清除脏捕获和 SysRefGet
    • 写入0x030 0xC0 //清除脏捕获和 SysRefGet
    • 读取0x031 //检查 SysRefGet 和脏捕获位的状态。 如果 SysRefGet = 1、则记录脏捕获位状态并继续下一步。 如果 SysRefDet=0、则由于没有 SYSREF 检测而在出错时退出。
    • 读取0x032 //检查低半字节,如果 F 则退出循环,否则增加低半字节和
    • 写入0x032 0x8x //将 RDEL 设置为下一个更高的值

    返回到循环开始

    评估 REACH RDEL 设置上脏污捕获的记录值。 将存在一系列 RDEL 设置、其中设置了脏捕获。 选择距离脏捕获范围中间最远的 RDEL 设置。

    • 写入0x032 // 0x8y 、其中 y 是所选的 RDEL 值
    • 写入0x030 0xF0 //清除脏捕获和 SysRefGet
    • 写入0x030 0xC0 //清除脏捕获和 SysRefGet
    • 读取0x031 //检查 SysRefGet 和脏捕获位的状态。 确认 SysRefGet = 1且脏捕获= 0

    LMFC 现在通过 SYSREF 的清晰捕捉进行设置

    • 写入0x0201 0xFC // 扰频器打开、KM1 = 31、SDR、JESD 被禁用
    • 写入0x0050 0x0E //启动前台校准
    • 写入0x0201 0xFD //  扰频器打开、KM1 = 31、SDR、JESD 被启用

    启用 ADC JESD204B 发送器后、此时启用 FPGA JESD204B 接收器并保持稳定

    如果使用突发模式 SYSREF (以最大程度地减少 ADC 频谱中与 SYSREF 相关的杂散)、则在从时钟源停止 SYSREF 输出之前执行以下操作

    • 写入0x0030 0x80 // SYSREF 接收器被启用、SYSREF 处理被禁用
    • 关闭时钟源上的 SYSREF

    如果由于链路干扰或错误而必须重新捕获 SYSREF 以重新对齐 ADC、则反向上述过程。

    我希望这一顺序足够明确。

    如果您有任何疑问、请告诉我。

    此致、

    Jim B

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

    这是序列。

    首先、这是写入的数据的 blob。
    地址、数据
    WR:0x0021、0x00
    WR:0x0021、0x01
    WR:0x0030、0x00
    WR:0x0033、0xC3
    WR:0x0040、0x04
    WR:0x0066、0x03
    WR:0x002B、0x13
    WR:0x0208、0x07
    WR:0x0051、0x84
    WR:0x0201、0xFC
    WR:0x0200、0x37
    WR:0x0202、0xC0
    WR:0x0206、0xFF
    WR:0x0207、0xFF
    WR:0x0208、0x07
    WR:0x020C、0x01
    WR:0x020D、0x00
    WR:0x020E、0x00
    WR:0x020F、0x00
    WR:0x0210、0x00
    WR:0x0211、0x00
    WR:0x0212、0x40
    WR:0x0213、0x74
    WR:0x0214、0x00
    WR:0x0215、0x00
    WR:0x0218、0x00
    WR:0x0219、0x00
    WR:0x021A、0x00
    WR:0x021B、0x10
    WR:0x021C、0x00
    WR:0x021D、0x40
    WR:0x0220、0x00
    WR:0x0221、0x00
    WR:0x0222、0x00
    WR:0x0223、0x10
    WR:0x0224、0x00
    WR:0x0225、0x80
    WR:0x0228、0x00
    WR:0x0229、0x00
    WR:0x022A、0x00
    WR:0x022B、0x10
    WR:0x022C、0x00
    WR:0x022D、0xC0
    WR:0x0201、0xFD
    WR:0x0050、0x06

    然后、将写入 rdel 并递增 mod 16、以便在下一次尝试时使用 nest 值
    0x0032、rdel
    rdel =(rdel + 1)% 16.

    清除 ADC 警报

     Rd:0x030、tmp
     WR:0x030、tmp | 0x30
     WR:0x030、tmp & 0xCF
     Rd:0x205、tmp
     WR:0x205、tmp | 0x18


    启用 sysref 接收器。
    WR:0x0030、0x00
    休眠100毫秒
    WR:0x0030、0x80
    休眠100毫秒
    WR:0x0030、0x40

    睡眠1s
    Sysref 在此处触发。
    休眠2秒

    等待直到 RX PLL 被锁定。

    清除 ADC 警报
    清除 FPGA 上的 JESD204B 警报
    睡眠1s

    对于(0至7):

     检查是否有错误
     RD:0x031、REG_0x031
     RD:0x205、REG_0x205
     清除 ADC 警报

     如果(((REG_0x031和0xC0)=0x80)&&((REG_0x205和0x64)=0x64)&&(无 JESD204 FPGA 错误))
       成功
     其他
       睡眠1s


    转到"开始"

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

    你(们)好

    很抱歉、我们花了一段时间来分析并作出响应。

    我认为您的写入的初始部分是可以的。 我认为可以省略一些写操作、因为它们不是必需的。  

    具体来说,我将删除这两项:

    WR:0x002B、0x13 -该寄存器被保留。 该写入内容已包含在早期版本的 EVM GUI 软件中、但现在没有作用。

    WR:0x0208、0x07 -该写入发生两次。 我建议删除其中一个写入。

    在该写入块之后、SYSREF 校准序列有几个我认为会导致问题的项目:

    请参阅以下突出显示的项目:

    然后、将写入 rdel 并递增 mod 16、以便在下一次尝试时使用 nest 值
    0x0032、rdel
    rdel =(rdel + 1)% 16.

    清除 ADC 警报

     Rd:0x030、tmp
     WR:0x030、tmp | 0x30
     WR:0x030、tmp & 0xCF
     Rd:0x205、tmp
     WR:0x205、tmp | 0x18


    启用 sysref 接收器。
    WR:0x0030、0x00
    休眠100毫秒
    WR:0x0030、0x80 -这是设置 SysRef_Rcvr_en 并保留 SysRef_PR_en = 0。 这是建议的启动顺序。
    休眠100毫秒
    WR:0x0030、0x40 -如果这是准确的、则该写入将启用 SysRef_PR_en、但同时清除 SysRef_Rcvr_en。 这将阻止 SYSREF 处理工作。

    睡眠1s
    Sysref 在此处触发。 -如果 SYSREF 是交流耦合的、那么在启动 SYSREF 之前启用 SYSREF 处理肯定会导致 SYSREF 的错误捕捉。 当 SYSREF 停止并进行交流耦合时、电容器会去偏置、以便 SYSREFp 和 SYSREFn 都处于大致相同的电压。 在这种情况下、SYSREF 输入上的任何噪声都将导致 SYSREF 的错误触发。

    对于交流耦合 SYSREF、建议的序列是启动持续运行的 SYSREF、然后启用 SYSREF 接收器和 SYSREF 处理、然后清除错误标志位。 然后在第一个 RDEL 设置时再次检查状态位。 在更改 RDEL 设置之前、应禁用 SYSREF 处理、然后在设置新值后重新启用。 然后、在每个 RDEL 设置时、应检查 SysRefGet 和脏捕获位。

    休眠2秒

    等待直到 RX PLL 被锁定。 -在 SYSREF RDEL 校准序列期间、实际上没有必要在 FPGA 侧建立链路。 选择最终的 RDEL 设置并且 ADC 已与 SYSREF 同步后、RX 侧可启用。

    清除 ADC 警报
    清除 FPGA 上的 JESD204B 警报
    睡眠1s

    对于(0至7):

     检查是否有错误
     RD:0x031、REG_0x031
     RD:0x205、REG_0x205
     清除 ADC 警报

     如果(((REG_0x031和0xC0)=0x80)&&((REG_0x205和0x64)=0x64)&&(无 JESD204 FPGA 错误))
       成功
     其他
       睡眠1s


    转到"开始"

    我希望这对您有所帮助。

    此致、

    Jim B

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

    感谢您发现我的愚蠢错误。 将 wr:0x0030、0x40更改为 wr:0x0030、0xC0会在使用持续运行的 sysref 时检测到 sysref 而不会进行脏的捕获。 现在、我在启动之间具有确定性延迟。 感谢你的帮助。