拓扑结构

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组包/解包
虚拟通道管理
流量控制
物理层 (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