PCIe Lab

PCIe 技术查询与调试工具

交互工具

在线计算、解析和模拟,覆盖日常 PCIe 开发调试高频场景

入门路线

初学者可按以下顺序阅读,从全局认知到细节深入。

学习进度 0 / 0 页面已完成
恭喜!你已完成所有学习主题。
1

建立全局认知

先理解 PCIe 的整体软硬件架构,明确 RC、EP、Switch 的角色。

2

掌握基础概念

拓扑结构、协议分层模型、事务类型、流量控制和中断机制。

3

深入核心机制

配置空间、LTSSM 状态机、PHY 架构、错误处理、电源管理。

4

探索高级主题

Switch 路由、热插拔、SR-IOV 虚拟化、CXL、Gen6 FLIT 模式。

5

实践与工具

Linux PCIe 驱动开发、调试技巧,并用交互工具验证理解。

开发实践

Linux 下的 PCIe 驱动开发

架构概览

PCIe 软硬件架构全貌,不同开发方向的职责边界。

  • 软硬件架构全景图
  • 三大开发方向详解
  • 常见误区澄清

软件开发

三大开发方向(RC 驱动 / 设备驱动 / EP 控制器)的选择指南与技能地图。

  • 方向对比与选择
  • 各方向核心技能
  • 学习路径建议

PCI设备驱动

RC 侧设备驱动开发:Probe/Remove、DMA、MSI-X 中断、用户空间交互。

  • Linux PCI子系统
  • DMA编程(流式/一致性/S-G)
  • 中断处理(MSI/MSI-X)
  • GPU/AI加速卡驱动示例

RC驱动

RC 控制器驱动:ECAM 配置访问、设备枚举、设备树配置。

  • pci_host_bridge 结构
  • ECAM 配置访问实现
  • RC 控制器初始化流程
  • 设备树(Device Tree)

EP控制器驱动

EP 侧固件/驱动:BAR 配置、处理 RC 请求、Linux EP 子系统。

  • EP控制器配置要点
  • 处理RC请求与MSI发送
  • 常用EP控制器IP核
  • Linux PCIe EP子系统

iATU 地址翻译

RC/EP 控制器的地址翻译引擎:outbound/inbound 窗口编程与 ECAM 配合。

  • outbound / inbound 视角
  • region 寄存器模型
  • ECAM 配置窗口实战
  • BAR 入站映射与 eDMA

调试技巧

链路训练调试、均衡调试、眼图分析和 Linux 调试命令。

  • LTSSM状态机调试
  • 均衡调试(Gen3+)
  • 眼图分析技术
  • Linux调试命令

性能调优

MPS/MRRS/RCB 编程、Relaxed Ordering/No Snoop、Tag 管理与传输效率。

  • MPS/MRRS 编程与权衡
  • TLP 属性(RO/No Snoop)
  • Tag 管理与并发
  • ASPM 与性能权衡

固件与启动阶段

UEFI/BIOS 到内核的 PCIe 交接:描述表、资源声明与 ReBAR 配合。

  • ACPI MCFG 与设备树
  • _CRS / _DSM 资源声明
  • Option ROM 机制
  • Above 4G 与 Resizable BAR

NVMe 驱动走读

真实 in-tree 驱动分析:从 pci_driver 匹配到 MSI-X 多队列建立的完整流程。

  • id_table 类码匹配
  • BAR 映射与 CC 使能
  • Admin/IO 队列与 Doorbell
  • 理论到代码的对照表

常见问题 FAQ

高频调试问题与排查步骤:链路训练失败、带宽降级、AER 错误等。

  • 链路训练失败排查
  • 带宽降级与宽度不足
  • AER错误码解读
  • BAR空间与MSI-X问题

验证测试

UVM 验证、测试用例设计、仿真工具、协议分析仪和一致性测试。

  • UVM验证平台架构
  • 测试用例分类设计
  • 仿真工具(VCS/Questa)
  • 协议分析仪与一致性测试

PCIe生态系统

芯片厂商、IP 供应商、硬件测试工具、软件工具和开源项目全景。

  • IP供应商(Synopsys/Cadence)
  • 芯片厂商(Intel/AMD/ARM)
  • 硬件测试工具(LeCroy/Keysight)
  • 软件工具与开源项目