基于Ultrascale+系列GTY收发器8b/10b编码方式的数据传输(二)——数据收发及上板测试 一文介绍了利用GTY高速收发器进行8B/10B编码数据收发的使用方式,本文继续介绍使用In System IBERT IP核构建ibert眼图测试,以及通过设置参数以优化信号传输质量的方法。
添加In System IBERT IP核
在现有GT工程中添加In System IBERT IP核
Vivado中构建眼图的方式存在两个IP核,IBERT Ultrascale GTY是专门用于一或多个GT通道进行眼图测试的IP核,它难以与自行搭建的GT工程相结合,因此本文主要介绍In System IBERT IP核的使用方法。
In System IBERT IP核的配置界面如下,只需选择需要测试的GTY位置即可完成配置,这里由于要测试VCU128开发板的QSFP1_1所在GT bank,因此选择quad124的第一个GT。
In System IBERT IP核的输入为两个时钟信号,其中clk为freerun时钟,其时钟频率与GT DRP(动态配置接口)的时钟频率保持一致;rxoutclk时钟使用GT COMMON产生的rxclkout2时钟。
In System IBERT IP核的输出需要接到GT的DRP接口和几个ibert测试专用接口,在GTY IP核的配置界面include in-system ibert core一栏选择开启。
修改GTY IP核的配置
在代码中添加相关引脚链接,一一对应即可,完成后重新综合生成比特流。
in_system_ibert_0 in_system_ibert_0_inst (.drpclk_o(drpclk_in), // output wire [0 : 0] drpclk_o.gt0_drpen_o(drpen_in), // output wire gt0_drpen_o.gt0_drpwe_o(drpwe_in), // output wire gt0_drpwe_o.gt0_drpaddr_o(drpaddr_in), // output wire [9 : 0] gt0_drpaddr_o.gt0_drpdi_o(drpdi_in), // output wire [15 : 0] gt0_drpdi_o.gt0_drprdy_i(drprdy_out), // input wire gt0_drprdy_i.gt0_drpdo_i(drpdo_out), // input wire [15 : 0] gt0_drpdo_i.eyescanreset_o(eyescanreset_in), // output wire [0 : 0] eyescanreset_o.rxrate_o(rxrate_in), // output wire [2 : 0] rxrate_o.txdiffctrl_o(txdiffctrl_in), // output wire [4 : 0] txdiffctrl_o.txprecursor_o(txprecursor_in), // output wire [4 : 0] txprecursor_o.txpostcursor_o(txpostcursor_in), // output wire [4 : 0] txpostcursor_o.rxlpmen_o(rxlpmen_in), // output wire [0 : 0] rxlpmen_o.rxoutclk_i(gtwiz_userclk_rx_usrclk2_out), // input wire [0 : 0] rxoutclk_i.clk(gtwiz_reset_clk_freerun_in) // input wire clk);
上板使用In System IBERT
查看眼图扫描
重新上板In-System IBERT将出现在ila所在窗口,使用Auto-detect link或create link创建串口链路。右键create scan可创建2D眼图扫描。
下两图展示了默认配置下的眼图结果,眼图扫描结果代表不同情况下误码率的高低。眼图中心区域越大,代表信号传输质量越好。第二张图展示了RX接收来自TX数据的结果,可以看到数据帧能够被正确解析。
除了查看眼图外,IBERT还支持设置TX预加重(Pre Cursor)、TX后加重(Post Cursor)、TX差异摆动(Diff Swing)、是否使用DFE均衡器四个GT参数,这四个参数的选择会显著影响眼图大小,即信号传输质量。这四个参数会受多种因素的影响,因此当遇到误码率较高、甚至RX收到的完全为乱码的情况时,可以尝试调整这四个参数解决。
下两张图展示了参数设置不合理的眼图,此时眼图Open UI为0%,第二张图展示了RX接收来自TX数据的结果,可以看到RX此时完全无法收到正确数据。
使用深度扫描查找最佳GT参数
想要获取TX预加重(Pre Cursor)、TX后加重(Post Cursor)、TX差异摆动(Diff Swing)、是否使用DFE均衡器四个GT参数的最佳数值,可以在如下界面右键scan sweep。
在create sweep选项卡中,sweep properties中可以选择设置几个参数,IBERT能够对这些参数进行排列组合,对每种组合均进行眼图扫描,用户可以根据最好的眼图扫描结果配置参数。
由于IBERT通过DRP接口读写实现GT参数的配置,因此除了上述4个GT参数外,也可以对其他DRP能够访问的GT参数进行读写配置以查看眼图结果。
工程代码
本文所使用的工程代码可在同名公众号回复GTY_8B10B_IBERT下载。