PCIe链路训练状态机:Gen1到Gen5速率协商流程 - 第1节
1.1 PCIe 总线架构概述
PCI Express(PCIe)是一种高速串行计算机扩展总线标准,旨在替代传统的并行 PCI 和 PCI-X 总线。其核心设计理念是采用点对点串行连接,每个设备都拥有专用的通道(Lane),从而彻底消除了共享总线带来的带宽争用和信号同步问题。
从架构角度看,PCIe 系统由以下关键组件构成:
- 根复合体(Root Complex, RC):连接 CPU、内存和 PCIe 交换结构,是系统的核心。
- 交换器(Switch):扩展 PCIe 端口数量,实现多设备互连,负责数据包的路由和转发。
- 端点(Endpoint, EP):功能设备,如 GPU、NVMe SSD、网卡等。
- 桥接器(Bridge):用于连接其他总线标准(如 PCI/PCI-X)到 PCIe 域。
关键概念: PCIe 使用“通道(Lane)”作为基本物理链路,每个 Lane 由一对差分信号对(发送+接收)组成。链路宽度可以是 x1、x4、x8、x16,通过并行绑定多个 Lane 实现更高带宽。
1.1.1 拓扑结构
PCIe 采用树形拓扑结构,以根复合体为根节点,通过交换器向下扩展。下图展示了典型的 PCIe 系统拓扑:
1.2 分层协议栈
PCIe 采用分层协议栈架构,从下到上依次为:物理层(Physical Layer)、数据链路层(Data Link Layer)和事务层(Transaction Layer)。每一层都有明确的职责,层间通过定义良好的接口进行通信。这种分层设计使得协议扩展和速率升级(如从 Gen1 到 Gen5)成为可能,而无需重写整个协议栈。
| 协议层 | 主要职责 | 关键单元/概念 |
|---|---|---|
| 事务层 | 处理 TLP(事务层包)的组装与解析,管理事务顺序与流量控制 | TLP、事务描述符、VC(虚拟通道)、流量控制(FC) |
| 数据链路层 | 保证 TLP 在链路中的可靠传输,处理错误检测与重传 | DLLP(数据链路层包)、ACK/NAK、CRC、重放缓冲区 |
| 物理层 | 负责串行/解串、编码/解码、链路训练与初始化、电气特性 | Lane、PMA/PCS、8b/10b(Gen1/2)、128b/130b(Gen3+)、LTSSM |
核心要点: 事务层关注“做什么”(读/写/完成),数据链路层关注“是否可靠到达”,物理层关注“如何用信号传输”。链路训练状态机(LTSSM)位于物理层,负责速率协商和链路初始化。
1.2.1 分层协议栈架构图
下图展示了 PCIe 分层协议栈的内部结构以及数据包在层间的流动过程:
1.3 各层核心概念详解
1.3.1 事务层 (Transaction Layer)
事务层是协议栈中最接近软件的一层,负责处理事务层包(TLP)。TLP 是 PCIe 通信的基本数据单元,用于执行存储器读写、I/O 读写、配置读写和消息传递等操作。
- TLP 格式:包含起始帧、序列号、TLP 头、数据负载(可选)和 CRC(ECRC)。
- 事务类型:Memory、I/O、Configuration、Message 四种地址空间。
- 流量控制(Flow Control):基于信用(Credit)机制,防止接收端缓冲区溢出。
- 虚拟通道(VC):支持多个独立的数据流,实现 QoS 管理。
1.3.2 数据链路层 (Data Link Layer)
数据链路层位于事务层和物理层之间,主要职责是确保 TLP 在链路中的可靠传输。它通过以下机制实现:
- DLLP(数据链路层包):用于链路管理,如 ACK/NAK、电源管理、流控更新。
- ACK/NAK 重传协议:发送端保留 TLP 副本,直到收到接收端的 ACK 确认;若收到 NAK 或超时,则重传。
- CRC 校验:LCRC(链路 CRC)用于检测传输错误。
- 重放缓冲区(Replay Buffer):保存已发送但未确认的 TLP,用于重传。
注意: 数据链路层只保证“链路级”的可靠传输,不保证端到端的可靠。端到端可靠性由事务层或上层软件处理(如通过 ECRC 和完成超时机制)。
1.3.3 物理层 (Physical Layer)
物理层是协议栈的最底层,直接与物理介质交互。它分为两个子层:
- PCS(物理编码子层):负责数据的编码/解码。Gen1 和 Gen2 使用 8b/10b 编码(20% 开销),Gen3 及以上使用 128b/130b 编码(约 1.5% 开销)。
- PMA(物理介质附加子层):负责串行化/解串行化(SerDes)、时钟恢复、电气特性驱动。
- LTSSM(链路训练和状态状态机):物理层的核心控制逻辑,负责链路初始化、速率协商、宽度协商、电源状态转换等。这是本课程后续章节的重点。
1.3.4 各代 PCIe 速率与编码对比
| PCIe 代际 | 单 Lane 原始速率 (GT/s) | 编码方式 | 有效带宽 (GB/s, x16) | 引入年份 |
|---|---|---|---|---|
| Gen1 | 2.5 | 8b/10b | 4.0 | 2003 |
| Gen2 | 5.0 | 8b/10b | 8.0 | 2007 |
| Gen3 | 8.0 | 128b/130b | 15.8 | 2010 |
| Gen4 | 16.0 | 128b/130b | 31.5 | 2017 |
| Gen5 | 32.0 | 128b/130b | 63.0 | 2019 |
速率计算示例: Gen5 x16 有效带宽 = 32 GT/s × 16 Lane × (128/130) 编码效率 ÷ 8 (bits/byte) ≈ 63.0 GB/s。注意:GT/s 表示每秒千兆传输次数,每次传输 1 bit 原始数据。
1.4 本章小结
本章介绍了 PCIe 总线的基本概念,包括:
- 总线架构与拓扑:点对点串行连接,树形拓扑,由 RC、Switch、Endpoint、Bridge 组成。
- 分层协议栈:事务层(TLP)、数据链路层(DLLP/ACK-NAK)、物理层(编码/SerDes/LTSSM)。
- 速率演进:从 Gen1 2.5 GT/s 到 Gen5 32 GT/s,编码效率从 80% 提升至 99.2%。