PCIe 总线概述:从 Gen1 到 Gen6 的演进之路

做信号完整性这些年,PCIe 总线是我打交道最多的串行总线之一。说实话,每次版本迭代,对我们硬件工程师来说都是一次新的挑战——速率越来越高,裕量越来越小。这一章我们先搭个基础框架,把 PCIe 的版本演进、拓扑结构和带宽对比理清楚,后面的 S 参数分析和均衡优化才好落地。

1.1 版本演进:Gen1 到 Gen6 都改了啥

PCIe 从 2003 年推出至今,差不多每三年一代。我个人习惯按编码方式和数据速率来记这几个版本,因为这两个参数直接决定了通道设计的难度。先看总览表:

版本 编码方式 数据速率 (GT/s) 单 Lane 带宽 (GB/s) x16 总带宽 (GB/s) 推出年份 关键特性
Gen1 (1.0a) 8b/10b 2.5 0.25 4 2003 第一代串行替代方案
Gen2 (2.0) 8b/10b 5 0.5 8 2007 速率翻倍,协议改进
Gen3 (3.0) 128b/130b 8 0.985 15.75 2010 编码效率提升,协议层重设计
Gen4 (4.0) 128b/130b 16 1.969 31.5 2017 速率翻倍,通道损耗容限提升
Gen5 (5.0) 128b/130b 32 3.938 63 2019 引入 Equalization Phase 3,高阶均衡
Gen6 (6.0) PAM4 (1b/1b) 64 7.563 121 2022 NRZ→PAM4,FEC,更低延迟

注意 Gen3 是个分水岭。为什么?编码从 8b/10b 换成了 128b/130b,开销从 20% 降到了 1.5% 左右。我在项目中遇到过不少工程师还在用 8b/10b 的思维去估算 Gen3 带宽,结果算出来总比实际高一大截——其实是忘了有效带宽的计算公式。

// 有效带宽计算公式(单 Lane)
有效带宽 (GB/s) = 数据速率 (GT/s) × 编码效率(去掉开销后)

// 举例:Gen3 x16
= 8 GT/s × (128/130) × 16 lane
≈ 8 × 0.9846 × 16
≈ 126 Gb/s → 15.75 GB/s

核心指标:数据速率(GT/s)≠ 有效带宽(GB/s)。编码效率决定了开销有多大,Gen1/Gen2 的 8b/10b 只有 80% 的效率,Gen3 之后提升到了 98.5% 以上。

到了 Gen6,转而使用 PAM4 调制。这是个很大的跳跃。NRZ 只有 0 和 1 两个电平,PAM4 有 4 个。你想想看,一个符号周期就能传 2 比特,等效速率自然就上去了。但代价是信噪比要求更高——通道损耗稍微大一点,眼图就闭上了。我在调试 Gen6 预研项目时,最深的一个感受是:以前 NRZ 的均衡方法几乎要全部重来。

1.2 拓扑结构:点对点 vs 共享总线

PCIe 最大的变化之一,就是从 PCI/PCI-X 的共享并行总线改成了点对点串行架构。说白了,每个设备都有自己的专用通道,不用再去抢总线使用权了。

典型的 PCIe 拓扑包含以下几个角色:

  • Root Complex (RC):系统的起点,通常是 CPU 或 SoC 内部集成的 PCIe 控制器。RC 负责与 CPU 内存子系统交互,生成配置和 IO 事务。
  • Switch:相当于一个多端口的转发器,用来扩展更多的 Endpoint。Switch 内部有多个逻辑桥(Virtual PCI-to-PCI Bridge),负责事务层路由。
  • Endpoint (EP):功能设备,比如 GPU、NVMe SSD、网卡。EP 可以是单功能或多功能设备。
  • PCIe Bridge:用于连接不同的总线域,比如将 PCIe 转成传统的 PCI 总线。

个人经验:我曾经踩过一个坑——在拓扑中只有一个 Endpoint 时,没用 Switch,直接用 RC 直连 EP 就完事了。后来增加第二个 EP 时才发现 RC 的 Lane 不够分,得重新改版。如果你在产品规划阶段就预留了多设备扩展的可能性,建议一开始就考虑使用 Switch。

拓扑的层级关系决定了链路训练的顺序。RC 先检测下游是否有设备,然后逐级往下扫描。每个 Port 只能连一个下游设备(不管那是 Switch 还是 Endpoint),不能再像 PCI 那样挂一堆设备在一个总线上。这种点对点结构虽然布线增加了,但是信号质量好管控——一条链路上只有一对 Tx/Rx,串扰和反射都容易分析。

PCIe 典型拓扑结构 Root Complex (RC) PCIe Switch Endpoint 1 (GPU) Endpoint 2 (NVMe) Endpoint 3 (NIC) PCIe Bridge → PCI 点对点连接,一个 Port 只连一个设备

从图上能看出,Switch 是拓扑的枢纽。每个 Endpoint 都是从 RC 或者 Switch 的下行端口引出来的。需要注意的是,Switch 内部实现实际上是多个虚拟桥的组合,这在后面的链路训练和均衡协商中会影响 RX 检测的顺序。嗯,这里要注意:如果你设计的链路中有多级 Switch,均衡协商的延迟会增加,有些较老的主板在 Gen5 下的多级拓扑容易把训练时间拉得很长。

1.3 数据速率与带宽:不同版本差了多少

再来看数据速率和带宽的对比。这点很关键——很多时候大家只看 GT/s 的数字,觉得 Gen6 比 Gen3 快了 8 倍,但实际上有效带宽差距并没有那么大。为什么?因为编码效率、链路宽度和开销项都在变。

举个实际例子,Gen3 x4 和 Gen2 x8 哪个带宽高?

  • Gen3 x4:8 GT/s × (128/130) × 4 ≈ 31.5 Gb/s → 3.94 GB/s
  • Gen2 x8:5 GT/s × (8/10) × 8 ≈ 32 Gb/s → 4 GB/s

几乎不相上下。我曾经在项目中遇到客户坚持要用 Gen2 x16 来保证带宽,其实 Gen3 x8 就能达到同样的效果,而且还能省 PCB 面积和控制器引脚。你想想看,有时候版本升级带来的不仅仅是速度提升,还有布线资源的节约。

关键提醒:GT/s 是指每秒传输的符号数(Giga Transfers per second),不等于 Gb/s。对于 NRZ(Gen1~Gen5),1 Transfer = 1 bit;对于 PAM4(Gen6),1 Transfer = 2 bits。以 Gen6 的 64 GT/s PAM4 为例,等效数据速率是 128 Gb/s。这一点在做链路预算时千万别搞混。

下表整理了不同版本在各 Lane 数下的有效带宽,方便你快速估算:

版本 x1 有效带宽 x4 有效带宽 x8 有效带宽 x16 有效带宽 典型应用场景
Gen1 0.25 GB/s 1 GB/s 2 GB/s 4 GB/s 低速 I/O、传统外设
Gen2 0.5 GB/s 2 GB/s 4 GB/s 8 GB/s 千兆网卡、SATA 控制器
Gen3 0.985 GB/s 3.94 GB/s 7.88 GB/s 15.75 GB/s 中端 GPU、NVMe SSD
Gen4 1.969 GB/s 7.88 GB/s 15.75 GB/s 31.5 GB/s 高端 GPU、数据中心 SSD
Gen5 3.938 GB/s 15.75 GB/s 31.5 GB/s 63 GB/s AI 加速器、高速网络
Gen6 7.563 GB/s 30.25 GB/s 60.5 GB/s 121 GB/s 超算互连、下一代数据中心

从 Gen5 到 Gen6,单 Lane 带宽直接翻倍——但这是在变成 PAM4 和增加 FEC(前向纠错)之后做到的。FEC 虽然在协议层解决了部分误码问题,但也引入了额外的延迟。对于延迟敏感的应用(比如存储控制器),你得在系统设计阶段做好权衡。

最后说一句,我个人的建议:在做系统级带宽规划时,不要只看 x16 的理论峰值,要留出 20~30% 的余量给协议开销(TLP/DLLP 头、ACK/NAK、流量控制等),尤其是 Gen5 以上的高频设计,通道损耗和串扰很容易把实际吞吐拉低。这部分我们后面在均衡优化章节会详细展开。