2. Xilinx DMA IP 概览:四大金刚怎么选?
好,我们直接进入正题。Xilinx 的 DMA IP 有好几种,说白了就是帮你把数据从 A 点搬到 B 点。但具体怎么搬、搬多少、搬什么类型的数据,这就有讲究了。
我个人习惯把这几类 IP 称为“四大金刚”:AXI DMA、AXI CDMA、AXI MCDMA 和 AXI VDMA。名字看着挺像,但脾气秉性完全不同。选错了,后面调试起来真要命。
2.1 AXI DMA —— 最通用的“数据搬运工”
AXI DMA 是 Xilinx 最经典的 DMA IP。它最大的特点就是灵活,既能做内存到外设的传输(比如把数据从 DDR 发给 SPI 或 UART),也能做内存到内存的拷贝。
我记得刚接触 FPGA 时,第一个调通的 DMA 就是它。那时候想采集 ADC 数据存到 DDR 里,用 AXI DMA 配合 Stream 接口,半小时就把环路调通了。嗯,省了不少事。
- 支持 AXI4 内存映射接口(读/写)
- 支持 AXI4-Stream 接口(数据流)
- 内部有 Scatter Gather 引擎,可以自动处理不连续的内存块
- 支持 2D 传输(其实是用 SG 列表模拟的)
选型场景:
- 需要把 FPGA 内部产生的连续数据流搬到 DDR 里
- 需要把 DDR 里的数据按一定的地址间隔发送出去
- 项目中已经有现成的 AXI-Stream 外设 IP
2.2 AXI CDMA —— 单纯的内存到内存搬运工
AXI CDMA,全称 Central DMA。你看它名字里没有“Stream”,就知道它主要干的是内存到内存的活。而且它只有一个 AXI4 主接口,没有 Stream 接口。
说白了,CDMA 就是一颗专门用来在 DDR 不同区域之间搬数据的“加速器”。它的核心优势是延迟低,适合需要快速响应的内存拷贝场景。
| 对比项 | AXI DMA | AXI CDMA |
|---|---|---|
| Stream 接口 | 有 | 无 |
| Scatter Gather | 支持 | 支持 |
| 内存到内存 | 可以(但效率一般) | 专长 |
| 延迟 | 中等 | 低 |
选型场景:
- 需要频繁在 DDR 的两个缓冲区间搬数据
- 系统中有大量 memcpy 操作,CPU 忙不过来
- 对延迟敏感,但不是极致的实时场景
2.3 AXI MCDMA —— 多通道的“矩阵搬运”
MCDMA,Multi-Channel DMA。你看名字就知道,它主打的是多通道。它能同时管理多个独立的 DMA 通道,每个通道都有自己的描述符链表和传输配置。
我在做多路雷达数据采集时用过它。当时有 8 路 ADC 数据流需要同时写入 DDR,如果用 8 个 AXI DMA,逻辑资源会爆掉。换成 MCDMA,一个 IP 就把 8 个通道全搞定了。
- 支持 4/8/16 个独立通道
- 每个通道独立配置传输方向、数据宽度、地址
- 内部有仲裁逻辑,管理多个通道同时请求时的带宽分配
- 所有通道共享一个 AXI4 主接口
选型场景:
- 多个数据源需要并行写入 DDR(比如多路 ADC、多路 Camera)
- 需要在一个 IP 内部完成多个数据流的调度管理
- 资源敏感,但不能让多个独立 DMA 浪费逻辑单元
2.4 AXI VDMA —— 视频专用的“帧搬运专家”
AXI VDMA,Video DMA。专门为视频流设计。它内置了帧缓冲管理、场同步、帧同步等视频相关的逻辑。说白了,你用它做视频采集和显示,它会帮你省掉至少一半的代码量。
我记得第一次调 HDMI 显示时,用了 VDMA 配合 TPG(Test Pattern Generator),不到半天屏幕上就出来了彩条。那感觉真好。
| 特性 | AXI VDMA | AXI DMA |
|---|---|---|
| 帧缓冲管理 | 硬件自动管理 | 需要软件维护 |
| 同步信号 | 内置 vsync/hsync | 无 |
| 2D 传输 | 原生支持(行宽、帧高、步长) | 需要 SG 列表模拟 |
| 典型带宽 | 4K@60fps 无压力 | 看配置,但无帧缓冲区管理 |
选型场景:
- 视频采集(Camera 进 DDR)
- 视频显示(DDR 出到 DisplayPort/HDMI)
- 图像处理流水线(中间帧缓冲管理器)
2.5 选型对比总表
为了方便对比,我把四个 IP 的核心参数列成了一张表。你看着选就行。
| IP 类型 | 主要接口 | 通道数 | 适用场景 | 资源占用 |
|---|---|---|---|---|
| AXI DMA | MM+Stream | 1 (可拆分为读写两条) | 通用数据搬移 | 中等 |
| AXI CDMA | MM only | 1 | 内存到内存拷贝 | 较低 |
| AXI MCDMA | MM+Stream | 4/8/16 | 多通道数据采集 | 较高 (跟通道数正相关) |
| AXI VDMA | MM+Stream | 1 (但支持多帧缓冲) | 视频/图像处理 | 中等 |
2.6 知识结构图
下面这张图,你看一下就能把这四大金刚的关系搞清楚。横轴是接口类型,纵轴是通道数。
2.7 小结与选型建议
好了,到这里你应该对这四个 IP 有了个大概印象。总结一下我的选型顺序:
- 先看场景:是视频、多通道、还是普通搬移?
- 再看接口:有没有 Stream 需求?还是只做内存到内存?
- 最后看资源:逻辑单元够不够?带宽预算紧不紧?
一句口诀帮你记:
视频用 VDMA,内存拷贝找 CDMA,多路数据上 MCDMA,其他情况 AXI DMA。
嗯,这一章的内容就这些。我自己当年刚开始接触时也晕了好一阵,但一旦你亲手搭过一个 DMA 工程,这些区别就刻在脑子里了。