4. Gen2/Gen3/Gen4/Gen5 速率提升机制
PCIe 链路从 Gen1 发展到 Gen5,每一代都在数据速率和编码效率上实现了显著跃升。理解这些速率定义和编码方式的变化,是分析链路训练失败与速率协商回退机制的基础。本章将详细阐述各代 PCIe 的速率定义、编码方式及其对有效带宽的影响。
4.1 各代速率定义与编码方式对比
下表总结了从 Gen1 到 Gen5 的核心物理层参数。注意,数据传输速率(GT/s)指的是每秒传输的 Giga 个符号(Symbol),而有效带宽(GB/s)则是在扣除编码开销后,每个 Lane 实际可用的数据吞吐量。
| PCIe 代际 | 数据传输速率 (GT/s) | 编码方式 | 编码效率 | 每 Lane 有效带宽 (GB/s) |
|---|---|---|---|---|
| Gen1 | 2.5 | 8b/10b | 80% | 0.25 |
| Gen2 | 5.0 | 8b/10b | 80% | 0.50 |
| Gen3 | 8.0 | 128b/130b | ~98.46% | ~0.985 |
| Gen4 | 16.0 | 128b/130b | ~98.46% | ~1.969 |
| Gen5 | 32.0 | 128b/130b | ~98.46% | ~3.938 |
关键洞察: 从 Gen3 开始,PCIe 引入了更高效的 128b/130b 编码,将编码开销从 8b/10b 的 20% 降低至不到 2%。这使得 Gen3 在速率仅提升 60%(从 5 GT/s 到 8 GT/s)的情况下,有效带宽却几乎翻倍(从 0.5 GB/s 到 0.985 GB/s)。
4.2 编码方式详解:8b/10b vs 128b/130b
编码方式的选择直接影响了链路的电气特性和训练过程。
4.2.1 8b/10b 编码(Gen1 & Gen2)
- 原理: 将每 8 位数据映射为 10 位符号进行传输。
- 优点: 保证了足够的 DC 平衡(传输的 0 和 1 数量大致相等),并为接收端提供了丰富的 时钟恢复 信息(足够的跳变沿)。
- 缺点: 20% 的编码开销,导致有效带宽利用率较低。
- 特殊符号: 使用 K 码(控制字符)来标识数据包的起始、结束和链路管理命令(如 SKP 用于时钟补偿)。
4.2.2 128b/130b 编码(Gen3, Gen4 & Gen5)
- 原理: 将每 128 位数据块编码为 130 位块进行传输。其中 2 位是同步头(Sync Header),用于标识该块是数据块还是控制块。
- 优点: 编码效率极高(~98.46%),大幅提升了有效带宽。
- 挑战: 由于跳变沿减少,对时钟恢复电路(CDR)的要求更高。为此,引入了 加扰(Scrambling) 机制来随机化数据模式,确保足够的跳变沿用于时钟恢复。
- 控制机制: 不再使用 K 码,而是通过 有序集(Ordered Sets) 和 数据链路层报文(DLLP) 来传递链路管理信息。
训练影响: 在链路训练过程中,Gen3 及以上的速率协商必须在成功完成 均衡(Equalization) 之后才能启用 128b/130b 编码。如果均衡失败,链路将无法进入 Gen3 及以上速率,并可能回退至 Gen2 或 Gen1。
4.3 速率提升与编码变化的 SVG 架构图
下图展示了从 Gen1 到 Gen5 的速率演进路径,以及编码方式在 Gen3 处的关键分水岭。
4.4 速率协商与回退机制中的编码角色
在链路训练状态机(LTSSM)中,速率协商是一个关键步骤。编码方式的变化直接影响协商逻辑:
- 初始协商: 链路两端首先在 Gen1 速率(2.5 GT/s)下建立基本连接,使用 8b/10b 编码。
- 速率变更: 当双方都支持更高代际时,会尝试切换到更高速度。对于 Gen3 及以上,切换过程包括:
- 发送 Equalization 训练序列(TS1/TS2 的有序集变体)。
- 调整发送端和接收端的 均衡参数(如去加重、增益等)。
- 成功完成均衡后,链路切换到 128b/130b 编码并锁定。
- 回退场景:
- 如果 Gen3 均衡失败,链路会回退到 Gen2(5 GT/s),并继续使用 8b/10b 编码。
- 如果 Gen2 也无法稳定工作,则进一步回退到 Gen1(2.5 GT/s)。
常见训练失败点: 在 Gen3 速率协商过程中,如果接收端无法在 128b/130b 编码下锁定时钟(由于信号质量差或均衡不充分),链路将反复尝试进入 Recovery 状态,最终导致训练超时并回退。这是高速链路设计中需要重点关注的信号完整性(SI)问题。
4.5 有效带宽计算示例
为了更直观地理解编码开销的影响,以下是一个简单的带宽计算示例:
// 假设一个 x16 链路
// Gen2 (5 GT/s, 8b/10b)
原始速率 = 5 GT/s * 16 = 80 GT/s
有效带宽 = 80 GT/s * (8/10) = 64 Gb/s = 8 GB/s
// Gen3 (8 GT/s, 128b/130b)
原始速率 = 8 GT/s * 16 = 128 GT/s
有效带宽 = 128 GT/s * (128/130) ≈ 126.15 Gb/s ≈ 15.77 GB/s
// 对比:Gen3 相比 Gen2,原始速率提升 60%,但有效带宽提升约 97%
这个计算清晰地展示了 128b/130b 编码在提升有效带宽方面的巨大优势,这也是 PCIe 标准在 Gen3 之后坚持使用该编码的核心原因。