FPGA XDMA VS MMIO
2026/6/23 2:30:24 网站建设 项目流程

PCIe XDMA vs BAR 直接映射(MMIO)速度结论

一句话总览

  1. 大块连续数据流(采集 / 回放 / 图像):XDMA 远快于 BAR 直接映射,带宽接近 PCIe 物理极限、CPU 占用极低;
  2. 极小数据包(寄存器读写、几字节控制指令):BAR MMIO 延迟更低、更快
  3. 读操作差距极大:BAR 读往返延迟高,XDMA 批量读碾压 MMIO。

一、两种方式底层原理

1. BAR 直接映射(MMIO/PIO)

把 FPGA 内部寄存器 / 片上 RAM 映射到主机虚拟地址,CPU 主动发起读写

  • 写:CPU store → PCIe MemWr Posted TLP,无需回复;
  • 读:CPU load → PCIe MemRd → FPGA 返回 CplD 完成包,CPU 阻塞等待往返;
  • 本质:CPU 逐字节 / 逐 Burst 搬运数据,每一笔访问都占用 CPU 流水线;
  • 内存属性:必须nocache/wc写合并,CPU 缓存失效,单次访问开销大。

2. XDMA(SG-DMA)

FPGA 内置硬件 DMA 引擎,绕过 CPU 直接访问主机系统内存

  1. CPU 仅下发描述符(源地址、长度、方向);
  2. FPGA 硬件自主发起 PCIe 读写大块数据;
  3. 传输完成仅发一次 MSI 中断通知 CPU;
  4. 支持分散聚集 SG,无需连续物理内存,大 Burst 打包,PCIe 链路利用率拉满。

二、核心性能对比(PCIe Gen3 x8 实测典型值)

表格

维度BAR 直接映射 (MMIO)XDMA SG-DMA
峰值带宽300~800MB/s,CPU 瓶颈,无法跑满 PCIe3.2~3.6GB/s,逼近 PCIe 理论上限 (4GB/s 单向)
CPU 占用极高(循环读写占用单核 100%)极低(<5%,仅下发描述符)
单次延迟 (小包)写~200ns;读~800~1200ns(往返)初始化描述符开销~1~3μs,小包吃亏
大块吞吐量延迟累积延迟极高,CPU 循环拖慢整体硬件流水线搬运,稳定低抖动
读性能极差,每笔读都等返回包,带宽暴跌批量读硬件预取,读写对称带宽
适用传输长度≤1KB 寄存器、少量控制命令≥4KB,MB/GB 级连续数据流(雷达 / 图像 / 采集)
零拷贝能力FPGA 侧内存有限,无法主机 DDR 直传完全零拷贝,FPGA ↔ 主机 DDR 直连

三、分场景详细速度分析

场景 1:大数据块(1MB+,最常用采集场景)

XDMA 速度是 BAR 映射的 4~10 倍

  • BAR 映射:CPU 循环 memcpy/AVX 写 MMIO 地址,每次写都触发 PCIe 小包 TLP,总线碎片化;CPU 持续占用,内存屏障、TLB 失效持续拖慢速度;
  • XDMA:硬件自动组超大 Burst TLP,填满 PCIe 链路;CPU 只需要一次 ioctl 下发任务,后台 DMA 并行传输,无 CPU 拷贝开销。 实测:Gen3 x8 传输 1GB 数据
  • BAR MMIO:约 1.2~1.8s
  • XDMA:0.25~0.3s

场景 2:极小数据包(1~64 字节,寄存器控制)

BAR MMIO 更快XDMA 需要配置 DMA 描述符、队列、中断,初始化开销远大于直接 MMIO 单次访问; 比如读写 32bit 状态寄存器,MMIO 仅几百 ns,XDMA 要微秒级启动开销。

场景 3:读操作(FPGA→主机取数据)

差距被放大:

  • BAR 读:每一次 load 都要等 PCIe 往返完成包,流水线阻塞,带宽甚至不足 100MB/s;
  • XDMA 读:硬件批量预取,一次描述符拉取整段内存,读写带宽几乎持平。

场景 4:非连续内存(零散 buffer)

XDMA 优势巨大:支持 SG 分散聚集,多段内存一次传输; BAR 映射只能连续访问,多段数据需要 CPU 分段拷贝,额外开销。

四、优缺点总结

BAR 直接映射(MMIO)

✅ 优点:

  • 小包控制延迟最低,驱动简单;
  • 无需 DMA 描述符、中断管理,适合简单寄存器交互; ❌ 缺点:
  • 大带宽完全拉胯,CPU 满载;
  • 读性能极差;
  • 只能访问 FPGA 片上 BAR 空间,不能直接操作主机大容量 DDR。

XDMA

✅ 优点:

  • 大块数据带宽天花板,释放 PCIe 全部性能;
  • CPU 占用极低,后台并行传输;
  • 支持主机 DDR ↔ FPGA 高速互通,零拷贝;
  • SG 支持碎片化内存,多通道并发; ❌ 缺点:
  • 极小数据包有固定启动开销;
  • FPGA 逻辑资源消耗更大,驱动逻辑复杂一点。

五、选型建议

  1. 高速采集、视频、雷达、大容量数据流→ 必选 XDMA;
  2. 仅寄存器读写、少量控制指令、小包交互→ 用 BAR MMIO;
  3. 混合系统:BAR 做命令控制,XDMA 走数据通路,两者配合最优。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询