第3章 PCIe物理层基础:差分信号、通道配置

各位刚开始接触 PCIe 的同学,常被一堆术语吓住——差分信号、通道、链路宽度……说到底,这些是物理层最核心的东西。我做了十几年信号完整性,见过太多因为物理层没吃透导致整板返工的项目。今天咱们就把它掰开揉碎。

3.1 为什么非得用差分信号?

PCIe 不用单端信号,而用一对一对的差分线。说白了,就是每个信号用两根线传:一根传正,一根传负。接收端只看两根线的差值。

好处非常明显:

  • 抗共模噪声:外界干扰同时耦合到两根线上,一减就抵消了。
  • 低电压摆幅:差分摆幅只有几百毫伏,功耗低,速率才能做到几十 Gbps。
  • 电磁辐射小:两根线电流方向相反,磁场相互抵消。

关键指标:PCIe Gen5 差分电压典型值约 800 mVpp,Gen6 更低。每对差分线称为一个「Lane」(通道)。

我记得第一次用示波器看 PCIe 信号时,差分对的两根线波形像镜像一样。心里踏实不少——只要共模做干净,眼图就能张开。

3.2 通道配置:x1, x4, x8, x16

一个 Lane 就是一对发送差分线 + 一对接收差分线。多个 Lane 捆在一起,就成了 x1、x4、x8、x16 这些宽度。

链路宽度发送差分对接收差分对总差分对典型应用
x1112NVMe M.2 低功耗设备
x4448NVMe SSD、网卡
x88816GPU、高带宽加速卡
x16161632独立显卡、计算卡

注意:每个 Lane 的时钟是内嵌在数据里的(8b/10b 或 128b/130b 编码),不需要额外走时钟线。这个设计简化了布线,但也把压力转给了接收端的 CDR(时钟数据恢复)电路。

3.3 链路宽度协商:自动降速保稳定

你插一张 x16 显卡到 x8 插槽,照样能用。为什么?PCIe 在初始化时会做链路宽度协商。

  1. 上电后,两端各自声明自己能支持的最大宽度(比如 x16 和 x8)。
  2. 然后逐 Lane 检测物理连接:看接收端能否识别发送端的训练序列。
  3. 取双方都支持且实际连通的 Lane 数,取最小值。
  4. 最终宽度在训练过程中由 LTSSM(链路训练状态机)确定。

曾经踩过的坑:我之前做过一块 x4 的 NVMe 子卡,PCB 上只布了 4 对差分线,但 connector 选成了 x8 规格。结果主板协商时识别到 8 个 Lane 的物理存在(connector 带了多余引脚),而实际只焊了 4 对线。训练阶段反复失败,系统直接降到 x1。后来乖乖换成 x4 connector 才解决。你想想看,connector 的引脚定义也要和实际 Lane 数匹配,否则自协商就乱套了。

3.4 物理层差分线的设计要点

画 PCB 时,差分对要遵守几条铁律:

  • 一对线内等长,误差控制在 5 mil 以内(Gen4/5 更严)。
  • 阻抗控制 85 Ω 差分(PCIe 标准),注意不是 100 Ω。
  • 远离其他高速信号和时钟源,间距至少 3 倍线宽。
  • 换层处加回流地过孔,减少阻抗突变。

个人习惯:我每次出板前,都会在阻抗仿真里扫一下布线拐角和通孔残桩。特别是 x16 的板子,32 对差分线挤在一起,串扰很容易超标。用 3D 场仿真验证一遍,比改板省钱多了。

3.5 一张图看懂物理层核心结构

下面这张图,把差分信号、Lane 和链路宽度的关系串起来了:

PCIe 物理层:差分信号与通道配置 发送端 (TX) Lane 0 D+ D- Lane 1 Lane 2 Lane 3 差分线对传输 每 Lane 包含 D+ 和 D- 两根线 阻抗 85Ω 差分,等长误差 ≤5mil Lane 0 差分对 Lane 1 差分对 接收端 (RX) Lane 0 Lane 1 Lane 2 Lane 3 图3-1 差分信号与Lane映射(x4示例)

可以看到,发送端每个 Lane 独立输出一对差分线,经过 PCB 走线到接收端。链路宽度 x4 就是四对这样的差分对同时工作。实际 x16 就是 16 组。

3.6 差分信号测试速查

平时实验室验证,我习惯按这个清单过一遍:

  • 差分阻抗:85Ω ± 15%(TDR 测量)
  • 对内时延差:< 10 ps
  • 共模电压:0 V ± 50 mV(交流耦合后)
  • 眼图模板:Gen3 以上需满足规范掩码
  • 抖动:RJ + DJ 总和 < 0.5 UI

避坑指南:我曾经遇到一块板子,Lane 0 眼图漂亮,Lane 3 却闭眼。查到最后发现是 PCB 上 Lane 3 的过孔残桩太长,形成了谐振腔。后来把过孔换成背钻,问题解决。

差分信号和通道配置,是 PCIe 物理层的两大基石。理解了他们,后续的链路训练、均衡、LTSSM 就好办了。嗯,内容就是这些,各位先消化一下。