芯片开发学习笔记·二十四——PCIe(PCI Express)

一、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
  • 负责 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 工作流程

  1. 初始化时,接收端通过 InitFC DLLP 告知可用信用

  2. 发送端每发一个 TLP,消耗对应信用

  3. 接收端处理完 TLP 后,通过 UpdateFC DLLP 归还信用

  4. 发送端无信用时,必须阻塞发送

    发送端 接收端
    │──── 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 官方规范

本文档由工作区知识整理助手生成,如有疑问欢迎随时补充或修正。

相关推荐
化屾为海2 小时前
FPGA CP测试
fpga开发
何如呢3 小时前
ROM查表法实现UW
fpga开发
碎碎思4 小时前
FPGA图像处理平台搭建:MIPI + VDMA + Ethernet全流程
图像处理·人工智能·fpga开发
希言自然也17 小时前
赛灵思KU系列FPGA的EFUSE/BBRAM加密操作
fpga开发
Terasic友晶科技20 小时前
答疑解惑 | DE25-Nano开发板Uboot阶段与FPGA外设交互失败
fpga开发·led·uboot·de25-nano·terasic
雨霁初曦21 小时前
VHDL设计-基于四状态Moore型状态机
fpga开发
liuluyang5301 天前
clk_mux_seq sv改进
fpga开发·uvm
cmc10281 天前
222.ila窗口不出来----如果ad9361相连的rx_data_clk_in_p没有接匹配电阻,出来的时钟会不会很差,导致ila不正常工作呀
fpga开发
ALINX技术博客1 天前
【黑金云课堂】FPGA技术教程Vitis开发:RTC中断讲解
单片机·嵌入式硬件·fpga开发