第四章 PCIe 物理层:从波形到链路状态

物理层是 PCIe 协议的根基,也是调试中最容易忽略的环节。我记得刚带项目时,总以为软件训练通过就万事大吉,结果量产阶段冒出一堆链路不稳定问题——追根溯源,全是电气参数没守住。今天就带你挨个过:差分信号、眼图抖动、均衡技术,还有那个让人又爱又恨的 LTSSM。

4.1 差分信号:为什么 PCIe 离不开它?

PCIe 采用差分信号,说白了就是用两根线互为参考来传数据。你想想看,一根走正相,一根走反相,接收端直接做减法。共模噪声(比如电源波动、地弹)在两根线上同时出现,一减就消掉了——抗干扰能力比单端强很多。

实际 Layout 时,差分对必须严格等长。我在项目里遇到过一例:眼图张开度始终比 spec 差 20%,折腾三天查不出原因。后来拿 TDR 打阻抗,发现其中一根线比另一根短了 15 mil,导致信号延迟差产生共模分量。嗯,修完等长后眼图立马合格。

经验之谈:差分对内等长控制在 ±5 mil 以内,差分阻抗尽量靠 100Ω ± 10%。别只看仿真,加工后务必用 TDR 抽测 PCB 铜箔实值。

4.2 眼图和抖动——信号质量的照妖镜

眼图是把一串比特波形叠在一起,形成类似人眼的形状。眼图越“胖”,信号裕量越大;眼图越“瘦”,误码风险越高。调试时重点关注:眼高(垂直开度)、眼宽(水平开度)、眼模板(Mask)。

抖动是信号边沿出现的位置随时间偏离理想值。分为两大类:

  • 随机抖动(RJ):热噪声、散粒噪声导致,呈高斯分布,没上限。
  • 确定性抖动(DJ):有规律,比如串扰、SSO、码间干扰造成的抖动,可以用直方图分离。

讲一个亲身踩过的坑:Gen4 调试时抖动总超标,PLL 也换了,电源也测了,就是不行。后来拿频谱仪追参考时钟——发现 100 MHz SSC 调制的频偏有 3500 ppm,远超 3000 ppm 允许值。换一颗晶振后问题解决。所以调抖动别光盯着 TX,时钟源头也得查。

眼图模板测试要点:
- Gen1 眼模板:眼宽 0.35 UI,眼高 300 mV
- Gen2 眼模板:眼宽 0.4 UI,眼高 200 mV
- Gen3/Gen4 为电压模板(基于 CTLE 后)+ 抖动模板
(注:UI 为一个比特单元的时长,Gen3 为 125 ps)

4.3 均衡技术:信号衰减的克星

随着速率提升,PCB 走线的趋肤效应和介质损耗会让信号幅度呈指数级下降。PCIe 用三种均衡手段补偿:

  1. 发送端去加重(TX EQ):发第一个比特时幅度大,后续比特压低,抵消信道低通特性。
  2. 接收端 CTLE(连续时间线性均衡):放大高频成分,压低低频,用模拟电路实现。
  3. 接收端 DFE(判决反馈均衡):根据前几个比特的判决值,抵消码间干扰。Gen3 起强制要求。
PCIe 代际 速率(GT/s) TX EQ CTLE DFE
Gen1 2.5 可选 一般不用 不要求
Gen2 5.0 建议 3.5 dB 常用 不要求
Gen3 8.0 支持 6 级 固定 + 可调 必要
Gen4 16.0 支持 8 级 多段可调 必要

我调 Gen3 时遇到过:DFE 自适应总是收敛到错误系数,眼图反而更差。后来发现是参考电压偏了,导致 DFE 抽头计算错误。手动设固定系数后链路才稳定。所以调试均衡时,建议先冻结 DFE,用 PRBS 模式确认 CTLE + TX EQ 组合是否合理,再放开自适应。

4.4 链路训练状态机(LTSSM)——握手协议的精髓

LTSSM 是管理 PCIe 链路状态的核心状态机,从硬件上电到收发数据,每一步都有严格时序。状态机有好几十个子状态,不过咱们调试时主要盯几个关键点:

  • Detect:检测对端是否在位。发脉冲看反射,确定是否有负载。
  • Polling:收发端交换训练序列,做位锁定和符号锁定。我遇到过在这里卡死的案例——接收方收不到有效 TS1/TS2,最后发现是差分对短路。
  • Configuration:协商链路宽度、速率、相位调整。如果 Width 或 Speed 协商失败,会降级或回退。
  • L0:正常数据传输。
  • Recovery:链路出错或主动降速时进入,重新做 Bit Lock 和 EQ 适配。
  • L0s / L1 / L2:低功耗状态,退出时也有握手时序。
调试预警:如果系统上电后一直跑在 Polling 或 Recovery,别一股脑查协议逻辑。先用电眼仪看链路眼图是否合格——很多 LTSSM 卡住的原因其实是物理层信号太差,导致训练序列无法正确解码。我曾有一回调了三天软件,最后发现是 AC 耦合电容焊反了。

下面这张 LTSSM 简化图,帮你建立状态转换的直观印象:

LTSSM 主要状态转换图(简化版) Detect Polling Configuration L0 Recovery L1 成功检测对端 位锁定完成 协商成功 链路错误 恢复成功 严重错误,回到 Detect 进入低功耗 唤醒 实线:正常转换 虚线:错误回退

实际调试时,我最常用协议分析仪抓 LTSSM 状态跳转记录。比如看到状态在 Polling → Configuration → Polling 来回震荡,多半是符号锁定失败。再比如 Recovery 超时导致回 Detect,那就先查 TX 输出摆幅和接收灵敏度。

实战 checklist(电气+LTSSM联合调测):
1. TDR 确认差分阻抗 100Ω ± 15%
2. 眼图测试:Gen3 最低眼高需 > 80 mV(经 CTLE 后)
3. 抖动分离:总抖动 ≤ 0.3 UI 峰值(含 DJ+RJ)
4. 协议分析仪抓 LTSSM 状态,重点看 Polling 到 Configuration 的用时是否超过 spec 的 24 ms
5. 电源噪声:TX/RX 供电的纹波必须 ≤ 50 mVpp

记住,物理层调不好,上层序列层、事务层再正确也白搭。一步一个脚印,把眼图、抖动和 LTSSM 搞透,PCIe 调试就能走对方向。