ARTICLE DETAIL

资讯详情

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

Vivado IBERT近端回环实战:从搭建到眼图误码率排查

Vivado IBERT近端回环实战:从搭建到眼图误码率排查 调试高速串行收发器的时候有一件事几乎是每个FPGA工程师都绕不开的板卡刚回来几十对收发器通道到底能不能用、信号质量怎么样、参考时钟有没有接对总不能等到整机联调才发现问题。IBERTIntegrated Bit Error Ratio Tester集成误码率测试仪就是Vivado里专门干这个的体检工具。这篇文章我把当前项目中从零搭建近端回环的完整过程捋一遍从Vivado新建IBERT工程开始到硬件管理器里跑眼图、看误码率最后把高频报错逐个拆开讲希望能让刚开始接触GT收发器的朋友快速上手也帮踩过坑的同行补上几个容易被忽略的细节。近端回环是高速链路调试里最基础也是最容易跑通的一步它解决的核心问题很简单板卡到手后在FPGA内部不经过外部PCB走线先把收发器自身的收发通路验证一遍。只要你跑通了这个就能确认GT的时钟、寄存器配置、供电、参考时钟这些基础设施都没问题之后再往外部回环、背板互联、光模块方向扩展也有了底气。1. IBERT到底是什么为什么近端回环是第一道关卡1.1 一个体检工具专门看高速收发器的健康状态IBERT在各个FPGA厂家的工具链里都有类似物Xilinx/AMD的实现是把它做成一个可配置的IP核集成在Vivado的IP Catalog里。核内部集成了PRBS码型发生器、误码检测器、眼图扫描逻辑通过JTAGBoundary Scan接口和PC端的Hardware Manager通信。你在GUI里点几下就能控制FPGA里的GT收发器发PRBS码型然后在接收端统计误码率甚至动态调节收发器的驱动幅度、均衡参数把眼图扫出来。说人话就是IBERT把FPGA里的高速收发器当成一个可以远程操控的仪器让你不用写任何逻辑代码就能测出每一条高速通道的底子好不好。近端回环Near-End Loopback是所有测试模式里最贴近芯片内部、干扰因素最少的一种。它在GT收发器内部直接把TX发送通路的数据环回到RX接收通路信号不经过芯片引脚也不经过PCB走线。这在调试中的意义相当于给每个收发器做一次单体自检。1.2 近端回环 vs 远端回环先搞清楚你在测哪一段IBERT配置里常见的回环模式有四种Near-End PCS Loopback、Near-End PMA Loopback、Far-End PMA Loopback、Far-End PCS Loopback。虽然名字看起来像但它们测的链路位置完全不同。Near-End PMA Loopback数据从TXP/TXN发送引脚之前在PMA层直接环回给RXP/RXN接收通路这是最常用的近端回环模式验证的是收发器内部从PCS到PMA的串行逻辑、时钟恢复、以及收发通路本身。Near-End PCS Loopback在PCS数字逻辑层环回数据不经PMA模拟前端更偏逻辑功能验证。Far-End PMA/PCS Loopback需要两个端点配合数据经过实际传输介质PCB走线、连接器、线缆到达远端后再环回来用来验证完整的物理链路。近端回环之所以是第一关是因为它把变量控制到了最少如果近端回环都出错基本可以锁定是GT配置、参考时钟、供电或者FPGA本身的问题不需要怀疑外部电路。跑通了近端回环再接外部回环时出了问题就可以判定问题大概率出在PCB链路或连接器侧。1.3 IBERT在板级调试中的实际定位在实际项目里IBERT测试通常安排在硬件调试的三个阶段板卡刚焊接完成简单上电验证无误后第一时间跑近端回环确认每个收发器通道的静态功能需要验证PCB差分阻抗、过孔、连接器时跑外部近端回环比如用SMA线短接看眼图和误码率整机联调前把IBERT测试结果整理成报告作为高速链路信号完整性的依据。我在当前项目里最深刻的体会是IBERT的近端回环测试一旦能稳定通过就能给后续的PCIe、SerDes、Ethernet等高速接口调试节省大量排查时间。否则几十对收发器一上电就出现各种稀奇古怪的问题你连是哪一层的问题都找不到。2. 动手前先确认这三件事器件、版本、时钟电源2.1 器件与IBERT核的匹配关系IBERT核是个针对性很强的IP不同器件系列对应的核名称和配置选项不同。7系列FPGAVivado里有Integrated Bit Error Ratio Tester 7 Series GTX针对GTP低端、GTX主流有不同配置选项。UltraScale有对应GTH、GTY的IBERT核选项会多一点比如支持更多线速率档位、集成梳状扫描等。UltraScale同样有专门的IBERT核并且新版Vivado已经把它整合进FPGA Features and Design Examples里。做近端回环前一定要先去器件数据手册里确认你的收发器类型。我见过有人把GTX的核配到GTH的器件上综合一堆报错折腾半天发现自己就选错了。核选错的问题基本没法通过后续配置修正只能重建工程。2.2 Vivado版本与License的前置检查理论上Vivado标准版WebPACK / Standard就带了IBERT功能不需要额外购买什么专用license。但具体到某些器件型号比如大一点的UltraScale或者RFSoC如果用Edition版不支持Vivado会直接警告。这里想提醒一点Vivado版本对IBERT的界面和使用体验影响不小。老的Vivado 2015~2018IBERT配置界面比较简陋很多参数只能手动敲。Vivado 2019.1以后IBERT核集成度更高配置向导会把回环模式、线速率、参考时钟都放进一个界面。2021.2以后的版本硬件管理器里的IBERT操作界面Vivado Serial I/O Analyzer已经非常稳定眼图扫描功能也更流畅。如果你手头的工程比较大、Vivado版本又比较新遇到IBERT跑不起来的情况第一个动作应该是查一下IP核的Release Notes看看是否和当前Vivado版本有兼容性问题。实测下来Vivado 2022.2在IBERT这块稳定性不错界面响应也顺。2.3 参考时钟和电源是回环测试的隐形前提很多人跑IBERT报错时习惯先怀疑逻辑配置、回环模式实际上大量问题出在硬件环境尤其是参考时钟和电源。GT收发器的参考时钟通常由专用时钟引脚比如MGTREFCLK输入可以是差分100MHz、125MHz、156.25MHz等常用频率。IBERT核配置的时候你选的参考时钟频率必须和板卡实际供给的一致否则CPLL/QPLL永远锁不住IBERT界面里会看到REFCLK状态一直是红色。电源的影响更加隐蔽。GT收发器需要多个供电轨比如VMGTAVCC、VMGTAVTT等如果你只做了初步上电没有逐个确认电压纹波和上电时序近端回环测试时可能出现误码率时好时坏的现象。这种情况下IBERT查不出逻辑错误最后发现是电源纹波超标。所以跑IBERT之前建议先用示波器把收发器相关电源轨的纹波测一遍高压摆、大纹波的供电绝对撑不住高速链路。3. 在Vivado里搭建近端回环一步一步来3.1 新建工程并从IP Catalog拉取IBERT在Vivado里搭IBERT工程不需要写一行HDL代码但工程还是要建的。打开Vivado后选择Create Project选RTL Project指定器件型号或者直接导入板卡的Xilinx Board Files。建议在工程创建时就把目标器件选对不然IBERT核可能被禁用。工程建好后在左侧Flow Navigator点IP Catalog在搜索栏输入IBERT会出现对应的Integrated Bit Error Ratio Tester核。双击打开配置界面。如果IP搜索出来是灰色不可选大概率是器件型号或者Vivado版本不支持。7系列一般没问题UltraScale要用新版Vivado。3.2 配置GT Quad、参考时钟与线速率IBERT核配置界面是这个工具最核心的地方需要仔细看的选项有以下几组GT Selection这里会列出FPGA里可用的GT Quad每4个收发器通道为一个Quad。你要在当前工程里测哪几个通道就勾选哪几个。如果不确定可以全部勾上不影响核的生成只是资源占用多一些。Reference Clock每个Quad需要配置对应的参考时钟频率和来源。必须和板卡实际输入一致。常见的默认值是100MHz或125MHz。Line Rate这是收发器的工作线速率单位Gbps。近端回环调试时可以选一个保守值比如GTX支持10.3125Gbps可以先选5Gbps或更高在配置合理的条件下能跑通就行。线速率越高对参考时钟的纯净度要求越高。Protocol有的Vivado版本提供可选的预定义协议模板PCIe、XAUI等新手不熟时可以先用Generic/None。配置页里也会有TX/RX的差分电压、预加重等参数默认值一般够用近端回环阶段先不动它们等扫眼图时再微调。注意IBERT核生成后会自动构建一个JTAG链接模块比如BSCAN你不需要自己接任何控制信号下载bit文件后IBERT就能通过JTAG被Hardware Manager识别。3.3 选好回环模式Near-End PMA还是Near-End PCS标题里说的近端回环在IBERT核里对应的就是Loopback模式的配置。这地方非常容易选错因为名称里都带Near-End但功能和验证目标是不同的。如果你想测的是收发器本身的模拟前端和时钟恢复能力选Near-End PMA。这也是绝大多数板卡调试场景需要的模式。如果你更关心PCS层逻辑和内部数据通路选Near-End PCS。我个人的做法是第一步先用Near-End PMA因为它最接近把芯片自己的收发通道打开看能不能收发数据这个目标。PMA回环跑通了再切到Near-End PCS验证一遍两者都干净后续做外部回环心里就有底。有些IBERT核支持在软硬件层面直接通过寄存器切换回环模式而不是生成核时写死这样在GUI里随时可以改。但有的核配置里固定了回环模式生成后不能自由切换。建议配置时选择一个可控的模式方便后面做对比测试具体看你的核版本和界面是否支持。3.4 综合、约束与比特流生成IBERT核配置完后IP核界面的Source面板里已经自动生成了顶层例化。你只需要在Vivado里点Generate Output Products、综合、布局布线、生成比特流。这里有一个经常让新手卡住的地方IBERT工程一般不需要手动写XDC约束但时钟约束往往被忽略。Vivado在IP生成时会自动带入一部分约束如果你看到implement design变红或者生成比特流失败的提示多半是时序没有收敛需要检查是不是某个时钟没有被正确约束。跑综合前建议先在工程设置里确认一下target language、top module等常规项。我的实践是IBERT核能自动处理JTAG链接和收发器约束但当Vivado报出关于时钟的CRITICAL WARNING时不要忽略直接回到IP配置里检查参考时钟频率是否填错。生成比特流后这篇博文前面步骤已经全部完成。工程目录下会有一个名字类似top.bit的文件下一步就是连硬件跑在线测试。4. 硬件连接与在线调试让IBERT真正跑起来4.1 上电、JTAG连接与设备识别把板卡通过JTAG下载器比如Digilent JTAG-HS3或Xilinx Platform Cable USB II连到电脑给板卡上电。打开Vivado的Hardware Manager点击Open Target正常情况下能看到JTAG链上的FPGA器件。如果设备识别不到先按以下顺序排查JTAG下载器驱动是否装好Windows下尤其容易出现驱动冲突板卡JTAG链路是否还有其它器件比如CPLD、第二个FPGA链上没有正确设置会导致IDCODE读取失败FPGA的ProgramPROG_B引脚是否被拉低导致芯片一直处于复位状态。设备识别正常后在Hardware Manager里右键器件选择Program Device加载生成的bit文件。下载完成后Vivado会出现一个提示告诉你已检测到IBERT核心并提供两种使用方式一种是直接在Hardware Manager里用Serial I/O Analyzer另一种是打开独立的IBERT GUI。4.2 打开IBERT调试界面并初始化链路在Vivado 2022.x等较新版本中下载bit文件后会在Hardware Manager的界面里多出一个IBERT相关的标签页。点进去后你会看到类似下图的布局左侧是GT Quad和通道列表中间是每个通道的Link Status、Error counters下方有回环模式、PRBS码型、线速率等控制选项。在开始扫眼图之前有几个关键操作要做确认每个Quad的参考时钟状态显示为Locked。如果显示Unlocked说明参考时钟有问题按本文第5节排查。在通道控制区选择回环模式为Near-End PMA或你配置的默认模式。确认TX/RX线速率显示为你配置的值。为每个通道单独点一下Reset让收发器完成一次复位初始化。做过这些后通道的Status状态应该会从红色变成绿色。此时可以开启Traffic让TX端持续发送PRBS码型。4.3 启动误码率统计与眼图扫描Traffic开启后IBERT会自动统计每个通道的误码数、误码率、接收信号强度。你先观察一段时间比如30秒如果Error Counter一直是0说明近端回环基本干净。然后就可以选择具体的通道执行眼图扫描Eye Scan。眼图扫描是IBERT最有价值的功能之一。它的原理是通过改变接收端的采样点和信号判决门限在每个扫描点统计误码率把统计结果画成二维分布图得到我们常说的眼图。在IBERT界面里点击一条通道选择Eye Scan设置水平轴、垂直轴的扫描范围和步进然后点Start。扫描出的眼图如果又大又饱满说明信号质量很好如果眼图很窄、有塌陷或者打开后有大片区域误码率高说明链路余量不足。近端回环模式下的眼图质量主要取决于芯片自身状态和参考时钟质量如果眼图不好多半是供电或参考时钟抖动太大。实测里有个经验扫眼图前最好把接收端的均衡RX EQ调到自动训练或选一个适中的档位。不然眼图的形状会很奇怪甚至出现扫不出来的情况。4.4 多个收发器通道怎么一起测IBERT支持同时监控多个通道。你在左侧列表勾选所有要测的通道然后开启Traffic就能在总览界面看到每个通道的误码率状态。这个功能在整版通道较多时特别有用。需要注意的是同时开启所有通道的Traffic会增大FPGA内部和外部电源功耗如果供电不够稳可能导致误码率集体飙升。遇到这种情况可以先逐个通道开确认通道本身没问题再全开做压力测试顺便观察电源波动。5. 常见错误排查实录这些坑我基本都踩过5.1 错误速查表先对症状再动手为了让你在报错时不慌我把这一路实操中看过、踩过的高频问题整理成了速查表先对症状再定位能省很多时间。现象可能原因优先排查动作Hardware Manager识别不到FPGAJTAG驱动、链路连接、器件未上电重插下载器、检查JTAG链、确认电源灯下载bit文件失败或卡住BSCAN地址冲突、多个JTAG器件检查JTAG链上地址、重新上电RefClk状态一直Unlocked参考时钟频率配置错、差分极性反、时钟芯片未工作用示波器测参考时钟、核对IP配置通道Link Status一直是红色回环模式没选对、复位没完成、线速率不匹配手动Reset通道、切换回环模式误码率不为0且持续增长参考时钟抖动大、电源纹波大、线速率过高检查电源、降低线速率、看眼图眼图扫描出来是空白或噪点RX均衡设置不合适、扫描参数太粗糙调RX EQ、加密扫描步进、恢复默认综合或生成比特流失败时钟约束缺失、时序未收敛查看timing报告、补充时钟约束打开IBERT GUI时崩溃或无响应Vivado版本和IP版本不兼容查看Release Notes、换Vivado版本5.2 时钟锁不住先查这三处参考时钟锁不住是我见过最多的问题。IBERT界面里RefClk状态一直不亮不一定是时钟硬件没接首先把下面三个地方查清楚第一IP配置里的参考时钟频率是否和板卡实际供给一致。很多板卡的参考时钟源来自可编程时钟芯片比如Si5338、LMK04828默认输出频率不一定是丝印上写的那个值。建议直接在时钟源输出点用示波器量一下实际波形和频率。第二差分时钟极性是不是接反了。IBERT核有N/P极性翻转选项如果板卡布线时把差分对交叉了而你在IP配置里没启用极性翻转锁相环就锁不上。第三时钟芯片的使能、I2C配置是否完成。有些板卡时钟芯片默认不上电输出需要处理器或FPGA上电后通过I2C/SPI配置才能输出时钟。如果跑IBERT时FPGA并没有执行这个配置序列参考时钟就是静默状态。顺带提一个坑如果参考时钟是从另一个FPGA或其他器件引出来的先确认对端器件是否已经正常初始化不是所有时钟源一上电就稳定输出的。5.3 误码率报警和扫不出眼图链路劣化的典型信号误码率不是0说明链路有东西不对。近端回环场景下外部的干扰已经被排除了一大半所以问题集中在芯片内部或本身环境供电是最容易被忽略的。高速收发器对电源噪声极其敏感Vivado官方手册里对每个电源轨的纹波都有指标要求比如VMGTAVCC7系列GTX通常为1.0V纹波一般要控制在几十毫伏以内。如果你发现误码率高且不稳定先去量电压纹波特别是靠近FPGA电源引脚的地方。参考时钟抖动也是一个原因。近端回环时参考时钟的抖动会直接影响CDR时钟数据恢复的稳定性。可以尝试降低线速率如果误码率明显下降说明参考时钟质量撑不起高线速率。还有一点IBERT开着的同时后台跑别的程序、电脑CPU负载太高偶尔会导致JTAG通信超时界面里看到误码率计数异常增长或IBERT卡死。这不是硬件问题把不相关的程序关掉、换个USB口通常就恢复了。扫不出眼图时先检查这几项接收均衡RX Equalization是不是设置了过高的增益或过低的增益扫描范围设得太小眼图超出了扫描区域扫描步进太粗导致很多细节丢失。我一般会先把扫描范围放大到±0.5V左右步进设到10mV以内再扫一遍基本都能出来。5.4 关于外部近端回环的一点补充文章讲的主要是芯片内部近端回环实际工程中还经常用到另一类近端回环在PCB板上通过SMA连接器或者专用回环夹具把FPGA的TX差分对短接到RX差分对做外部回环测试。这种测试模式能进一步验证PCB走线、连接器、焊接质量是在内部近端回环干净之后才该做的。做外部近端回环时注意差分线不能太长SMA线的质量要选好一点的否则误码率会莫名升高。另外很多板卡的回环路径上可能串了AC耦合电容回环时要注意IBERT配置里TX和RX路径上的端接方式通常选择AC Coupled和内部回环不同。如果你测的是外回环误码率比内回环高出几个数量级先确认回环路径有没有经过有源器件比如限幅放大器、均衡器这会直接影响链路预算。近端回环这块内容说起来简单实际操作中牵涉的知识点可以一直往里挖。我个人碰过最耗费时间的一次问题就是参考时钟频率在IP配置里写成156.25MHz实际时钟芯片输出的是125MHz花了大半天排查各种寄存器最后用示波器一量才发现频率对不上。所以做IBERT测试永远记得一个原则先量硬件再查软件。工具链越强大越容易让人忽略最基础的物理世界。希望这份攻略能帮你把高速收发器的第一道验收关走得顺一点。
返回列表