第3章 PCIe物理层详解:电气特性、差分信号、眼图基础

好,到了物理层这一块,咱们得聊聊信号是怎么在PCIe链路上跑的。很多人觉得物理层就是一堆电压、时序的硬指标,背就完了。但我在项目中吃过亏,发现如果不理解信号在板子上到底经历了什么,后面链路均衡根本调不明白。

3.1 电气特性:信号能跑多快,板子说了算

PCIe物理层最核心的电气参数,说白了就是信号发送端的电压摆幅、差分阻抗,以及接收端的灵敏度。Gen1/Gen2时代,发送端差分电压摆幅一般在800mV~1200mV之间,到了Gen3/Gen4,为了降低功耗和串扰,摆幅降到了800mV~1000mV,甚至更低。

参数 Gen1/Gen2 Gen3/Gen4 Gen5/Gen6
差分电压摆幅(典型) 800–1200 mV 800–1000 mV 700–900 mV
差分阻抗 100Ω ± 15% 100Ω ± 15% 100Ω ± 10%
接收端灵敏度 175 mV 100 mV 70 mV
数据速率 2.5 / 5 GT/s 8 / 16 GT/s 32 / 64 GT/s

上表里的数值是规范要求,但实际板级实现往往会打折扣。我记得有一次调Gen3的板子,发送端电压只有650mV,接收端死活收不到眼图睁开——查了半天,发现是AC耦合电容的焊盘寄生电容太大,把信号削掉了一截。嗯,这里要注意:PCB走线的阻抗控制比芯片本身的电气参数更影响信号质量。

3.2 差分信号:为什么PCIe要用一对线?

很多人问我:为什么PCIe不用单端信号,非要用一对D+、D-?说白了,差分信号天生抗共模噪声。你想想看,两条走线平行紧贴,外界干扰同时作用在两条线上,接收端相减之后,干扰就抵消了。

我个人习惯把差分信号理解成“跷跷板”:

  • D+上升的时候,D-必须同步下降
  • 电压摆幅是D+减D-,所以信号幅度是单端的两倍
  • 接收端只看差值,不看电平

做PCB布局时,差分对要走等长、等距,还要保证阻抗连续。我曾经遇到过一个案例:差分对在BGA区域走线不对称,一侧长了50mil,结果眼图的十字交叉点偏移了10ps,直接被链路均衡算法判定为“通道不合格”。避坑指南:等长不是mm级的,PCIe Gen3要求差分对内长度差≤5mil。

3.3 眼图基础:信号质量的照妖镜

眼图是啥?其实就是把接收端看到的数字信号叠加在一个屏幕上。理想情况下,信号应该是一个清晰的“眼睛”。眼睛睁开得越大,说明信号质量越好。

为什么会出现眼图闭合?主要有三个原因:

  1. 码间干扰(ISI) – 前面一个bit把通道电容充放电没完成,影响当前bit
  2. 串扰 – 旁边相邻信号的耦合噪声
  3. 抖动 – 时钟和数据之间的时序偏差

我们做链路均衡,其实就是在跟眼图闭合作斗争。Gen3之前靠预设的系数(Preset)来调,Gen3之后加入了更加复杂的自适应均衡算法。但不论算法多高级,评估均衡效果的最终判据依然是眼图。

小技巧:用示波器抓眼图时,建议抓至少5000个UI(单位间隔)的叠加。我刚开始做测试时只抓了100个,结果眼图看起来还行,实际上抖动根本没捕获到。另外,触发源一定要选恢复时钟,别用参考时钟,不然时钟域偏差会给你假眼。

3.4 电气特性、差分信号、眼图的关联

这三者不是孤立的。你可以这么理解:电气特性是“条件”,差分信号是“载体”,眼图是“结果”。

  • 电气条件不满足(电压不够、阻抗不连续)→ 差分信号变形 → 眼图闭合
  • 差分信号走线有长度失配 → 共模转换增大 → 眼图抖动增加
  • 眼图闭合反过来告诉你电气特性哪里出问题了

我一般调试链路时,先看眼图是否打的开;如果打不开,回头测发送端差分电压和接收端回波损耗;如果电压回波都正常,再检查差分对走线有没有跨层、换层过孔有没有多打。这一套流程下来,绝大多数问题都能定位。

关键结论:PCIe物理层是否稳定,最终都体现在接收端的眼图上。眼图睁开高度≥规范值的70%,宽度≥0.4UI,才算是合格链路。Gen4规范要求眼图高度≥100mV,宽度≥0.3UI。

嗯,搞懂了这些基础,你再看后面章节的均衡系数、CTLE、DFE,就不会觉得是天上掉下来的玄学。所有均衡策略,本质上都是在“打扫”差通道带来的信号失真,让眼图重新睁开。

3.5 本知识体系结构

来,我给你画一张结构图。你看一眼就能明白这三者的关系。

PCIe物理层知识体系(第3章) 电气特性 电压摆幅 / 阻抗 差分信号 D+/D- 等长 / 阻抗连续 眼图基础 ISI / 抖动 / 串扰 决定 影响 链路均衡(后续章节展开) CTLE + DFE + 系数自适应 反馈修正 制约条件 🔑 核心逻辑 电气特性决定差分信号质量 → 差分信号质量决定眼图睁闭 眼图闭合情况反过来指导电气参数调整和均衡参数选择
⚠️ 实战提醒:别只看眼图打开就万事大吉。我在Gen3项目中遇到过眼图高度合格(>100mV),但宽度只有0.28UI的情况。后来发现是参考时钟的相位噪声太大,导致抖动累积。眼图的宽度和高度要一起看,缺一不可。