myFPGA.com.cnFPGA 技术与产业观察
← 返回栏目

FPGA PCIe 数据传输入门:MMIO、DMA 与基础调试

myfpga.com.cn 编辑部 · 2026-10-05

PCIe 设备被主机识别后,还需要让软件、传输引擎和 FPGA 应用逻辑协同工作。本文以主机连接 FPGA Endpoint 的常见场景说明 MMIO、DMA 与调试路径;不规定某家 IP 的通道数量、地址格式或性能。

MMIO:用地址访问设备窗口

MMIO(Memory-Mapped I/O)让主机通过映射的设备地址访问寄存器或存储窗口。对于内存类型 BAR,驱动管理资源映射,软件按规定的偏移进行读写。常见用途是读取状态、设置参数、发起任务及查询完成情况。

例如,一个自行设计的控制窗口可以约定:

示例偏移 含义 访问约定
0x00 版本寄存器 只读、无副作用
0x04 控制寄存器 写入规定命令
0x08 状态寄存器 按文档读取状态

这是用于解释地址映射的假设示例,不是 AMD、Intel 或任何实际板卡的寄存器表。访问宽度、对齐、字节序和副作用也应写入接口文档。MMIO 不等于普通 RAM 访问,不能用普通内存读写的假设替代操作系统规定的 I/O 访问及顺序规则。

AMD PG195 地址映射说明展示了具体子系统中不同寄存器和访问窗口的关系;使用其他 IP 时,需要重新核对映射。

DMA:让传输引擎搬运数据

DMA(Direct Memory Access)通常由软件准备缓冲区、传输信息及完成处理,再由传输引擎执行搬运,减少处理器逐笔进行数据搬运的工作。它并不消除驱动,也不保证任意负载下都比 MMIO 更快。

以常见方向为例:H2C/H2D 表示主机到卡/设备,C2H/D2H 表示反向。描述符可包含传输地址、长度及控制字段,但具体字段与地址空间依 IP 而定。AMD 描述符说明和 Intel 多通道 DMA 指南提供不同实现的参考,不能混用两者的描述符格式。

一个概念流程是:

软件准备缓冲区及 DMA 映射
  → 提交地址、长度与描述符/队列
  → 传输引擎执行主机与设备间的数据搬运
  → 软件依据完成状态或中断确认结果
  → 校验数据,再按驱动规则复用或释放缓冲区

主机虚拟地址、设备可使用的 DMA 地址与 FPGA 内部地址属于不同层次。存在 IOMMU 时还可能涉及地址转换;应使用驱动与操作系统提供的 DMA 映射方法,不能把用户进程指针直接写入描述符。缓冲区在传输完成前保持有效,缓存一致性、访问权限和同步按平台规则处理。

主机软件与 FPGA 逻辑要约定什么

软件负责识别设备、映射资源、管理缓冲区、提交工作、处理完成与错误,并安排停止及恢复流程。FPGA 侧负责接受正确格式的控制、提供数据或消费数据,并将状态反馈给软件。双方至少需要约定:

PCIe 链路已建立不代表 DMA 已使能,DMA 引擎报告完成也不自动说明业务数据正确。设备发起主机内存事务的使能、驱动权限和地址映射均需配合。厂商示例驱动适合学习某一 IP 的接口,例如 AMD Linux 驱动说明,不应假定它支持另一家 IP 或任意内核版本。

调试路径:先分层,再增加复杂度

  1. 链路与枚举:确认时钟、复位、LTSSM、实际宽度/速率及设备身份。Linux 下可用 lspci -nn 查看设备,用 lspci -vv -s <BDF> 查看选定设备信息;BDF 是实际总线/设备/功能号占位,字段与权限依系统而定。
  2. BAR 与 MMIO:核对资源分配、驱动绑定和版本寄存器。先访问已定义、无副作用的寄存器,再检查可写测试项;不要盲目写未知偏移。
  3. 最小 DMA 事务:在 IP 允许的长度和对齐条件下,只提交一笔有已知数据的传输。记录地址、长度、方向和完成状态。
  4. 定位停顿或错误:结合驱动日志、描述符状态及片上探针,区分主机请求未提交、地址错误、传输错误、FPGA 数据路径反压及完成通知异常。
  5. 数据与恢复:按预期模式或编号校验内容,再逐步增加事务数量,验证连续传输、停止、复位和重新初始化。

具体信号及排查项可参阅 AMD DMA 子系统初始调试指南。片上观察不能替代板级信号质量检查,也不能靠一张波形证明所有链路条件稳定。

若测试吞吐率,记录主机平台、实际链路配置、IP/驱动版本、方向、数据量和计时边界,并区分有效载荷与协议开销。不要把标称链路速率当作业务吞吐率,也不要把某次结果推广成器件保证值。

服务器板卡测试中的记录与边界

服务器上的 FPGA 扩展卡测试还受插槽连接、系统启动、供电和软件环境影响。建议把枚举、MMIO、DMA 数据校验及恢复测试分开记录,关联板卡标识、主机配置和测试版本;一次 DMA 通过不代表整机测试或 PCIe 合规认证完成。

作为系统级测试背景,iTest Group AI Server Test 页面介绍服务器主板、高速接口、电源及测试数据追溯等范围,可帮助理解局部接口测试如何纳入整板流程;它不是本文 PCIe 协议依据,也不用于证明某款 FPGA 的性能或支持能力。

主线延伸阅读

信息来源