最近在做PCIe Gen5的FPGA接口设计,眼图测试一直不合格,抖动和串扰都压不下去。换板材和加retimer成本太高,领导不批预算。想请教一下有经验的前辈,除了换板材和加retimer,还有哪些便宜实用的调试手段?比如调整驱动强度、均衡器设置、参考时钟抖动优化这些,有没有具体的调试步骤和参数建议?
FPGA工程师做PCIe Gen5接口,眼图测试一直不过,除了换板材和加retimer还有哪些便宜实用的调试手段?
4 个回答

先别急着动硬件,把调试顺序反过来想一遍。你现在的瓶颈是眼图不过,但眼图只是结果,真正要追的是抖动预算和串扰来源。我建议你第一步先做被动测量:用示波器在FPGA的TX引脚附近(尽量靠近封装ball)直接量差分信号,看是不是在芯片出口就已经劣化了。如果出口就脏,那问题在FPGA内部或参考时钟;如果出口干净、到连接器才劣化,那才是PCB走线的事。这个判断能帮你省掉大量瞎调时间。
如果是TX侧的问题,优先调预加重(de-emphasis)和摆幅。PCIe Gen5的TX均衡有三段tap,一般先固定摆幅在0.8~1.0Vpp,然后从预加重-3.5dB起步,每次加0.5dB,同时盯着远端的眼高和眼宽。注意,预加重加太狠会把高频抬起来但牺牲中频,反而让接收端更难受,所以要用BERT的浴盆曲线看,别只看单点眼图。
如果是RX侧的问题,CTLE和DFE的配合才是关键。Gen5的DFE一般有5~7个tap,你先用训练序列把CTLE的AC增益调到中档,然后逐个tap调DFE系数,观察误码率变化。这里有个常见误区:很多人把DFE的tap0调得很大去追低频反射,结果把高频噪声也放大了。正确做法是tap0只负责最近的反射,后面tap1~3去追长尾,调的时候要一组一组来,每次只动一个tap,记录误码率曲线,别同时改两个。
参考时钟这块,我遇到过几次坑。FPGA的PCIe硬核通常要求100MHz差分时钟的相位噪声在12kHz~20MHz频段内低于-110dBc/Hz,但很多开发板的晶振根本达不到。你先用频谱仪看看时钟源附近的杂散,如果有明显的spur,多半是板上DC-DC开关频率耦合进来的,加个LC滤波或换低噪声LDO供电就能改善。另外,检查一下FPGA的PLL配置,有些器件允许你调整PLL带宽,把带宽收窄一点能滤掉部分时钟抖动,但代价是锁定时间变长,测试时记得等稳定再量。
最后提一下PCB侧的低成本手段:如果走线是表层微带线,试着在走线两侧加地孔围栏,间距小于走线宽度的两倍,能明显压串扰。过孔如果没背钻,至少把stub长度控制在50mil以内,或者干脆换到内层走线。这些改动不需要换板材,只改版图,打样一次也就几百块。
你现在的板子是标准8层还是6层?层叠结构对串扰影响很大,方便的话说下具体层叠,我可以帮你判断是不是层间耦合的问题。

给你一个便宜又实用的思路:先别管眼图,直接看误码率和链路训练日志。PCIe Gen5在训练阶段会协商均衡系数,你可以在FPGA的调试接口里把TX EQ系数和RX CTLE/DFE的寄存器值dump出来,看看是不是训练算法收敛到了很差的局部最优。如果是,手动覆盖掉这些系数,用已知能过的配置去测。
我之前有个项目就是训练出来的pre-cursor系数太大,导致远端眼图塌了,手动把pre-cursor从-1.2dB改成-0.6dB,同时把post-cursor从-2.5dB调到-3.0dB,误码率立刻降了两个数量级。这个方法零成本,就是需要你多读几遍PCIe Base Spec里的均衡参数表,以及你的FPGA IP核的寄存器映射文档。
另外,检查一下你的参考时钟是否用了展频(SSC)。Gen5规范允许-0.5%的SSC,但如果FPGA的PLL没正确配置跟踪,SSC会把抖动放大。你可以在BIOS或IP配置里关掉SSC试试,如果眼图明显变好,那就是时钟跟踪的问题,而不是板材问题。

听你描述,领导卡预算这个事其实反而是好事,逼你先去把信号链路里能免费薅的羊毛薅干净。我建议你把精力优先压在TX均衡和参考时钟这两块,这是FPGA侧最容易出效果、也最不花钱的地方。先说TX,Gen5的发射端有三段tap,别一上来就猛调摆幅,先固定摆幅在0.85Vpp左右,然后从预加重-3.0dB起步,每次只动0.5dB,用BERT的浴盆曲线盯着眼高和眼宽的变化。有个常见误区是预加重加得越狠越好,其实pre-cursor太大会把远端眼图的高频分量抬起来,但中频塌下去,接收端DFE反而更难收敛。我之前遇到过训练算法自动协商出来的post-cursor系数偏小,导致眼图闭合,手动把post-cursor从-2.0dB调到-2.8dB,误码率立刻降了一个数量级。这个调试成本就是多读几遍你FPGA IP核的寄存器映射文档,找到TX_EQ_TAP的地址,用JTAG或者调试接口直接覆盖。
再说参考时钟,这是很多人忽略的坑。你先确认一下是不是开了展频时钟SSC,Gen5规范里允许-0.5%的SSC,但如果你板上的时钟源本身相位噪声就很差,SSC会把抖动预算吃掉一大块。便宜的做法是拿一个已知干净的100MHz差分晶振,临时飞线替换掉板上的时钟源,看眼图有没有明显改善。如果有改善,那就别折腾PCB了,去跟时钟供应商要一份相位噪声曲线,重点看1MHz到10MHz offset的积分抖动,一般要求小于0.5ps RMS,如果超标,换一个低抖动晶振可能只要几十块钱,比换板材便宜两个数量级。
最后说一个零成本的检查项:过孔背钻。如果你的PCB是8层以上,高速lane的过孔要确认有没有做背钻处理,没背钻的过孔残桩在25GHz附近会产生谐振,正好砸在Gen5的奈奎斯特频率上。用TDR或者VNA量一下过孔处的阻抗,如果看到明显的阻抗凹陷,那就得跟PCB厂确认背钻的深度公差。这块不花钱,但需要你花时间跟板厂扯皮。
你先试试手动覆盖TX均衡系数,顺便查一下参考时钟的相位噪声数据,这两步做完再决定要不要动PCB。你现在的板子大概几层?过孔有没有做背钻处理?

其实你这情况,我第一反应不是让你去调均衡,而是先花半天时间把链路训练的协商结果dump出来看看。PCIe Gen5在训练阶段会自动协商TX EQ和RX CTLE/DFE的系数,很多时候眼图不过是因为训练算法收敛到了某个局部最差解,比如pre-cursor给得太大,把远端眼图的高频分量抬起来了,中频却塌下去,接收端DFE反而更难收敛。你可以通过FPGA的调试接口把寄存器值读出来,如果发现系数明显偏离典型值,直接手动覆盖成已知能过的配置再测。这个操作零成本,就是需要你多读几遍PCIe Base Spec里的均衡参数表和你IP核的寄存器映射文档。
另外一个容易被忽略的点是参考时钟。你先确认一下是不是开了展频(SSC),Gen5规范允许-0.5%的SSC,但如果你用的是板载晶振而不是独立时钟芯片,相位噪声可能本身就超标。用频谱仪看下100MHz参考时钟的抖动,如果峰峰值超过1ps,优先换一个低相噪的晶振试试,几十块钱的事,比换板材便宜太多。
还有个小技巧:如果只有个别lane不过,别急着全链路调,先用误码仪或者FPGA内部的PRBS发生器单独测那几条lane,排除是不是连接器或过孔背钻的问题。之前我遇到过一次,就是某个lane的过孔stub太长,串扰特别大,后来把背钻深度调了一下就好了。你目前用的FPGA是哪家的?不同IP核的均衡寄存器映射差挺多的,说下型号我帮你看看具体调哪个位域。
发表回答
登录后可在本页底部提交回答