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.

[参考译文] AFE7950:4T4R2F 8b10b 2.500Gbps SERDES、500 MHz REFCLK、PLL 报告未锁定

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

https://e2e.ti.com/support/rf-microwave-group/rf-microwave/f/rf-microwave-forum/1471751/afe7950-4t4r2f-8b10b-2-500-gbps-serdes-500-mhz-refclk-pll-reporting-not-locked

器件型号:AFE7950

工具与软件:

您好!

我已将 AFE7950器件安装在与 Xilinx FPGA 并置的 PCB 上、该 FPGA 对 TI_204C_IP_Ref.sv 设计进行实例化。  我之前在 AFE7950EVM 评估平台上实例化了相同的设计、该平台提供491.52 MHz REFCLK。  在我们的设计中、我们在500 MHz 处驱动 REFCLK。  我们直接从 PLL 提供该时钟、因为我们最终会直接将12000 MHz 作为采样时钟提供给 DAC。  我们的启动方法是:
1.在 Latte 中运行附带的脚本 setup_500.00_ddc48_fb24_duc96_DB.py、通过 SPI 配置 AFE7950EVM
2.从 Latte 终端捕获 SPI 序列
3.在我们的定制 PCB 系统上执行从采集序列中执行的所有 SPI 写入和读取操作
4.捕获 
500.00_ddc48_fb24_duc96.log、其中显示了我们的定制 PCB 设置中的所有 SPI 事务

我假设日志中的以下序列告诉我 PLL 未锁定:

Writing into  0x0066 value  0x00
Writing into  0x0066 value  0x01
Writing into  0x0066 value  0x03
Writing into  0x0063 value  0x41
Writing into  0x0063 value  0x01
Reading From  0x0066 value  0x03
Reading From  0x0066 value  0x03
Reading From  0x0066 value  0x03
Reading From  0x0066 value  0x03
Writing into  0x0066 value  0x31

我捕获了一些示波器捕获来调查 REFCLK 的行为:

带有高阻抗探头的 REFCLK+:

带高阻抗探头的 REFCLK-:

具有低阻抗探头的 REFLK +/-和差分探头:

我已经将 REFCLK 频率测量为500 MHz。  我注意到+和-腿之间的不平衡。  我还注意到、2V 摆幅(差分)略高于1.8V Vppdiff 的建议运行条件。

您是否认为降低差动摆幅的幅度是正确的做法?  您还可以看看我的脚本和日志、看看脚本是否看起来正确、以及日志中是否还有其他任何内容指示不同的问题?

谢谢!
Jesse

e2e.ti.com/.../files_5F00_02092025.zip

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

    在这个问题上、我已经取得了一些进展、但仍难以让器件完全正常运行。  以下是到目前为止我的步骤和结果:

    1. 我将 REFCLK 的振幅降低到大约1Vpp 差分摆幅、现在主 PLL 锁定、由 SPI 读取日志指示:
      Writing into  0x0066 value  0x00
      Writing into  0x0066 value  0x01
      Writing into  0x0066 value  0x03
      Writing into  0x0063 value  0x41
      Writing into  0x0063 value  0x01
      Reading From  0x0066 value  0x33
      Reading From  0x0066 value  0x33
      Reading From  0x0066 value  0x33
      Reading From  0x0066 value  0x33
      Reading From  0x0066 value  0x33
      

    2. 我们在生成的 SPI 日志中注意到、该器件报告其 SERDES PLL 未锁定:
      从0x0118、0x0119进行的任何读取:

      Reading From  0x0119 value  0xff
      Reading From  0x0118 value  0xc0
      

    3. 主 PLL 实现锁定但 SERDES PLL 报告失锁的所有可能原因是什么?
      您是否在随附的日志中看到任何可能指向问题的内容?

    4. 请注意、这是一个定制电路板、我们不使用 Latte 来配置器件。  我们在评估系统上捕获来自 Latte 的 SPI 事务、并在 RESET 失效后通过定制软件将其发送到 AFE7950。

      我们在定制电路板上生成所有时钟:

      500 MHz AFE REFCLK
      将3.90625 MHz SYSREF 更改为 AFE 和 FPGA
      156.25 MHz MGTREFCLK 到 FPGA

      • 内部 FPGA PLL 使31.25 MHz Mgt_freerun_clock
      • 内部 FPGA PLL 使31.25 MHz TX_sys_clock
      • 内部 FPGA PLL 使250 MHz TX_sys_clock

      我们有两个表现出完全相同行为的板。

      有关可驱动 AFE SPI 配置的软件的注意事项:

      • 我们通过查看./Documents/Texas instruments/AFE79xxLatte/lib/ AFE79xxConfig.txt 注意到了一些问题
        • 答:会执行一些宏、我们现在正在检查机器是否已为宏做好准备、以及宏是否已成功完成。  您可以在随附的日志中观察到这一点
        • B.我们认为我们也需要执行突发写入。  我们通过将每个字节写入一个递增的地址来执行这些突发
      • 您能告诉我如何生成我们自己版本的 AFE79xxConfig.txt 日志文件吗?  尽管我们认为通过以下命令启用日志记录、但在评估系统上每次执行 Latte 时我们不会看到生成的新版本:

      logDumpInst=mLogDump.logDump (Asterix_DIR+devices_DIR+r"\AFE79xxConfig.txt")

    5. 请参阅以下附件(压缩后的附件):

      AFE79xxConfig.txt–我认为这是一个示例、不是由我们的 Latte 配置生成的

      AFE7950.log -在我们的定制电路板上2025年02月12日 配置的捕获

      setup_500.00_ddc48_fb24_duc96_DB.py -评估板上用于捕获 SPI 配置的 Latte 设置

      bringup_4R_2F_4T.py -用于配置 AFE7950的 Latte 脚本


      e2e.ti.com/.../e2e_5F00_serdes_5F00_pll_5F00_not_5F00_locking.zip

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

    尊敬的 Jesse:

    为了进行确认、要获取寄存器写入/读取检查/轮询来启动 AFE79xx 器件、您是生成配置文件还是使用命令提示符窗口? 正确的方法是通过设置以下参数来启用文件日志记录、从而生成配置文件。 如果您使用的是命令提示符窗口、则可能是设备启动不正确、这可能是您看到问题的原因。  

    logDumpInst.logFormat=0x1 #Modify 至0x1以将寄存器序列保存到日志文件中。 脚本的执行需要更多时间。  

    此致、

    David Chaparro  

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

    还有一点需要注意的: 我们使用 Wireshark 来观察通过在 Latte 中用评估板运行设置和启动脚本而产生的突发写入模式。  然后、我们使用这些字节来发出事务(非突发但递增地址)

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

    尊敬的 Jesse:

    此外、如果要将突发写入部分中断为各个写入、还可以向 Latte 脚本添加以下命令。  

    device.logClassInst.logCombinedBurstWrites=False

    此致、

    David Chaparro  

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

    尊敬的 David:
    我现在能够正确生成日志转储、我关闭了突发以确保我们有正确的公式用于分离突发写入。  我们现在将查看该日志、并查看我们的配置是否不正确。
    Jesse

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

    尊敬的 David:
    我们已经完成了对 AFE 的 logDump 与 SPI 命令的初步审查。  我们认为配置正确。 我随附了 logDump、我们的定制电路板的 SPI 日志、感谢您的观看、了解您是否发现了任何配置错误的内容。

    当命令外部 REFCLK 作为源时、是否需要通过外部(除了电源轨、RESETZ 和 REFCLK)来实现 SERDES PLL 锁定?

    我们注意到、在评估板上 Latte 工具中的 SPI 日志和 SPI 日志之间只有几个差异:
    1.我在上面已经提到过、我们回读0x0118和0x0119、表示 SERDES PLL 报告已解锁并发出警报
    2.  

    In the Digital Top Page:
    
    Register 0x086b:
    - Eval board: reads 0xd3
    - Our board: read 0x57
    
    Register 0x086a:
    - Eval board: reads 0x00
    - Our board: reads 0xc0
    
    -----
    Writing into  0x0011 value  0x00
    Writing into  0x0015 value  0x40
    Reading From  0x086b value  0x57
    Reading From  0x086a value  0xc0
    -----
    我们不确定这些寄存器表示什么。

    请告诉我 您是否注意到任何明显配置错误的内容。

    e2e.ti.com/.../logs.zip

    谢谢!
    Jesse

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

    我们使用 Wireshark 捕获 Latte 发送到评估板的所有 SPI 事务。  我们将转换为使用 logDump

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

    尊敬的 David:

    我详细复查了由软件+定制电路板生成的 SPI 日志与 Latte 日志转储。  两者都随附在上面的 logs.zip 中。  如果您能查看该材料、并且能够具体说明我注意到的以下方面、我希望您能回答:
    1. AFE79xxConfig_no_bursts.txt 的第20021-20035行与读取0x012c 和0x0130时2025-02-13T17_28_28-08_00_SPI.log 的16934-16935行中观察到的值不同。  我们观察到0xff 的值、而评估系统观察到0x08的值。   寄存器映射的 ADC_JESD_AB 页面上似乎存在差异、可指示 SYSREF 和 JESD_CLK 的状态。  您能告诉我如何解释这些值吗?

    2.我是否正确解释了中从0x0119和0x0118读取的日志文件、该文件表明我们的 SERDES PLL 已解锁?  您能否列出 SERDES PLL 锁定必须存在的依赖项?

    谢谢!

    Jesse

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

    其他问题:
    1.我们想选择主 PLL 输出作为 SERDES PLL 的时钟源、并调整分频器设置以进行48分频、而不是2分频。  您能否提供实现此目的的方法?  (以橙色显示)

    2.是否有更新版本的 AFE79xx 编程用户指南?  我们正在使用标记为从2020年5月开始的草稿版本。  我问的原因是 logDump 包含某些寄存器中设置的位、而这些位未在用户指南中列出。  例如:SERDES PLL 0x49fb 设置为0x72、其中包括设置 UG 中未列出的位1。

    谢谢!
    Jesse

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

    尊敬的 Jesse:

    GUI 将自动设置时钟、因此无法手动更改时钟。 《编程用户指南》仅介绍了器件配置后使用的最常见寄存器、因此并非每个寄存器。 我们建议遵循 AFE79xx GUI 生成的日志。

    对于时钟问题、我们怀疑这与传入时钟有关。 您是否有机会调试 AFE 输入端的振幅问题? 您是否能够共享您正在使用的时钟芯片上的信息、并且您是否能够确认 AFE 输入时钟是交流耦合的?  


    此致、

    David Chaparro  

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

    尊敬的 David:

    我们确实调整了输入 REFCLK 以匹配数据表要求、并尝试尽可能匹配测量的 AFE7950EVM REFCLK 电平。  REFCLK 采用交流耦合。  仅 REFCLK 调整就确实允许主 PLL 锁定、但 SERDES PLL 保持解锁状态。

    我们最近刚刚执行了一项测试、通过我们的 FPGA 路由 AFE7950 EVM SPI 总线、以允许 Latte 直接与定制模块上的 AFE7950连接。  该测试导致 AFE7950在 SERDES PLL 报告锁定的情况下预期启动。  我们已捕获了 SPI 事务、并将其与之前的方法进行了比较。  检测到的唯一差异是、Latte 通过 SPI 执行突发事务、我们的 FW 当前不允许突发事务。 我们注意到、即使使用此标志 device.logClassInst.logCombinedBurstWrites=False、Latte 仍会执行突发写入、但会将突发记录为带有递增地址的单个字节。  然后、我们使用 FTDI 板来配置 AFE、成功完成突发事务。  我们在尝试从外部连接到 FTDI 板时注意到的一点是、SPIB1和 SPB2似乎没有响应读取请求。  我们是否需要通过 SPIA 进行配置才能使用 SPIB1和 SPIB2?

    谢谢!
    Jesse

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

    尊敬的 Jesse:

    两个辅助 SPI 端口 SPIB1和 SPIB2仅在器件配置后以及仅在 Latte 脚本中设置时才可用。 主 SPI 端口 SPIA 是唯一可用于配置 AFE 的端口、并且可以通过启动来设置辅助端口。 请注意、两个 SPI 端口无法同时访问同一个 SPI 页面。  

    要将 SPIB 设置为在配置后使用、应对 sysParams.gpioMapping 参数进行以下更改。

    'G12':'SPIB1_SDO'、

    'H11":"INTBIPI_SPIB1_SDI"、

    'h16':'SPIB1_CSn'、

    'G16':'SPIB1_CLK'

    此致、

    David Chaparro