描述
UltraScale+ GTH 可实现实时无中断眼扫描。用户可同时接受数据并查看平衡信号眼扩展,以实现在不丢失一个比特位的情况下,全面控制 BER 及信号裕量。
所需的大多数信息都可在 (UG576) UltraScale 及 UltraScale+ GTH 的 RX 裕量分析中找到。
本答复记录将向您介绍一个逐步运行手动眼扫描的简单案例。
解决方案
IBERT 中已实现眼扫描特性,其中 GUI 有助于完成眼扫描的简单定制而且 IBERT 可自动驱动眼扫描。
眼扫描程序在 IBERT 外部实现时,例如与用户应用平行,我们可以参考“手动眼扫描”。
因为 DRP 空间中映射的一些属性可控制眼扫描引擎,该代码应执行以下任务:
眼扫描所需的端口见 UG576。请参考 RX 裕度分析章节。
手动眼扫描能变得非常高级并能执行以下任务:
眼扫描的自动访问将始终逐步通过既定的简单段落。有许多选项都可得到相同的结果;或许让微处理器处理眼扫描更为灵活。
在 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 步开始重复。