ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

FPGA高速接口调试:Vivado IBERT近端回环测试完整指南

FPGA高速接口调试:Vivado IBERT近端回环测试完整指南 1. 项目概述为什么要做IBERT近端回环测试做FPGA高速串行接口开发的人几乎都绕不开IBERT这个词。IBERTIntegrated Bit Error Ratio Tester是Xilinx在Vivado里集成的一个调试工具本质上是利用FPGA内部的高速收发器资源在芯片内部形成一个误码率测试仪。不需要外接误码仪不需要额外的测试板卡只要你的FPGA上有GTP、GTX、GTH或GTY这类高速串行收发器就能通过IBERT完成链路质量评估。我最早接触IBERT是在调试一块带有QSFP光模块接口的板子时。板卡上电后光模块能link up但业务跑起来总出现偶发丢包。用误码仪测成本太高而且实验室还不一定有空闲设备。后来一位有经验的同事告诉我先用IBERT做一轮近端回环测试把物理层是否干净先验证掉。那次排查之后我就把IBERT当成了高速接口调试的标配工具每次布完板子、板卡回板、或者怀疑链路有问题第一件事就是跑IBERT。这篇文章会从零开始完整走一遍在Vivado里搭建IBERT近端回环测试的流程。所谓近端回环Near-End Loopback简单说就是把FPGA发送端TX的数据在芯片内部直接环回到接收端RX不经过外部物理链路。这样做的好处是如果近端回环测试通过可以证明FPGA内部收发器的发送和接收通路基本正常如果近端回环也失败那问题大概率出在FPGA配置、时钟或者PCB焊接上可以很快缩小排查范围。适合看这篇文章的人包括刚接触Vivado高速接口调试的FPGA工程师、正在做板卡回板验证的硬件工程师、以及需要评估FPGA高速收发器健康状况的学生或研究人员。只要你的设计里用到了GTP/GTX/GTH这类SerDes资源这篇文章里的方法和踩坑记录都能直接参考。2. IBERT近端回环的设计思路与方案选型2.1 IBERT的工作原理用FPGA自己测自己先梳理一下IBERT的核心逻辑。IBERT IP核会在FPGA内部例化一组高速收发器每个收发器包含发送端和接收端。测试时发送端会生成特定的PRBS伪随机二进制序列数据流经过收发器内部的TX通道发送出去接收端收到数据后会与本地生成的相同PRBS序列做逐比特比对统计出误码率。如果收发器配置成近端回环模式发送数据会在收发器内部的PMA/PCS层就被环回到接收路径完全不经过外部引脚。用生活里的场景类比这就像你在家里测试一根网线是不是通的不把网线插到远端交换机上而是把同一根网线的两个水晶头都插到同一个傻瓜交换机上看链路灯亮不亮。这种方法虽然不能验证网线的远端连接能力但可以快速排除本地网口本身的问题。IBERT近端回环也是同样的思路先把FPGA这一侧的收发通路验证干净再去查外部链路。近端回环在IBERT配置里有几种不同位置PCS近端回环、PMA近端回环以及FPGA内部逻辑的环回。最常用的PMA近端回环信号在串行器/解串器层面直接返回覆盖了收发器内部的主要模拟通路。PCS近端回环则包含了8B/10B或64B/66B编解码逻辑。实际测试中一般先跑PMA近端回环因为它的失败能更直接地反映模拟信号通路的健康状况。2.2 为什么要优先选择近端回环而不是远端回环在IBERT测试场景中除了近端回环还有一种常见的远端回环Far-End Loopback。远端回环是指FPGA发送的数据经过外部PCB走线、连接器、线缆等物理链路到达另一端的设备后由对端设备再将数据环回。比如两个FPGA通过SFP光模块和光纤互联A发送给BB把数据原样发回给AA统计误码率。但为什么在调试初期我强烈建议先做近端回环原因很直接近端回环把所有外部变量都隔离掉了。外部变量包括PCB走线的阻抗连续性、过孔stub效应、连接器的接触可靠性、线缆的质量、对端设备的配置等。这些东西一旦出问题表现形式千奇百怪排查起来非常耗时。先把近端回环跑通就能把FPGA收发器自身是否正常这个问题钉死。如果近端回环有误码那说明FPGA配置、参考时钟或者电源有问题这些是更基础的问题不需要牵扯到外部链路。我个人的调试习惯是板卡上电后如果涉及高速接口先做一遍近端回环测试确认每个收发器通道都干净然后做外部环回测试即用短跳线或短光纤把TX和RX直接相连最后才做跨板或经过背板的长链路测试。每一层都验证通过了再往上一层走。这类从内到外、逐层递进的验证思路能避免调试过程中在多个变量之间反复跳转。2.3 工具选型Vivado中的IBERT IP核与Hardware Manager在Vivado里做IBERT测试核心工具是IBERT IP核以及Vivado自带的Hardware Manager硬件管理器。IBERT IP核支持7系列、UltraScale、UltraScale等主流FPGA平台可以在IP Catalog中直接搜索IBERT找到。不同芯片型号IP配置界面略有差异但整体流程一致。Hardware Manager是Vivado自带的硬件调试工具通过JTAG连接FPGA后可以加载IBERT bitstream然后在图形界面里配置线速率、参考时钟、回环模式等参数实时查看每个通道的眼图和误码率。它不需要额外的license只要你有Vivado的WebPack或标准版license就行这一点对个人学习和评估来说很友好。另一种方案是使用第三方的高速误码仪比如误码率测试仪BERTScope配合FPGA上预留的测试引脚来做。但这种方案成本高、操作复杂一般用于芯片量产测试或极端性能评估不适合日常调试。对于绝大多数FPGA开发场景IBERT Hardware Manager已经足够。注意IBERT测试时FPGA内部相当于跑了一个专用测试固件你会烧写一个单独的bitstream进去而不是你正常的业务固件。所以IBERT测试要放在正常功能调试之前做或者在功能异常时插入做诊断两者不能同时进行这一点要和团队成员提前沟通好避免覆盖了正在调试的固件。3. 从零搭建IBERT近端回环完整实操流程3.1 创建IBERT IP并完成基础配置打开Vivado新建一个工程或者直接在已有的工程里操作都可以。如果是独立测试我建议新建一个空工程目标芯片选择你板卡上实际的FPGA型号。然后在左侧Flow Navigator中找到PROJECT MANAGER下的IP Catalog在搜索框里输入IBERT双击Integrated Bit Error Ratio Tester 7 Series GTX根据你的芯片系列选择对应版本。IP配置界面里有几个关键选项需要仔细确认。首先看Line Rates线速率。这里可以填写你期望测试的速率比如10.3125Gbps对应10G光模块或者6.6Gbps对应CPRI也可以是2.5Gbps等较低速率。需要注意的是这个速率必须在你所用收发器支持的范围内。GTX一般能跑到12.5Gbps左右GTH能到16Gbps以上具体查看芯片数据手册。如果填写了超范围的速率Vivado会报错或者生成的IP无法正常工作。其次看Reference Clock参考时钟。每个收发器Quad都有一对专用的参考时钟引脚如MGTREFCLK。这里需要填写你板卡上实际连接的参考时钟频率。IBERT IP会根据线速率自动计算出PLL的分频系数但前提是你给的参考时钟频率必须准确。如果板子上接的是125MHz你在IP里写成156.25MHz那生成的配置在FPGA内部是能烧录的但实际跑起来收发器无法lock到正确频率眼图也会是一团乱麻。回环模式和通道数的设置在Loopback一栏里选择。可以让每个通道独立设置也可以全局统一设置。近端回环对应的是Near-End PMA或Near-End PCS。通道数量选择你实际需要测试的收发器对数例如4个通道。选多了浪费资源选少了测不全。3.2 在Example Design基础上生成bitstreamIBERT IP生成之后最快的验证方式是直接使用它自带的Example Design。在IP生成后的Sources窗口里右键点击IBERT IP选择Open IP Example DesignVivado会自动创建一个新的工程。这个工程里已经搭好了顶层模块、约束文件和所需的时钟管理逻辑你不需要修改任何代码直接点击Generate Bitstream即可。这里有一个容易忽略的坑在生成Example Design之前确认一下约束文件是否正确指向了你板卡上实际的引脚位置。IBERT IP生成的约束是通用的比如参考时钟引脚可能默认分配在某个Quad的特定引脚上如果与你的板卡设计不符烧录后FPGA无法正常工作。你需要打开约束文件xdc把位置约束改成实际板卡对应的引脚。生成bitstream的过程其实就是正常的综合-实现-生成比特流流程。如果工程里只有IBERT一个IP一般几分钟就能跑完。如果等了很久还没结束检查一下电脑的内存和CPU占用情况Vivado在Place Route阶段比较吃资源。我在用2020.2版本做UltraScale的IBERT工程时四通道10G速率生成bitstream大约需要5到8分钟属于正常范围。生成成功后会得到一个.bit文件。接下来就是接入硬件把bitstream下载到FPGA里。3.3 通过Hardware Manager加载IBERT固件打开Vivado的Open Hardware Manager连接JTAG。如果JTAG链识别不到设备先检查下载器的驱动是否装好、JTAG线序是否正确、FPGA是否上电。连接成功后Hardware Manager界面会出现你的FPGA芯片右键选择Program Device加载刚才生成的bit文件。加载成功后IBERT会自动运行Hardware Manager会弹出一个IBERT的调试界面。在这个界面里左侧是通道列表显示了每个收发器通道的link状态右侧是眼图和误码率统计信息。如果你的工程里没有自动弹出IBERT窗口点击菜单栏的Open Target再选择Open Hardware Manager底部的Device视图手动打开。在IBERT界面下方有一个Loopback下拉菜单确认它已经设为Near-End PMA或者你需要的模式。还有一个TX Pattern和RX Pattern一般默认使用PRBS 31或PRBS 23。两种PRBS序列的差异在于多项式长度PRBS 31的随机性更强更接近真实业务的最坏情况是高速接口测试的默认选择。3.4 近端回环眼图扫测与误码率验证一切就绪后在IBERT界面的通道列表里勾选你要测试的通道点击Run按钮或者右键选择Start Test软件会开始持续传输PRBS数据并统计误码。每通道上会显示当前误码计数和误码率。如果链路干净误码计数保持0误码率显示为类似1E-15的状态。眼图扫描是IBERT另一个核心功能。在通道上右键选择Create Eye Scan可以触发眼图扫描。Vivado会自动控制收发器内部的采样相位扫描绘制出二维眼图。眼图张开的眼睛越大、越清晰说明信号质量越好。对于近端回环因为信号没有经过外部链路理论上眼图应该非常张开。如果近端回环眼图都很差比如眼睛中间存在大量散点那就要从FPGA配置、时钟、电源纹波等内部因素去找原因。眼图扫描时间会根据通道数和扫描分辨率变化通常需要几秒到几十秒。扫描完成后可以调整Eye Scan窗口里的水平和垂直比例放大观察细节。在近端回环测试中我一般关注眼图的高度和宽度裕量比如眼高小于200mV或眼宽小于0.5UI时就需要谨慎评估后续外部链路的裕量了。提示IBERT跑近端回环时因为数据没有经过PCB走线所以链路预算中外部通道的损耗、反射、串扰都被排除了。这时候测试的结果代表的是芯片自身配置电源参考时钟的综合水平。如果这项测试都不通过不建议继续折腾外部链路先把板卡基础条件修好。4. 近端回环调试中的关键参数解析4.1 参考时钟选择与PLL配置为什么重要高速收发器的核心是时钟系统。每个Quad里都有两个PLL一个叫CPLLChannel PLL一个叫QPLLQuad PLL。CPLL为单个通道提供时钟锁定时间快适合速率较低的独立通道应用。QPLL为整个Quad的多个通道提供统一时钟抖动性能更好适合高速率、多通道并行场景。在IBERT IP配置时软件会根据你设定的线速率自动选择CPLL或QPLL并把参考时钟频率和PLL倍频系数算好。这个过程中的一个常见误区是认为只要参考时钟频率差不多收发器就能工作。实际上GTP/GTX/GTH对参考时钟的要求非常严格通常要求在标称频率的±100ppm以内。如果板卡上的晶振精度不够收发器虽然能lock但输出的时钟频率会偏离标准值导致对端设备误码。另外有些板卡会用一个可编程时钟芯片比如Si5338给FPGA提供参考时钟。这种芯片上电后默认输出频率不一定正确需要CPU或CPLD预先配置I2C寄存器。我遇到过好几次IBERT测试失败查了半天最后发现是时钟芯片没被初始化参考时钟根本没起来。所以在做IBERT测试之前先确认板卡上电后对应Quad的参考时钟引脚确实有正确频率的时钟输出用示波器量一下最直接。4.2 TX/RX端接、摆幅与预加重参数在IBERT界面的通道配置里还可以调整TX端接电压TX Diff Swing、预加重Pre-Emphasis和接收端均衡RX Equalization等参数。在近端回环测试时因为信号不经过外部通道这些参数的影响不大取默认值即可。但在后续的外部回环或长链路测试中这些参数就是优化信号质量的关键旋钮。举个例子如果外部链路是30英寸的PCB走线高频损耗会非常严重接收端的眼图会闭合。此时需要加大TX预加重来补偿高频分量或者调高RX均衡器的增益。IBERT的好处是可以在图形界面里实时调整这些参数边调边看眼图变化不用重新综合和烧写bitstream对于参数扫测来说效率很高。但在近端回环阶段不建议花太多时间在这些微调参数上。因为信号没有经过损耗介质调整预加重和均衡并不会带来明显改善反而容易掩盖真正的问题。先把默认参数下的眼图和误码率确认了再做链路优化才更合理。4.3 Line Rate与协议合规性的权衡有些工程师会习惯性地在IBERT里把线速率设置为协议标称值比如做PCIe测试就填8Gbps或16Gbps做以太网就填10.3125Gbps。这当然没问题但我建议在调试阶段额外测一遍降速下的表现。比如芯片支持12.5Gbps但业务实际跑10.3125Gbps可以先在IBERT里跑更高的速率。如果高速率测试能通过说明收发器本身有足够的性能裕量如果高速率失败但业务速率正常说明收发器刚好处于勉强工作的边界这种情况在温度漂移或器件老化后容易出现偶发误码。降速测试还有一个实际作用用来区分设计裕量不足和配置错误。如果10G速率误码严重但2.5G速率完全正常大概率是外部通道损耗过大或端接不匹配如果所有速率都误码那问题可能在电源、参考时钟或FPGA本身。5. 常见错误排查IBERT测试中的那些坑5.1 链路无法Lock参考时钟与JTAG问题IBERT测试中出现频率最高的报错是链路无法锁定Link Not Locked或CDR Not Locked。接收端的CDR时钟数据恢复电路无法从接收数据流中恢复出时钟时就会报这个错误。遇到这个问题我的排查顺序相对固定。首先用示波器或万用表确认参考时钟引脚上确实有时钟信号幅度足够LVDS通常需要差分摆幅在400mV以上频率与IBERT配置一致。其次确认JTAG连接稳定防止在FPGA配置过程中出现时序不稳定导致bitstream没有正常工作。再次检查电源尤其是收发器的MGTRAVCC和MGTRAVTT供电电压值是否在芯片要求范围内电源纹波是否过大。如果以上都正常再从IBERT界面上检查一次线速率配置是否在硬件支持范围内以及在IP生成时填写的参考时钟频率和实际是否一致。这里有一个容易被忽略的细节如果你的板卡上有多个Quad而你只测试了其中某个Quad的通道但你IP里配置的是另外的Quad那么JTAG加载后FPGA内部根本不会在该Quad上使能收发器。所以生成IBERT IP之前先在自己的板卡原理图上确认你打算测试的收发器通道属于哪个Quad参考时钟用的是哪个引脚再在IP里做对应配置。5.2 误码率非零近端回环也会误码近端回环误码的情况也有不少。有些人以为近端回环绕过了外部链路误码率就必须为0其实不然。近端回环只是绕过了PCB外部走线但收发器内部的PMA、PCS电路、电源噪声、参考时钟抖动仍然会影响数据完整性。如果近端回环有误码按以下优先级排查第一优先级是电源。高速收发器对电源噪声非常敏感开关电源的纹波如果直接耦合到MGT的电源引脚上会导致内部采样点漂移产生误码。检查电源的纹波和噪声查看板卡上MGT供电是否有足够的去耦电容是否符合数据手册的推荐设计。第二优先级是参考时钟。参考时钟的抖动性能会直接影响TX输出的抖动进而影响接收端采样。第三优先级是FPGA配置本身。可以尝试把IBERT IP里的速率调低一些看误码率是否下降以此判断是否是收发器模拟性能边界的问题。还要注意一种特殊情况如果你的近端回环测试中TX/RX速率设置得不对称或者TX和RX使用的PLL不同比如TX用QPLLRX用CPLL也可能会导致偶发误码。保持TX和RX配置一致使用同一个时钟源可以排除这类奇怪问题。5.3 眼图质量差扫描结果解读与对策眼图扫描完成后如果你发现眼睛很小或者眼睛里面有很多散点说明信号质量不理想。在近端回环模式下最常见的原因是电源噪声。此时检查FPGA MGT供电的纹波是否在规格范围内通常要求峰峰值低于一定mV具体数值查看芯片手册。还可以尝试在IBERT里调整RX均衡等级虽然近端回环外部通道无损耗但内部走线和封装都会带来少量寄生效应适度的RX均衡有时能改善眼图张开度。另一个可能导致眼图差的原因是参考时钟的抖动过大。你可以把参考时钟换成板上另一个更低抖动的时钟源试试如果板卡提供了多个时钟源选择。或者检查时钟芯片的配置寄存器看是否设成了低抖动模式。如果眼图出现明显的双眼皮现象即在眼睛中间存在水平方向的细线大概率是时钟串扰或SATA/PCIe这类协议的扩频时钟SSC带来的影响。近端回环测试中一般不需要开启扩频时钟确保在配置里关闭该功能。5.4 Vivado操作层面的常见报错在Vivado层面还有一些操作容易卡住人。比如生成bitstream时报错Placement failed大概率是引脚约束冲突IBERT例化所用的引脚与你实际板卡不一致或者与其他逻辑冲突。这时候要认真生成IO Planning视图检查MGT引脚分配是否唯一。还有人在生成Example Design后发现工程里没有约束文件对应的引脚标注打开Implementation跑完发现好多LUT和FF被自动优化掉了。这种情况通常是example design顶层模块有多个实例某些实例没有被约束到实际引脚导致综合时被优化。可以尝试在顶层约束文件中给所有需要保留的通道都加上位置约束。另外如果你使用Vivado版本较新比如2023.1以上部分旧款FPGA的IBERT IP可能显示版本不兼容。解决办法是升级IP版本或者在旧版本Vivado中生成IP再将IP文件拷贝到新工程中使用但后者的兼容性需要验证不太推荐。更好的建议是对于老芯片的调试场景直接用和芯片年代匹配的Vivado版本避免很多不必要的兼容性问题。6. 近端回环的扩展应用与实操心得6.1 从近端回环到外部回环如何一步步扩展测试范围近端回环测试通过后下一步通常是把TX和RX在外部通过短跳线或短光纤直连做外部回环测试。外部回环会引入连接器和线缆的损耗所以眼图会比近端回环差一些但只要你用的是高质量线缆短距离下仍然应该有清晰的眼图。外部回环的作用是验证连接器和驱动能力是否正常。如果外部回环测试也通过就可以做真正的链路测试了。比如经过背板走线、跨板连接、或者更长距离的光纤。这个阶段就需要用到IBERT的Line Sweep或Voltage Sweep功能通过扫测不同TX摆幅和预加重参数下的眼图找到最优配置组合。这也是IBERT最有价值的功能之一可以在不修改硬件的前提下用软件方式优化信号完整性参数。6.2 多通道并行测试中的通道间隔离如果你测试的接口是多通道的比如4路或8路SFP建议在近端回环测试时就逐通道分别验证同时也要测试多通道同时工作的场景。这是因为多通道同时高速翻转时芯片内部和PCB层的串扰会显著增加单通道测试通过不代表多通道也一定通过。在IBERT界面中可以勾选多个通道同时启动测试。我遇到过一种情况单通道近端回环眼图完美误码率1E-15但四通道同时开启后其中两个通道开始出现零星误码。最后排查发现这两个通道的电源在PCB上共用一个过孔区域多通道同时工作时电流突变引发了电源噪声。这种问题只有多通道并行测试才能暴露出来。6.3 关于IBERT测试的几点个人经验做了几年FPGA高速接口调试我对IBERT有几个比较深的体会。第一IBERT不是万能的它验证的是收发器链路质量不能替代完整的协议层测试。即使IBERT全部通过也不代表协议层就一定没问题但反过来IBERT失败的话协议层肯定跑不起来所以IBERT是一票否决项不是一票通过项。第二ISI码间串扰、反射、串扰这些信号完整性问题在近端回环中几乎看不到必须依赖外部回环和真实链路测试。第三IBERT测试时记录一份完整的测试报告很有价值包括软件版本、IP配置参数、线速率、参考时钟频率、测试通道、眼图截图、误码率数据等。这些数据在后续遇到问题回溯时非常有用而且有助于评估器件的老化趋势。测试环境也很重要。IBERT测试尤其是眼图扫描时尽量在温度稳定的环境下进行。温度变化会影响FPGA内部PLL的抖动特性和收发器的模拟参数导致同样配置下冬天测试和夏天测试结果不一样。如果要做产品量产前的验证建议在温度箱里做高低温测试用IBERT评估极限温度下的链路裕量。最后再分享一个小技巧IBERT测试时可以在Hardware Manager界面里把你认为正常的眼图截图保存并且标上测试条件。下次怀疑链路性能下降时用完全相同配置再做一次扫描两张眼图一对比就能明显看出信号质量是否恶化。这种横向对比在定位早期故障和器件老化问题时特别有效。
返回列表