一、PCIe 基础概述
1.1 什么是 PCIe
PCIe(Peripheral Component Interconnect Express)是一种高速串行计算机扩展总线标准,用于连接主机处理器与外围设备(如GPU、NVMe SSD、网卡等)。相比并行总线 PCI/PCI-X,PCIe 采用点对点串行差分信号,具有更高带宽、更低延迟和更好的可扩展性。
1.2 协议版本对比
| 版本 | 发布年份 | 单通道速率 | x16 带宽(双向) | 编码方式 |
|---|---|---|---|---|
| PCIe 1.0 | 2003 | 2.5 GT/s | 8 GB/s | 8b/10b |
| PCIe 2.0 | 2007 | 5.0 GT/s | 16 GB/s | 8b/10b |
| PCIe 3.0 | 2010 | 8.0 GT/s | 32 GB/s | 128b/130b |
| PCIe 4.0 | 2017 | 16.0 GT/s | 64 GB/s | 128b/130b |
| PCIe 5.0 | 2019 | 32.0 GT/s | 128 GB/s | 128b/130b |
| PCIe 6.0 | 2022 | 64.0 GT/s | 256 GB/s | PAM4 + FLIT |
注意:PCIe 6.0 引入 PAM4 调制和 FLIT(Flow Control Unit)模式,是架构上的重大变化。
1.3 通道(Lane)配置
-
Lane:一条 PCIe 通道 = 一对差分发送线 + 一对差分接收线(共 4 根信号线)
-
常见宽度:x1、x2、x4、x8、x16
-
Link:由一条或多条 Lane 组成的物理连接
-
支持通道降级(Lane Negotiation):设备协商后可以降宽运行
Host (RC) ←------ Link (x16) ------→ Device (EP)
Lane 0 ~ Lane 15
二、PCIe 拓扑结构
2.1 组件角色
| 组件 | 全称 | 作用 |
|---|---|---|
| RC | Root Complex | 连接 CPU 与 PCIe 树的根节点,通常集成在 SoC 内 |
| EP | Endpoint | 终端设备(如 GPU、NIC、SSD) |
| Switch | PCIe Switch | 扩展 PCIe 拓扑,具备上行(Upstream)和多个下行(Downstream)端口 |
| Bridge | PCIe-PCI Bridge | 连接旧版 PCI 设备 |
| RP | Root Port | RC 上连接子拓扑的端口 |
2.2 拓扑示意图
CPU
|
Root Complex (RC)
/ | \
RP1 RP2 RP3
| | |
EP-A Switch EP-C
/ \
EP-B EP-D
2.3 总线编号
- Bus Number(8 bit):最多 256 条总线
- Device Number(5 bit):每条总线最多 32 个设备
- Function Number(3 bit):每个设备最多 8 个功能
- BDF 地址 = Bus:Device.Function(如
0000:01:00.0)
三、PCIe 分层架构
PCIe 协议栈分为三层,类比 OSI 网络模型:
┌────────────────────────────────┐
│ 软件层(驱动 / OS) │
├────────────────────────────────┤
│ Transaction Layer(事务层) │ ← TLP(事务层包)
├────────────────────────────────┤
│ Data Link Layer(数据链路层) │ ← DLLP(数据链路层包)
├────────────────────────────────┤
│ Physical Layer(物理层) │ ← 有序集、符号、电气信号
└────────────────────────────────┘
3.1 事务层(Transaction Layer)
TLP(Transaction Layer Packet)结构
┌──────────┬──────────┬──────────┬──────────┐
│ Header │ Data │ ECRC │ (Digest) │
│ 3~4 DW │ 0~1024DW │ 1 DW │ optional │
└──────────┴──────────┴──────────┴──────────┘
TLP 类型
| 类型 | 缩写 | 说明 |
|---|---|---|
| Memory Read | MRd | 读取内存空间 |
| Memory Write | MWr | 写入内存空间(Posted,无需应答) |
| I/O Read/Write | IORd / IOWr | 访问 I/O 空间(Non-Posted) |
| Config Read/Write | CfgRd / CfgWr | 访问配置空间 |
| Completion | Cpl / CplD | 对 Non-Posted 请求的响应 |
| Message | Msg | 中断、电源管理等控制报文 |
Posted vs Non-Posted
| 类型 | 是否需要 Completion | 举例 |
|---|---|---|
| Posted | 否 | Memory Write、Message |
| Non-Posted | 是(需等 Cpl) | Memory Read、I/O Read/Write、Config R/W |
3.2 数据链路层(Data Link Layer)
- 负责 TLP 的可靠传输
- 功能:
- 序列号(Sequence Number):12-bit,标识每个 TLP
- CRC 校验(LCRC):32-bit CRC,覆盖 Header + Data
- ACK/NAK 协议:接收方发送 DLLP 确认/否认
- 重传(Replay Buffer):发送方保存 TLP 副本直到收到 ACK
DLLP 类型
| DLLP 类型 | 说明 |
|---|---|
| Ack | 确认 TLP 已正确接收 |
| Nak | 通知发送方重传 |
| UpdateFC | 流量控制信用更新 |
| PM_xxx | 电源管理相关 |
3.3 物理层(Physical Layer)
编码方式
| 版本 | 编码 | 开销 | 说明 |
|---|---|---|---|
| PCIe 1.x/2.x | 8b/10b | 20% | 每 8 位数据编为 10 位,内嵌时钟 |
| PCIe 3.x/4.x/5.x | 128b/130b | ~1.5% | 效率更高,加扰(Scrambling)替代 DC 平衡 |
| PCIe 6.0 | PAM4 + FLIT | - | 4 电平调制,每符号传 2 bit |
有序集(Ordered Set)
- TS1/TS2:链路训练有序集,用于速率/宽度协商
- SOS(Skip Ordered Set):补偿时钟差异
- FTS(Fast Training Sequence):从低功耗状态快速退出
四、链路训练与状态机(LTSSM)
LTSSM(Link Training and Status State Machine)控制 PCIe 链路的初始化、配置和维护。
4.1 主要状态
Detect → Polling → Configuration → Recovery → L0(正常工作)
↓
L0s / L1 / L2(低功耗状态)
| 状态 | 描述 |
|---|---|
| Detect | 检测物理连接是否存在 |
| Polling | 位同步,完成电气空闲退出 |
| Configuration | 协商 Lane 数、Link 编号 |
| L0 | 正常工作状态 |
| L0s | 快速休眠,短延迟恢复 |
| L1 | 深度休眠,节省功耗 |
| L2 | 主电源关闭,仅辅助电源在线 |
| Recovery | 链路重新训练(速率变化/错误恢复) |
五、流量控制(Flow Control)
PCIe 使用**基于信用(Credit-Based)**的流量控制机制,防止接收端缓冲区溢出。
5.1 信用类型
| 维度 | 说明 |
|---|---|
| Posted(P) | Posted 请求(MWr 等) |
| Non-Posted(NP) | Non-Posted 请求(MRd、CfgRd 等) |
| Completion(Cpl) | Completion 包 |
每种类型分别有Header Credit(H)和Data Credit(D):
- 1 个 Header Credit = 1 个 TLP Header
- 1 个 Data Credit = 4 字节数据(1 DW)
5.2 工作流程
-
初始化时,接收端通过
InitFCDLLP 告知可用信用 -
发送端每发一个 TLP,消耗对应信用
-
接收端处理完 TLP 后,通过
UpdateFCDLLP 归还信用 -
发送端无信用时,必须阻塞发送
发送端 接收端
│──── InitFC1 (P,NP,Cpl) ──→│
│←─── InitFC2 (P,NP,Cpl) ───│
│──── 发送 TLP(消耗信用) ──→│
│←─── UpdateFC(归还信用) ───│
六、配置空间
6.1 访问方式
- Type 0 Config:访问本总线上的设备(无需 Bridge 转发)
- Type 1 Config:访问下游总线的设备(需经 Switch/Bridge 转发)
6.2 配置寄存器空间
| 空间 | 大小 | 说明 |
|---|---|---|
| Legacy PCI Header | 64 B | Vendor ID、Device ID、BAR、Class Code 等 |
| Extended Capability | 192 B | PCI 2.x 兼容扩展能力 |
| PCIe Extended Space | 4096 B 总 - 256 B | PCIe 专属扩展能力(AER、PASID 等) |
6.3 重要寄存器字段
| 字段 | 含义 |
|---|---|
| Vendor ID | 厂商标识(如 Intel=0x8086) |
| Device ID | 设备标识 |
| BAR(Base Address Register) | 映射设备内存/IO 空间 |
| Capability Pointer | 能力链表首地址 |
| MSI/MSI-X Capability | 消息中断配置 |
| Power Management Capability | 电源管理 |
| AER(Advanced Error Reporting) | 高级错误上报 |
七、中断机制
| 中断类型 | 说明 |
|---|---|
| INTx(Legacy Interrupt) | 模拟传统 PCI 引脚中断,通过 Message TLP 模拟 Assert/Deassert |
| MSI(Message Signaled Interrupt) | 写内存触发中断,最多 32 个向量 |
| MSI-X | MSI 扩展版,最多 2048 个向量,支持独立屏蔽 |
现代 SoC 和驱动优先使用 MSI-X,性能最优。
八、PCIe 错误处理
8.1 错误分类
| 类型 | 严重程度 | 举例 |
|---|---|---|
| Correctable Error | 可纠正 | 接收端 ECRC 检测到单比特翻转,自动重传修复 |
| Non-Fatal Uncorrectable | 不可纠正但不致命 | Completion Timeout,链路可继续工作 |
| Fatal Uncorrectable | 致命,需复位 | Data Link Protocol Error,链路必须复位 |
8.2 AER(Advanced Error Reporting)
- 通过 PCIe 扩展能力寄存器上报详细错误信息
- 支持错误注入(Error Injection)用于验证
- 错误通过 ERR_COR / ERR_NONFATAL / ERR_FATAL Message TLP 上报到 RC
九、电源管理
9.1 ASPM(Active State Power Management)
| 状态 | 说明 | 恢复延迟 |
|---|---|---|
| L0 | 正常运行 | --- |
| L0s | 单方向 PHY 进入电气空闲 | < 1 μs |
| L1 | 双方向 PHY 进入低功耗 | < 10 μs |
| L1.1 | CLKREQ 拉低,关闭参考时钟 | < 4 μs |
| L1.2 | 更深层低功耗(PCIe 3.1+) | < 4 μs |
9.2 D-State(设备电源状态)
- D0:全功率运行
- D1/D2:中间状态(非所有设备支持)
- D3hot:设备关闭,辅助电源保留,可通过 PME 唤醒
- D3cold:辅助电源也关闭
十、PCIe 在芯片设计中的应用
10.1 PCIe IP 核
| 类型 | 典型用法 |
|---|---|
| PCIe PHY | 实现物理层差分信号收发,通常为 Hardmacro |
| PCIe Controller | 实现数据链路层+事务层,通常为软核或固核 |
| DMA Engine | 搭配 PCIe Controller 实现高效数据搬运 |
常用商业 IP 供应商:Synopsys DesignWare、Cadence PHY/Controller、Xilinx/AMD PCIP、Intel HSSI。
10.2 SoC 集成要点
CPU Core
│
AXI/CHI Interconnect
│
PCIe Controller (AXI Master/Slave)
│
PCIe PHY
│
PCIe Connector / M.2 / CXL
- PCIe Controller 通常以 AXI 接口挂接到 SoC 总线
- 需配置 BAR 映射 、中断路由(MSI → GIC)
- 注意 地址空间分配(ECAM 空间、MMIO 空间)
10.3 综合约束要点
tcl
# PCIe 参考时钟约束(100 MHz)
create_clock -name pcie_refclk -period 10.0 [get_ports PCIE_REFCLK_P]
# PHY 恢复时钟(通常由 PHY 输出,250 MHz for PCIe Gen3 x1)
create_clock -name pipe_clk -period 4.0 [get_nets u_pcie_phy/pipe_clk]
# 异步时钟域隔离
set_clock_groups -asynchronous \
-group [get_clocks pcie_refclk] \
-group [get_clocks sys_clk]
# 跨时钟域路径(若有同步器)
set_max_delay -datapath_only 4.0 \
-from [get_cells u_sync_reg_A/data_reg*] \
-to [get_cells u_sync_reg_B/data_reg*]
10.4 验证要点
| 验证项 | 方法 |
|---|---|
| 链路训练(LTSSM) | 仿真 LTSSM 状态机行为 |
| TLP 发送/接收 | 基于 PCIe VIP(Synopsys/Cadence)进行功能验证 |
| 流量控制 | 注入流控边界场景(信用为 0、大量 MWr) |
| 错误注入 | 利用 AER 错误注入验证错误处理路径 |
| 电源管理 | 验证 ASPM L1/L2 进入退出时序 |
十一、CXL(Compute Express Link)简介
CXL 是基于 PCIe 物理层的新一代互联协议(PCIe 5.0 PHY),专为 CPU-加速器-内存互联设计:
| 协议 | 用途 |
|---|---|
| CXL.io | 等同于 PCIe I/O 语义,设备发现、配置 |
| CXL.cache | 加速器访问 Host 内存,支持 Cache Coherency |
| CXL.mem | Host 访问设备端内存(Memory Expansion) |
CXL 是 AI 芯片、HBM 内存扩展、数据中心互联的重要技术方向。
十二、常用术语速查
| 术语 | 全称/含义 |
|---|---|
| TLP | Transaction Layer Packet,事务层数据包 |
| DLLP | Data Link Layer Packet,数据链路层包 |
| LTSSM | Link Training and Status State Machine |
| BAR | Base Address Register,基地址寄存器 |
| MSI-X | Message Signaled Interrupt Extended |
| ASPM | Active State Power Management |
| AER | Advanced Error Reporting |
| ECRC | End-to-End CRC,端到端 CRC |
| LCRC | Link CRC,链路 CRC(数据链路层) |
| GT/s | Giga Transfers per second,每秒十亿次传输 |
| PAM4 | Pulse Amplitude Modulation 4-level |
| FLIT | Flow Control Unit(PCIe 6.0 引入) |
| RC | Root Complex |
| EP | Endpoint |
| RP | Root Port |
| CXL | Compute Express Link |
参考资料
- PCI Express Base Specification(最新版 Rev 6.0),PCI-SIG 官方文档
- PCI Express Technology(MindShare Press)
- Synopsys DesignWare PCIe IP 技术白皮书
- IEEE 802.3 / CXL Consortium 官方规范
本文档由工作区知识整理助手生成,如有疑问欢迎随时补充或修正。