UltraScale+ GTH 的手动眼扫描

描述
UltraScale+ GTH 可实现实时无中断眼扫描。用户可同时接受数据并查看平衡信号眼扩展,以实现在不丢失一个比特位的情况下,全面控制 BER 及信号裕量。

所需的大多数信息都可在 (UG576) UltraScale 及 UltraScale+ GTH 的 RX 裕量分析中找到。

本答复记录将向您介绍一个逐步运行手动眼扫描的简单案例。

解决方案
IBERT 中已实现眼扫描特性,其中 GUI 有助于完成眼扫描的简单定制而且 IBERT 可自动驱动眼扫描。

眼扫描程序在 IBERT 外部实现时,例如与用户应用平行,我们可以参考“手动眼扫描”。

因为 DRP 空间中映射的一些属性可控制眼扫描引擎,该代码应执行以下任务:

  • 照顾 DRP 读取、修改和写入工作
  • 将偏移取样器移动至眼内
  • 驱动眼扫描 FSM
  • 分析结果(例如计算偏移取样器 BER)
  • 眼扫描所需的端口见 UG576。请参考 RX 裕度分析章节。

    手动眼扫描能变得非常高级并能执行以下任务:

  • 扫描整个眼睛或其一部分
  • 连续运行或单次使用
  • 改变 BER 目标
  • 评估信号质量并监控其随时间的变化
  • 眼扫描的自动访问将始终逐步通过既定的简单段落。有许多选项都可得到相同的结果;或许让微处理器处理眼扫描更为灵活。

    在 HDL 中可以全面开发极快的眼扫描。(Xilinx 答复 64098)就是采用 ILA 实现简单眼扫描测量的良好实例。

    XAPP1322 和 XAPP1292 提供基于 Tcl 的眼图扫描。

    UltraScale+ GTH DRP 地址:

    UltraScale + GTH 眼扫描的相关 DRP 地址可在(UG576), RX Margin 分析表4-21:DRP-地址映射 GTH 中找到。

    流程图与逐步 UltraScale+ GTH 眼扫描:

    一旦收发器正确设置并可投入使用,基本眼扫描就可通过 FSM 的测量环路。

    如果偏移取样器数量有误但没有数据错误,可能就需要“重新排列顺序”。

    要发现这种情况,我们可以在该框架下实现一个检查器(请参考 XAPP884)。

    FSM 默认启动状态为 WAIT。
    ES_CONTROL[1:0] 可以分别为“arm”和“run”,将该信号的 WAIT 状态改为“run”,可启动 BER 测量环路(左),改为“arm”,则可启动诊断环路(右)。本答复记录只讨论测量环路。

    FSM 可自动启动错误计数和接收样本计数。两个计数器不断更新,直到其中一个达到饱和点。这时,FSM 就会变为 END 状态。

    我们通常可以通过读取 ES_CONTROL_STATUS 查看 FSM 的实际状态。

    在 END 或 WAIT 状态下,可以读取计数器并计算 BER。

    启动眼扫描:

    Step 1:

    按照表 4-20 设置 ES_HORZ_OFFSET[11]。

    Step 2:

    例如,您可以配置发送器及接收器均衡器、运行复位顺序、等待复位完成,并检查确保缓冲器不溢等。

    本实例采用 LPM 模式。DFE 模式需要两个眼扫描:一个带 + UT 号;一个带 - UT 号。

    Step 3:

    准备扫描:

    ES_CONTROL [5:0] = 6b000000

    ES_EYE_SCAN_EN = 1b1 启动眼扫描

    ES_ERRDET_EN = 1b1 启动错误检测:当(且只有当)相应的偏移数据样本不同意恢复数据样本时,Sdata 总线的每个比特位为 1。

    ES_PRESCALE 对应于 BER 目标(我们可以将其设置为极小的初始值,例如 5b00100)

    Step 4:

    在运行错误计数之前,我们需要为眼扫描引擎指定需要测量的内容。在用户指南眼扫描架构章节中有详细说明。

    通常,统计眼视图可使用:
    ES_SDATA_MASK = {80{1b1}, 80{1b0}} for 80-bit data width

    ES_QUAL_MASK = {160{1b1}}

    Step 5:

    将纵横偏移设为 0。

    RX_EYESCAN_VS_NEG_DIR = 1b0(相当于 7 系列器件中的 ES_VERT_OFFSET[7])

    RX_EYESCAN_VS_UT_SIGN = 1b0(相当于 7 系列器件中 ES_VERT_OFFSET[8])

    RX_EYESCAN_VS_CODE = 7b0000000(相当于 7 系列器件中 ES_VERT_OFFSET[6:0])

    RX_EYESCAN_VS_RANGE = 2b00 (这为眼睛扫描设置了 1.5mV /代码的比例因子)

    ES_HORZ_OFFSET[10:0] = 11'b00000000000

    Step 6:

    通过将 FSM 带入 RESET 运行扫描,并选定测量环路:

    设置 ES_CONTROL = 6b000001

    Step 7:

    查看 FSM 是否为 END 状态。

    读取 ES_CONTROL_STATUS[0] 应等于 1b1

    读取 ES_CONTROL_STATUS[3:1] 应等于 3b010

    Step 8:

    将 FSM 返回 WAIT 状态。

    设置 ES_CONTROL [5:0] = 6b000000

    Step 9

    现在 FSM 处于 WAIT 状态,通过检查错误计数器(ES_ERROR_COUNT)读取显示的错误,并与样本计数(ES_SAMPLE_COUNT)进行比较。

    如果垂直和水平偏移量为零,我们预计偏移采样器和数据采样器总是匹配的。

    如果错误计数器显示错误,则表示眼图扫描需要重新对齐。请执行重新排列顺序。

    如果错误计数器中没有错误,请直接跳到第 10 步。

    重新排列顺序:

    该顺序的目的就是在眼扫描时钟与数据时钟之间获得正确的同步。

    同步性欠佳时,错误计数器就会饱和,而眼扫描则会闭眼。

    在完全闭眼而没有数据错误时,应执行该顺序。

    重新排列顺序为:
    ES_HORZ_OFFSET = x880
    EYESCANRESET = 1
    ES_HORZ_OFFSET = x800
    EYESCANRESET = 0

    返回第 6 步。

    完成眼扫描。

    Step 10:

    设置新的纵横错误:请正确设置以下参数:
    设置 RX_EYESCAN_VS_NEG_DIR 和 RX_EYESCAN_VS_CODE
    设置 ES_HORZ_OFFSET[10:0] 和 ES_HORZ_OFFSET[11]

    Step 11:

    通过将 FSM 带入 RESET 运行眼扫描,并选定测量环路:

    设置 ES_CONTROL = 6b000001

    Step 12:

    查看 FSM 是否为 END 状态。

    读取 ES_CONTROL_STATUS[3:1] 应等于 3b010 和 ES_CONTROL_STATUS[0]=1

    Step 13:

    将 FSM 返回 WAIT 状态并重复一次。

    设置 ES_CONTROL [5:0] = 6b000000

    FSM 为 END 或 WAIT 状态时,我们可以读取错误、样本并可计算 BER。

    对于新偏移位置而言,请从第 10 步开始重复。

    推荐阅读