1. PCIe 概述:总线架构、拓扑结构与分层模型

PCI Express(PCIe)作为第三代高性能 I/O 互连标准,采用点对点串行差分信号替代传统并行总线,从根本上解决了并行总线在高速下的信号同步与扇出限制。本章从架构、拓扑与分层三个维度建立 PCIe 系统的完整认知,为后续 BAR 空间、中断与驱动兼容性设计奠定基础。

1.1 PCIe 总线架构核心特征

特征 传统 PCI PCI Express
互连方式 共享并行总线 点对点串行差分对
数据传输 半双工,共享带宽 全双工,独立通道
时钟方案 同步共享时钟 内嵌时钟(8b/10b 或 128b/130b)
拓扑灵活性 总线型,设备数受限 交换型,可扩展性强
热插拔支持 有限 原生支持(Native Hot-Plug)
关键指标:PCIe 4.0 单 Lane 速率 16 GT/s,x16 链路双向带宽约 64 GB/s;PCIe 5.0 提升至 32 GT/s,x16 双向带宽约 128 GB/s。

1.2 拓扑结构:树形交换网络

PCIe 拓扑由 Root Complex(RC)、Switch、Endpoint(EP) 和 Bridge 四类组件构成,形成以 RC 为根的树形结构。

  • Root Complex(RC):CPU 与内存子系统到 PCIe 域的桥梁,通常集成在 SoC 或芯片组中。RC 负责生成配置事务、管理中断路由、处理地址转换。
  • Switch:由上游端口(Upstream Port)和多个下游端口(Downstream Port)组成,负责数据包的路由转发。Switch 内部包含一个虚拟的 PCI-PCI 桥。
  • Endpoint(EP):功能设备,如 GPU、NVMe SSD、网卡。EP 可以是传统 PCI 功能(Legacy EP)或 PCIe 原生功能(Native EP)。
  • Bridge:用于连接其他总线标准(如 PCI、PCI-X),实现协议转换。
PCIe 树形拓扑结构 Root Complex (RC) Switch Endpoint (GPU) Endpoint (NVMe) Endpoint (NIC) PCIe-to-PCI Bridge 每个 Switch 下游端口对应一个独立的 PCIe 域(Bus Number),支持层次化地址路由
拓扑要点:PCIe 拓扑中每个设备拥有唯一的 Bus:Device.Function(BDF)编号。RC 通过配置事务枚举整个树,分配总线号与内存地址空间。

1.3 分层模型:事务层、数据链路层、物理层

PCIe 协议栈采用分层架构,从高到低依次为:事务层(Transaction Layer)、数据链路层(Data Link Layer)、物理层(Physical Layer)。每一层对上层提供服务,对下层封装数据。

1.3.1 事务层(Transaction Layer)

  • 核心职责:生成与解析 TLP(Transaction Layer Packet),处理内存、I/O、配置、消息四种事务类型。
  • 关键机制:流量控制(Flow Control)、事务排序(Transaction Ordering)、虚拟通道(VC)管理。
  • 地址空间:Memory Space(BAR 映射)、I/O Space(传统兼容)、Configuration Space(设备枚举)、Message Space(中断、电源管理)。

1.3.2 数据链路层(Data Link Layer)

  • 核心职责:保证 TLP 在链路上的可靠传输,处理 DLLP(Data Link Layer Packet)。
  • 关键机制:CRC 校验(LCRC)、ACK/NAK 重传、链路状态管理(LTSSM 子集)。
  • 数据完整性:每笔 TLP 附加序列号(Sequence Number)与 LCRC,接收方校验后回复 ACK/NAK。

1.3.3 物理层(Physical Layer)

  • 核心职责:串行/解串(SerDes)、8b/10b 或 128b/130b 编码、链路训练与初始化。
  • 子层划分:逻辑子层(Ordered Set、链路训练状态机 LTSSM)与电气子层(差分信号、阻抗匹配)。
  • 链路宽度:支持 x1、x2、x4、x8、x12、x16、x32,通过 Lane 协商确定。
PCIe 分层模型与数据流 事务层 (Transaction Layer) TLP 生成 / 解析 · 事务排序 · 流量控制 · 虚拟通道 数据链路层 (Data Link Layer) DLLP 处理 · 序列号 + LCRC · ACK/NAK 重传 · 链路管理 物理层 (Physical Layer) SerDes · 8b/10b 编码 · LTSSM · Lane 协商 · 差分信号 数据流:软件 → 事务层 → 数据链路层 → 物理层 → 链路 → 对端物理层 → 数据链路层 → 事务层

1.4 分层模型与驱动开发的关联

驱动开发关注点 对应分层 关键操作
BAR 地址映射 事务层(Memory Space) 读取 BAR 寄存器,ioremap() 建立虚拟地址映射
中断处理(MSI/MSI-X) 事务层(Message Space) 配置 MSI Capability,注册中断处理函数
DMA 传输 事务层 + 数据链路层 描述符提交,TLP 拆分与重传由硬件自动完成
链路状态检测 物理层 + 数据链路层 读取 Link Status 寄存器,处理链路降宽/错误
错误处理(AER) 跨层(事务层/数据链路层/物理层) 解析 Advanced Error Reporting 寄存器
驱动兼容性陷阱:不同厂商的 PCIe 控制器在事务层排序模型(Relaxed Ordering、ID-Based Ordering)上存在差异。驱动开发时不能假设所有 EP 都遵循严格的强排序模型,必须通过 Capability 寄存器确认。

1.5 本章小结

  • PCIe 采用点对点串行差分与交换拓扑,彻底解决了并行总线的带宽与扩展瓶颈。
  • 拓扑由 RC → Switch → EP 构成树形结构,每个设备通过 BDF 唯一标识。
  • 分层模型将协议栈分为事务层、数据链路层、物理层,层间通过 TLP/DLLP/Ordered Set 通信。
  • 驱动开发的核心接口(BAR 映射、中断注册、DMA 提交)均直接与事务层交互,但链路可靠性与错误处理依赖下层机制。