PCIe LTSSM状态机与链路训练全流程解析 - 第1节
1.1 PCIe 总线的发展历史
PCI Express(PCIe)自 2003 年由 Intel 提出以来,经历了多代演进,每次迭代都实现了带宽翻倍。下表总结了各代 PCIe 的关键参数:
| 代际 | 发布年份 | 单通道速率 (GT/s) | 编码方式 | x16 单向带宽 (GB/s) |
|---|---|---|---|---|
| PCIe 1.0 | 2003 | 2.5 | 8b/10b | 4.0 |
| PCIe 2.0 | 2007 | 5.0 | 8b/10b | 8.0 |
| PCIe 3.0 | 2010 | 8.0 | 128b/130b | 15.8 |
| PCIe 4.0 | 2017 | 16.0 | 128b/130b | 31.5 |
| PCIe 5.0 | 2019 | 32.0 | 128b/130b | 63.0 |
| PCIe 6.0 | 2022 | 64.0 | PAM-4 + FLIT | 126.0 |
关键里程碑:PCIe 3.0 将编码效率从 8b/10b(80%)提升至 128b/130b(≈98.5%),大幅降低了协议开销。PCIe 6.0 首次引入 PAM-4 信令和前向纠错(FEC),标志着从 NRZ 向多电平调制的转变。
1.2 PCIe 与 PCI / PCI-X 的区别
PCIe 并非 PCI 的简单升级,而是从并行共享总线彻底转向了串行点对点互连架构。以下是核心差异对比:
| 特性 | PCI / PCI-X | PCI Express |
|---|---|---|
| 总线架构 | 并行共享总线 | 串行点对点差分对 |
| 拓扑 | 多设备共享同一总线 | 交换式(Switch)星型拓扑 |
| 信号线 | 32/64 位并行数据 + 控制 | 差分 TX/RX 对(LVDS) |
| 时钟 | 同步共享时钟 | 内嵌时钟(8b/10b 或 128b/130b) |
| 带宽扩展 | 提高频率(受限于并行信号 skew) | 增加 Lane 宽度(x1/x2/x4/x8/x16/x32) |
| 热插拔 | 不支持(需特殊实现) | 原生支持(Native Hot Plug) |
| 软件兼容 | 配置空间、I/O、内存映射 | 向后兼容 PCI 配置模型 |
软件透明性:PCIe 在软件层面保持了与 PCI 的兼容性,操作系统无需修改即可枚举 PCIe 设备。这是 PCIe 能够快速替代 PCI 的关键原因之一。
1.3 PCIe 拓扑结构
PCIe 拓扑由三种基本组件构成:Root Complex(RC)、Switch 和 Endpoint(EP)。此外还包括 PCIe Bridge 用于桥接传统 PCI 设备。
1.3.1 核心组件定义
- Root Complex(RC):CPU 与 PCIe 层次结构的接口。负责生成事务层包(TLP)、处理配置请求、管理中断和错误。通常集成在 CPU 或芯片组中。
- Switch:由上游端口(Upstream Port)和多个下游端口(Downstream Port)组成,负责在多个 Endpoint 之间路由 TLP。Switch 对软件透明,枚举时表现为两个逻辑设备:上游桥和下游桥。
- Endpoint(EP):功能设备,如 GPU、NVMe SSD、网卡。EP 可以是 Type 0 配置头(传统 EP)或 Type 1(桥设备)。
- PCIe Bridge:用于将 PCI/PCI-X 总线连接到 PCIe 域,实现向后兼容。
注意:Switch 内部不进行数据缓存或协议转换,它只是基于地址的路由转发。所有 Endpoint 共享 RC 到主存的带宽,但彼此之间的通信可以通过 Switch 直接转发(Peer-to-Peer),无需经过 RC。
1.3.2 典型拓扑结构图
1.3.3 拓扑关键规则
- 单根树形结构:一个系统中只有一个 Root Complex,所有设备通过 Switch 或直接连接到 RC,形成以 RC 为根的树。
- 配置空间枚举:系统软件通过深度优先遍历(DFS)枚举总线树,为每个设备分配总线号、设备号和功能号(BDF)。
- 点对点通信:同一 Switch 下的两个 Endpoint 可以直接交换数据,无需经过 RC,但需要 Switch 支持地址路由。
- Lane 宽度协商:每个链路在训练阶段自动协商 Lane 宽度(x1/x2/x4/x8/x16/x32)和速率(Gen1/Gen2/Gen3/...),无需软件干预。
实际案例:在典型桌面平台中,CPU 内部集成 Root Complex 和内存控制器,第一个 PCIe x16 插槽直接连接 RC(用于 GPU),其余插槽通过 PCH(Platform Controller Hub)内部的 Switch 连接。服务器平台则可能使用独立的 PCIe Switch 芯片扩展出数十个端口。
1.3.4 组件类型与配置空间
| 组件类型 | 配置头类型 | 典型功能 | 端口方向 |
|---|---|---|---|
| Root Complex | Type 1(虚拟桥) | CPU 接口、内存映射、中断路由 | 仅下游端口 |
| Switch 上游端口 | Type 1 | 连接 RC 或上游 Switch | 上游 |
| Switch 下游端口 | Type 1 | 连接 Endpoint 或下游 Switch | 下游 |
| Endpoint | Type 0 | 功能设备(存储、网络、显示) | 仅上游端口 |
| PCIe Bridge | Type 1 | 桥接传统 PCI 总线 | 上游/下游 |
配置空间类型决定了设备在枚举过程中的行为:Type 0 头包含 6 个 Base Address Register(BAR),用于声明设备需要的内存或 I/O 地址空间;Type 1 头包含总线号寄存器和桥内存/ I/O 限制,用于描述下游子总线的地址范围。