PCIe 基础知识
建立完整的知识框架
拓扑结构
PCIe采用层次化的树形拓扑结构,由Root Complex(根复合体)、Switch(交换器)、Bridge(桥接器)和Endpoint(终端设备)组成。
Root Complex
CPU与PCIe域的桥梁
Switch
多端口转发设备
Endpoint
NVMe SSD
Endpoint
网卡
Endpoint
GPU
Root Complex (RC)
Root Complex是PCIe层次结构的根节点,连接CPU/内存子系统和PCIe域。它负责:
- 发起配置访问
- 处理来自Endpoint的内存请求
- 管理中断路由
- 提供时钟和电源管理
Switch
Switch是多端口设备,用于扩展PCIe拓扑:
- 一个上游端口连接RC或其他Switch
- 多个下游端口连接Endpoint或下游Switch
- 执行路由功能,转发TLP
Endpoint
Endpoint是终端设备,可以是:
- Legacy Endpoint:传统PCI设备
- PCIe Endpoint:原生PCIe设备
- 支持Memory、I/O、配置事务
协议分层模型
PCIe协议采用分层架构,每层负责特定功能,便于实现和验证。
软件层
设备驱动程序、操作系统
事务层 (Transaction Layer)
TLP组包/解包
虚拟通道管理
流量控制
数据链路层 (Data Link Layer)
序列号管理
CRC生成/校验
Ack/Nak重传
物理层 (Physical Layer)
编码/解码
串行化/解串
链路训练
数据封装流程
1
事务层
接收上层请求,构造TLP(事务层包),添加Header和可选ECRC
2
数据链路层
添加序列号和LCRC,计算并存储重传缓冲区
3
物理层
编码、加扰、添加起始/结束帧,串行发送
事务类型
PCIe定义了多种事务类型,满足不同的访问需求。
| 类型 | 读写 | 地址空间 | 用途 |
|---|---|---|---|
| Memory | Rd/Wr | Memory空间 | 大块数据传输,最常用 |
| I/O | Rd/Wr | I/O空间 | 传统设备兼容 |
| Configuration | Rd/Wr | 配置空间 | 设备枚举和配置 |
| Message | 仅写 | 无地址 | 中断、错误报告 |
Memory事务详解
Memory事务是最常用的事务类型,支持大块数据的高效传输。
Memory Read (MRd)
- 请求者发起读请求
- 指定地址、长度、标签
- 完成者返回CplD(带数据的完成包)
- 支持拆分事务
Memory Write (MWr)
- 请求者发送数据和地址
- Posted事务,无需完成包
- 提高写入效率
- 可选原子操作
地址路由方式
地址路由
Memory/I/O事务使用64位或32位地址路由
ID路由
配置事务和部分消息使用Bus/Device/Function号路由
隐式路由
消息事务可路由到RC,无需地址信息
流量控制
PCIe采用基于信用的流量控制机制,防止发送方淹没接收方。
发送方
发送缓存
信用计数
跟踪可用信用
TLP
FC Update DLLP
接收方
接收缓存
VC0-7 各自独立
信用管理
通告可用缓冲空间
信用类型
| 信用类型 | 用途 | 单位 |
|---|---|---|
| PH (Posted Header) | Posted请求头缓存 | Header个数 |
| PB (Posted Data) | Posted数据缓存 | 数据单元(4DW) |
| NPH (Non-Posted Header) | Non-Posted请求头缓存 | Header个数 |
| NPD (Non-Posted Data) | Non-Posted数据缓存 | 数据单元 |
| CplH (Completion Header) | 完成包头缓存 | Header个数 |
| CplD (Completion Data) | 完成数据缓存 | 数据单元 |
中断机制
PCIe支持多种中断方式,从传统的INTx到现代的MSI/MSI-X。
INTx (传统中断)
与传统PCI兼容,使用INTA#/INTB#/INTC#/INTD#信号线。
- 支持4条中断线
- 多个设备可共享中断线
- 需要中断控制器仲裁
- 性能较低,现代设备很少使用
MSI (消息信号中断)
通过Memory Write TLP发送中断消息,无需专用信号线。
- 支持1-32个中断向量
- 每个向量可独立配置目标CPU
- 避免中断共享,提高性能
- 适用于大多数设备
MSI消息格式:
┌─────────────────────────────────┐
│ Address: 0xFEExxxxx │
│ Data: Vector | CPU ID | etc │
└─────────────────────────────────┘
MSI-X (增强型MSI)
MSI的增强版本,支持更多向量和更灵活的配置。
- 支持最多2048个向量
- 每个向量独立地址/数据
- 向量配置存储在设备内存
- 支持动态向量掩码
适用于高性能设备:NVMe SSD、高速网卡等
错误处理
PCIe定义了完善的错误检测、报告和恢复机制。
错误类型
可纠正错误
- 物理层错误(8b/10b或扰码错误)
- Replay Timer超时
- Replay Number溢出
- Bad TLP
- Bad DLLP
不可纠正错误
- 训练序列错误
- 数据链路层协议错误
- 中毒TLP (Poisoned TLP)
- 流量控制协议错误
- 完成超时
- 意外完成
AER (高级错误报告)
PCIe扩展能力,提供详细的错误诊断信息。
AER Capability
0x140起始
Uncorrectable Error Status
记录发生的不可纠正错误
Uncorrectable Error Mask
屏蔽特定错误报告
Correctable Error Status
记录发生的可纠正错误
Header Log
记录错误TLP的Header