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.

[参考译文] DS250DF410:需要帮助以解决链接问题

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1495199/ds250df410-need-help-to-troubleshoot-the-issue-with-the-link

部件号:DS250DF410
主题中讨论的其他器件: DS280DF810

工具/软件:

您好的团队、

我们在其中一种设计中使用 DS250DF410重定时器、其中重定时器保持在两个 AMD Zynq UltraScale+ SoC 之间。 连接如下所示:

MPSoC1 Gty_TXN >> PCB 布线第1部分 >> DS250DF410 >> PCB 布线第2部分 >> MPSoC2 GTYx_RXn

我们有多个与上面所示相似的链接、我们 在数据速率 为24.33024Gbps 的 MPSoC 之间使用 Aurora 协议。  在启动过程中、MPSoC1最初启动、然后配置重定时器、然后启动 MPSoC 2。

我们注意到 一些链路存在问题、即在接收端 MPSoC (两个 MPSoC 随机)接收的帧中存在错误。 请参阅下面的观察结果:

-我们观察到错误( 在 Aurora 中的软错误)在受影响的链路中不断增加,而其他的工作正常。

-这个问题不是一直观察到,但它发生的概率大约是5次启动中的1次。

-我们尝试重新配置重定时器(它也重新建立了 Aurora 链路),这阻止了错误的增加。

-同样,我们通过在 MPSoC2也启动后配置重定时器来更改顺序,这也可以正常工作,并且链路没有任何错误。

-完成上述步骤后(没有错误),我们重新启动了两个 MPSoC ,使重定时器保持在配置状态。 但是、这种情况会像以前一样导致误差递增。

-我们在启动后在两个 SoC 中重新发送了 Aurora IP ,这也阻止了错误的增加。

从上述意见可以明显看出、重新建立 联系似乎正在解决这个问题。 但是、 由于我们只在我们的几个电路板中观察到这个问题、而其他电路板(以及同一电路板中的其他链路)中的链路运行正常、因此我们怀疑这些电路板是否存在任何潜在的信号完整性、元件或时序问题。 因此、我们正在进行分析以找出根本原因。 我们已在这些链路上运行 Vivado IBERT 测试、结果良好、与其他链路类似。

您能谈谈对于我们可以在重定时器侧进行的任何调试的看法吗?

-你能帮助如何捕获眼睛,只使用 I2C 接口,我们可以通过 MPSoC 处理器子部分(pertalinux)访问?

-是否有任何与通道相关的调整(如均衡)由重定时器进行,这可能会导致这种情况? 请分享您的想法。

-我们将尝试一次 RAW 模式选项。 原始模式是否完全绕过重定时器?  

-请检查重定时器配置

请参阅我们在 Petalinux (OSC:25MHz)中运行的重定时器配置脚本的相关部分:

i2cset -y -m 0x01 -r 1 $SLAVE_ADDR 0xff 0x01
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0xFC 0x01   
i2cset -y -m 0x03 -r 1 $SLAVE_ADDR 0xff 0x03
i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x00 0x04
i2cset -y -m 0x0c -r 1 $SLAVE_ADDR 0x0a 0x0c
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x60 0xD3
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x61 0xBC
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x62 0xD3
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x63 0xBC
i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x64 0xFF
i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x09 0x04
i2cset -y -m 0x70 -r 1 $SLAVE_ADDR 0x18 0x00
i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0A 0x0C
i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0A 0x00
i2cset -y -m 0x60 -r 1 $SLAVE_ADDR 0x31 0x20
i2cset -y -m 0x08 -r 1 $SLAVE_ADDR 0x1E 0x08
i2cset -y -m 0x80 -r 1 $SLAVE_ADDR 0x3D 0x80
i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3D 0x00
i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3f 0x40
i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3e 0x40
i2cset -y -m 0x1F -r 1 $SLAVE_ADDR 0x3D 0x0F
i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3f 0x00
i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3e 0x03
i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0a 0x00

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

    尊敬的 J S:

    感谢您分享这些详细信息。  您能否在方框图中分享估算的插入损耗?  此外、通信是单向的吗?

    假设:

    根据您的描述、我最初的假设是、在某些情况下、会发生重定时器调整 、而来自 MPSoC 的信号不稳定。  这会导致适应效果欠佳。

    若要解决此问题、我们建议将重定时器保持在 CDR 复位状态 、直到 MPSoC 的输出 预计稳定。  这将在 CDR 复位时使重定时器输出静音、并应允许重定时器正确适应来自 MPSoC 的信号。

    >>"很明显、重新建立 链接似乎能解决问题"

    我建议使用一个测试用例、在存在错误的链路上实施 CDR 复位、以确认单独的 CDR 复位可以解决该问题。 您还可以在 CDR 复位之前和之后收集调试信息(更多详细信息见下文)。  此信息应有助于说明问题是否与适应相关。

    调试寄存器:

    我建议在良好和不良链路情况下读取这些调试寄存器、以比较差异。  保守估计、我建议在 CDR 锁定后等待几秒钟、然后再读取这些寄存器值以使其适应稳定(尤其是在启用 DFE 的情况下)。

    DS250DF410具有内置眼图监视器。  TI 根据经验观察到、HEO 和 VEO 至少为0.4UI、200mV 时通常会产生良好的 BER 性能。

    • 在重定时器具有 CDR 锁定功能时读取用于 HEO、VEO 的通道寄存器0x27、0x28。  有关更多详细信息、请参阅编程指南中的"读取 HEO 和 VEO"部分。

    另外还有几个调试寄存器也很有价值。

    • 通道寄存器0x02;具有 CDR 锁定信息
    • 通道寄存器0x03;具有 CTLE 信息
    • 通道寄存器0x78;具有信号检测、CDR 锁定信息
    • 通道寄存器0x8F;主 CTLE 观察点
    • 如果启用自适应模式2和 DFE:
      • 寄存器0x71-0x75;具有 DFE 信息

    配置:

    我查看了您的配置并添加了注释。   我认为可以改进一些配置步骤。  我也添加了推荐的配置。

    客户配置:

    i2cset -y -m 0x01 -r 1 $SLAVE_ADDR 0xff 0x01    # Select a channel register; redundant given broadcast write
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0xfc 0x01    # Select ch0
    i2cset -y -m 0x03 -r 1 $SLAVE_ADDR 0xff 0x03    # Enable broadcast for channel registers
    i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x00 0x04    # Reset channel registers
    i2cset -y -m 0x0c -r 1 $SLAVE_ADDR 0x0a 0x0c    # Assert CDR Reset
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x60 0xD3    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x61 0xBC    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x62 0xD3    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x63 0xBC    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x64 0xFF    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x09 0x04    # Enable divider override
    i2cset -y -m 0x70 -r 1 $SLAVE_ADDR 0x18 0x00    # Set div-1
    i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0A 0x0C    # Assert CDR Reset (not necessary, CDR should already be held in reset)
    i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0A 0x00    # Release CDR Reset(reset should not be released before adapt mode is set)
    i2cset -y -m 0x60 -r 1 $SLAVE_ADDR 0x31 0x20    # Set adapt mode 1
    i2cset -y -m 0x08 -r 1 $SLAVE_ADDR 0x1e 0x08    # Disable DFE
    i2cset -y -m 0x80 -r 1 $SLAVE_ADDR 0x3d 0x80    # Enable pre/post cursor fir
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3d 0x00    # Set main cursor sign positive
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3f 0x40    # Set post cursor sign negative
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3e 0x40    # Set pre cursor sign negative
    i2cset -y -m 0x1F -r 1 $SLAVE_ADDR 0x3d 0x0f    # Set main cursor = 15
    i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3f 0x00    # Set post cursor = 0
    i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3e 0x03    # Set pre cursor = 3
    i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0a 0x00    # Release CDR reset

    建议配置:

    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0xfc 0x01    # Select ch0
    i2cset -y -m 0x03 -r 1 $SLAVE_ADDR 0xff 0x03    # Enable broadcase for channel registers
    i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x00 0x04    # Reset channel registers
    i2cset -y -m 0x0c -r 1 $SLAVE_ADDR 0x0a 0x0c    # Assert CDR Reset
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x60 0xD3    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x61 0xBC    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x62 0xD3    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x63 0xBC    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0xFF -r 1 $SLAVE_ADDR 0x64 0xFF    # Set data rate to 24.33024E9 Gbps
    i2cset -y -m 0x04 -r 1 $SLAVE_ADDR 0x09 0x04    # Enable divider override
    i2cset -y -m 0x70 -r 1 $SLAVE_ADDR 0x18 0x00    # Set div-1
    i2cset -y -m 0x60 -r 1 $SLAVE_ADDR 0x31 0x20    # Set adapt mode 1
    i2cset -y -m 0x08 -r 1 $SLAVE_ADDR 0x1e 0x08    # Disable DFE
    i2cset -y -m 0x80 -r 1 $SLAVE_ADDR 0x3d 0x80    # Enable pre/post cursor fir
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3d 0x00    # Set main cursor sign positive
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3f 0x40    # Set post cursor sign negative
    i2cset -y -m 0x40 -r 1 $SLAVE_ADDR 0x3e 0x40    # Set pre cursor sign negative
    i2cset -y -m 0x1F -r 1 $SLAVE_ADDR 0x3d 0x0f    # Set main cursor = 15
    i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3f 0x00    # Set post cursor = 0
    i2cset -y -m 0x0F -r 1 $SLAVE_ADDR 0x3e 0x03    # Set pre cursor = 3
    i2cset -y -m 0x0C -r 1 $SLAVE_ADDR 0x0a 0x00    # Release CDR reset

    其他想法:

    您是否优化了重定时器上的 TX FIR 设置?  如果没有、您可能能够改善 MPSoC2接收的信号。   MPSoC2上是否有信号质量指示器或眼图监视器?

    您在  MPSoC1上使用了哪些 TX 设置?  这里也可能有优化空间。

    如果您的通道具有高插入损耗、或者如果您发现重定时器测量的眼图较差、可以考虑启用自适应模式2和 DFE。

    -您能否仅使用 I2C 接口(通过 MPSoC 处理器子部分(pertalinux)我们可以访问该接口)来帮助了解如何捕获眼睛?

    重定时器通道寄存器0x27、0x28具有来自内部眼图监视器的 HEO/VEO 值。  要捕获2D 眼图、请查看编程指南中的顺序。

    Unknown 说:
    -重定时器是否会进行任何与通道相关的调整(例如均衡)而导致这种调整? 您能否分享您的想法?

    是的、重定时器在每次获得 CDR 锁定时都会适应信号。  如果信号在 CDR 锁定过程期间或之后不稳定、则可能导致自适应不良。

    Unknown 说:
    -我们将尝试一次原始模式选项。 原始模式是否完全绕过重定时器?  [/报价]

    原始模式将绕过 CDR 和 DFE、但仍将通过 CTLE。  使用旁路模式时、CTLE 不会自动调整。

    谢谢、

    Drew

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

    尊敬的 J S:

    我想就此采取后续行动。  您是否能够解决此问题?

    谢谢、

    Drew

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

    尊敬的 J S:

    感谢您的更新。  我正在努力查看此内容、并将在下周初回复您、提供最新信息。

    谢谢、

    Drew

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

    您好、Drew、

    您是否从共享数据中找到了任何内容? 关于眼图扫描、我想电芯需要按顺序转置才能获得正确的眼图。

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

    尊敬的 J S:

    对您回复时出现的延迟表示歉意。  我正在查看、明天将为您提供更新。

    谢谢、

    Drew

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

    您好、Drew、

    如果您对此有任何更新、请告诉我。

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

    尊敬的 JS:

    对延迟深表歉意。

    1.对于 DS280DF810、~40dB 的插入损耗似乎有点高。  估计值可能很高?  无论如何、只要观察到良好的 BER、DS280DF810就能按预期工作。

    2.根据您分享的数据,这似乎是一个很好的改进。   MPSoC2 启动后适应信号似乎会产生更好的眼睛。

    4.看你分享的眼睛,我同意有某种抖动是通过重新调整重定时器启动后消除的。  我怀疑在启动期间、不稳定的信号会导致适应效果不佳。

    我知道您已经在这方面工作了一段时间。  启动后创建 CDR 复位是否足以解决您观察到的问题?

    谢谢、

    Drew

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

    您好、Drew、

    1.对于 DS280DF810、~40dB 的插入损耗似乎有点高。  估计值可能很高?  无论如何、只要观察到良好的 BER、DS280DF810就能按预期工作。

    -是的,这似乎可能是一些错误的估计,因为眼睛看起来很好。 我们无法再次运行仿真来交叉检查。

    2.根据您分享的数据,这似乎是一个很好的改进。   MPSoC2 启动后适应信号似乎会产生更好的眼睛。

    4.看你分享的眼睛,我同意有某种抖动是通过重新调整重定时器启动后消除的。  我怀疑在启动期间、不稳定的信号会导致适应效果不佳。

    -注意。

    我知道您已经在这方面工作了一段时间。  启动后创建 CDR 复位是否足以解决您观察到的问题?

    -在重定时器配置期间注释掉 CDR 复位并在最后释放它之后,我们实际上没有观察到任何差异 现在、我们将在 MPSoC 启动后重新配置重定时器。 我们观察到在独立测试期间此功能正常工作。 但是、当我们将此逻辑与图像集成时、我们后来发现了错误。 我们正在对此进行检查。

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

    尊敬的 JS:

    您是否与良好眼图/不良眼图案例以及 DS280DF810在自适应期间稳定下来的 CTLE/DFE 值进行了任何关联?

    谢谢、

    Drew