第1章:物理层故障诊断基础
各位同学,咱们今天聊聊PCIe物理层的那些事儿。说实话,做了这么多年PCIe调试,我最大的感触就是——物理层的问题,往往是最难定位的。你逻辑层写得再好,信号质量不行,一切都是白搭。
1.1 信号完整性基础
先说说眼图。眼图这东西,说白了就是把一串数字信号的波形叠在一起看。为什么叫眼图?因为看起来像一只睁开的眼睛。眼睛睁得越大,信号质量越好。
我在项目中遇到过这么个情况:Gen3的链路,死活训练不到16GT/s。拿示波器一看,眼图都快闭上了。后来发现是PCB走线阻抗没控制好,差了10个欧姆。嗯,这种问题,光看代码是看不出来的。
眼图的关键参数:
- 眼高:眼睛垂直方向的开度,代表噪声裕量
- 眼宽:眼睛水平方向的开度,代表抖动裕量
- 抖动:信号边沿的时间偏差,分随机抖动和确定性抖动
- ISI:码间干扰,前一个bit影响后一个bit的判决
抖动这东西,我刚开始做的时候总觉得很玄乎。其实你想想看,理想情况下信号边沿应该精确地出现在某个时间点,但实际总会有些偏差。这个偏差就是抖动。抖动超标了,接收端就可能误判。
ISI呢?更直白点说,就是信号跑太快了,前一个bit还没稳定下来,后一个bit就来了。尤其是在长走线或者有反射的情况下,ISI会特别严重。我曾经调试过一个Gen4的板子,ISI大到眼图中间都糊了,最后发现是AC耦合电容的焊盘设计有问题。
1.2 PCIe Gen3/Gen4/Gen5的电气参数差异
不同代的PCIe,电气参数差别很大。我整理了一个表格,大家看看:
| 参数 | Gen3 (8 GT/s) | Gen4 (16 GT/s) | Gen5 (32 GT/s) |
|---|---|---|---|
| UI(单位间隔) | 125 ps | 62.5 ps | 31.25 ps |
| 发射端抖动(RMS) | ≤ 0.15 UI | ≤ 0.15 UI | ≤ 0.15 UI |
| 接收端抖动容限 | ≥ 0.3 UI | ≥ 0.3 UI | ≥ 0.25 UI |
| 差分电压摆幅 | 800-1200 mV | 800-1200 mV | 600-1000 mV |
| 去加重 | -3.5 dB | -6 dB | -8 dB |
看到没?从Gen3到Gen5,UI从125ps缩到了31.25ps。这意味着什么?意味着你的设计裕量被压缩了4倍。我个人的习惯是,做Gen5设计时,PCB走线长度尽量控制在10英寸以内,超过这个长度,信号质量就很难保证了。
我的经验:Gen4和Gen5的接收端都用了DFE(判决反馈均衡器)。这玩意儿能帮你补偿一部分信道损耗,但别指望它万能。我曾经见过一个设计,DFE系数都调到极限了,眼图还是不行。最后发现是参考时钟的抖动太大,DFE根本追不上。
1.3 物理层常见故障
物理层的故障,我归纳下来就三大类:阻抗问题、电容问题、时钟问题。
1.3.1 阻抗不匹配
PCIe要求差分阻抗100欧姆,单端50欧姆。差一点行不行?行,但别差太多。规范要求是±15%,也就是85到115欧姆。但说实话,我建议控制在±5%以内。
为什么?因为阻抗不匹配会产生反射。反射回来的信号会叠加在原始信号上,造成眼图畸变。我曾经调试过一个板子,阻抗只有80欧姆,结果Gen3都跑不稳。后来换了PCB板材,阻抗做到98欧姆,问题就解决了。
注意:阻抗不匹配不光是PCB走线的问题。连接器、过孔、焊盘,这些地方都可能引入阻抗突变。我建议在PCB设计阶段就做3D电磁仿真,别等到板子打回来再后悔。
1.3.2 AC耦合电容问题
AC耦合电容,PCIe规范要求是75nF到200nF。我一般用100nF的0402电容。但电容不是焊上去就完事了,有几个坑要注意:
- 电容的谐振频率:不同容值的电容,谐振频率不同。选错了,高频信号就过不去。
- 焊盘寄生电容:焊盘太大,寄生电容会改变信号路径的阻抗。
- 电容位置:规范要求电容离发送端不超过0.5英寸。远了,信号反射会变严重。
我记得有一次,客户说他们的Gen4链路老是掉线。我过去一看,AC耦合电容用的是0603封装的,而且离发送端有1英寸远。换回0402电容,挪到0.3英寸位置,问题就解决了。
1.3.3 参考时钟抖动超标
参考时钟是PCIe的心脏。时钟抖动超标,整个链路都会出问题。PCIe Gen3要求参考时钟的RMS抖动小于1ps,Gen4要求小于0.5ps,Gen5更严格,要求小于0.3ps。
怎么测时钟抖动?用频谱分析仪看相位噪声,然后积分到对应的频率范围。我个人的习惯是,不光看RMS值,还要看峰峰值。因为有些时钟的RMS值合格,但偶尔会有大的抖动尖峰,这种尖峰足以让链路失锁。
避坑指南:我曾经遇到过参考时钟的电源纹波太大,导致时钟抖动超标。后来在时钟芯片的电源引脚上加了一个LC滤波器,纹波从50mV降到了5mV,时钟抖动就合格了。所以,检查时钟抖动之前,先看看电源干不干净。
1.4 使用示波器进行物理层测试
示波器是物理层调试的必备工具。但示波器怎么用,这里头有讲究。
第一步:选择合适的示波器
测Gen3,至少需要13GHz带宽的示波器。测Gen4,20GHz起步。测Gen5,33GHz以上。带宽不够,测出来的眼图是假的。我见过有人用8GHz示波器测Gen4,眼图看起来很好,但实际上信号已经烂了。
第二步:设置正确的触发
PCIe信号是8b/10b编码的,有特定的同步头。用示波器的PCIe触发功能,锁定到同步头,这样才能看到稳定的眼图。
第三步:测量关键参数
- 眼高:至少200mV(Gen3/Gen4)
- 眼宽:至少0.5UI
- 抖动:RMS和峰峰值都要看
- 上升时间:20%-80%,一般要求小于0.3UI
第四步:分析故障
如果眼图不好,先看是随机抖动大还是确定性抖动大。随机抖动大,可能是时钟问题。确定性抖动大,可能是阻抗不匹配或者ISI。用示波器的抖动分析功能,可以分离出不同种类的抖动。
我的测试流程:
- 先测参考时钟,确保时钟抖动合格
- 再测电源纹波,确保电源干净
- 然后测信号眼图,看眼高、眼宽、抖动
- 最后测TDR,看阻抗是否匹配
这个流程走下来,90%的物理层问题都能定位到。
好了,第一章的内容就到这里。物理层是PCIe调试的基础,基础打不牢,后面都是空中楼阁。下一章咱们聊聊链路训练状态机,那才是真正考验逻辑分析能力的地方。
课后思考:如果你测出来的眼图眼高只有150mV,但规范要求200mV,你会从哪些方向去排查?欢迎在课程群里讨论。
公众号:蓝海资料掘金营,微信deep3321