1. PCIe基础回顾

在深入TLP报文与DMA传输之前,必须牢固掌握PCIe的拓扑结构、角色定义与分层模型。本章作为全课程的基石,将用最精炼的方式重建这些核心概念。

1.1 PCIe拓扑结构

PCIe采用点对点串行互连的树形拓扑,取代了传统PCI的共享并行总线。每个设备通过独立的Lane(通道)与交换器(Switch)或Root Complex直接连接,不再共享带宽。

关键特征: 点对点连接、串行差分信号、多Lane捆绑(×1、×4、×8、×16)、基于包的传输。

下图展示了典型的PCIe系统拓扑结构:

PCIe 典型拓扑结构 Root Complex (RC) CPU 系统内存 PCIe Switch Endpoint (EP1) Endpoint (EP2) Endpoint (EP3) PCIe/PCI 桥 传统PCI设备 Root Complex Switch Endpoint 桥接设备
拓扑要点: 所有通信必须经过 Root Complex 或 Switch。Endpoint 之间不能直接通信,必须通过 Switch 转发。这种设计保证了系统的可扩展性和隔离性。

1.2 Root Complex 与 Endpoint 角色

角色 功能描述 典型设备 TLP 处理能力
Root Complex (RC) 连接 CPU/内存与 PCIe 域,是层次结构的根节点。负责地址转换、中断路由、错误处理。 CPU 内部集成 RC、芯片组 完全支持所有 TLP 类型(Mem、IO、Cfg、Msg)
Endpoint (EP) 功能设备,作为 PCIe 总线上的最终节点。发起或响应 TLP 事务。 NVMe SSD、GPU、网卡、FPGA 加速卡 通常支持 Mem 和 Msg TLP,部分支持 IO/Cfg
Switch 扩展 PCIe 端口数量,透明转发 TLP。对软件不可见。 PCIe 交换芯片 转发所有 TLP,不修改内容
Bridge 连接 PCIe 与传统 PCI 总线,进行协议转换。 PCIe-to-PCI 桥接芯片 转换 TLP 与 PCI 总线周期
驱动开发注意: Endpoint 驱动通常不需要关心 RC 内部实现,但必须理解 RC 对 Mem 空间的映射方式。在 DMA 传输中,RC 负责将物理地址转换为 PCIe 总线地址,这是驱动配置 DMA 的关键。

1.3 PCIe 总线分层模型

PCIe 采用三层分层架构,从下到上依次为:物理层、数据链路层、事务层。每一层都有明确的职责和协议边界。

PCIe 总线分层模型 事务层 (Transaction Layer) 生成/解析 TLP · 事务排序 · 流量分类 (VC) 数据链路层 (Data Link Layer) DLLP · CRC 校验 · Ack/Nak 重传 · 链路管理 物理层 (Physical Layer) 8b/10b 或 128b/130b 编码 · 串行化/解串 · 电气特性 TLP 双向流 核心原则:上层不关心下层实现细节,层间通过标准化接口交互

1.3.1 事务层 (Transaction Layer)

事务层是驱动开发最常打交道的层次。它负责:

  • TLP 封装与解析: 将 CPU 的内存读写请求封装为 Memory Read/Write TLP,或将 IO/配置请求封装为对应 TLP。
  • 事务排序: 遵循 PCIe 排序规则(Strongly-Ordered / Relaxed-Ordering),保证数据一致性。
  • 虚拟通道 (VC): 支持最多 8 个虚拟通道,实现流量隔离与 QoS。
驱动视角: 驱动通过 MMIO 访问设备寄存器时,事务层自动生成 Memory TLP。驱动配置 DMA 描述符时,实际上是在构造 TLP 的地址、长度、属性字段。

1.3.2 数据链路层 (Data Link Layer)

数据链路层为事务层提供可靠传输保障:

  • CRC 校验: 为每个 TLP 附加 32 位 LCRC,接收端校验。
  • Ack/Nak 重传: 接收端返回 Ack DLLP 确认,Nak 触发重传。
  • 链路管理: 链路训练、电源状态管理(L0s/L1/L2)。
DLLP 类型 功能 长度
Ack 确认 TLP 正确接收 6 字节
Nak 请求 TLP 重传 6 字节
PM_Enter_L1 进入 L1 低功耗状态 6 字节
InitFC1/InitFC2 初始化流量控制 6 字节

1.3.3 物理层 (Physical Layer)

物理层负责比特传输,分为逻辑子层和电气子层:

  • 逻辑子层: 8b/10b 编码(Gen1/Gen2)或 128b/130b 编码(Gen3+),加扰、去扰。
  • 电气子层: 差分信号驱动、接收均衡、时钟恢复。
  • 链路训练: 上电时自动协商速率和宽度(Link Training & Status State Machine, LTSSM)。
性能指标: 每条 Lane 的原始速率:Gen1 = 2.5 GT/s,Gen2 = 5 GT/s,Gen3 = 8 GT/s,Gen4 = 16 GT/s,Gen5 = 32 GT/s。有效带宽需扣除编码开销(Gen1/2 约 20%,Gen3+ 约 1.5%)。

1.4 分层模型与 TLP 的关系

理解分层模型对 TLP 报文处理至关重要。下图展示了一个 Memory Write TLP 在发送端的封装过程:

TLP 封装过程(发送端) 事务层 构造 TLP:Header + Data Payload + Digest (ECRC) 数据链路层 添加 Sequence Number + LCRC → 封装为 DLLP 物理层 编码 → 加扰 → 串行化 → 差分信号发送 接收端反向操作:物理层解串 → 数据链路层校验 → 事务层解析 TLP
驱动开发核心认知: 驱动只与事务层交互(通过 MMIO、DMA 描述符)。数据链路层和物理层的可靠性由硬件自动保证,驱动无需干预。但理解底层机制有助于调试链路问题(如 CRC 错误、链路降速)。

1.5 本章小结

  • PCIe 拓扑是树形点对点结构,RC 是根节点,EP 是功能设备。
  • RC 负责地址映射和中断路由,EP 驱动必须正确配置 DMA 地址。
  • 三层模型(事务层、数据链路层、物理层)各司其职,驱动开发聚焦事务层。
  • TLP 是事务层的基本数据单元,后续章节将深入其格式与传输机制。