系统进阶 PS DMA 内容要点
DMA 基础
- 定义:DMA(Direct Memory Access)允许外设直接读写内存,无需 CPU 介入。
- 传输类型 :
- Memory‑to‑Memory(DDR buffer 复制、图像缓存整理)
- Memory‑to‑Peripheral(发送 FIFO、PL 寄存器窗口)
- Peripheral‑to‑Memory(采集数据写入 DDR)
- Device‑to‑Device(特定硬件链路,较少见)
- 核心优势:解放 CPU,提高数据吞吐量
Zynq DMA 架构
- 两种方案 :
- PS DMA (DMAC 硬核)
- 8 个通道
- 基地址:
0xFD4F0000
- PL DMA(AXI DMA IP 核)
- PS DMA (DMAC 硬核)
- 适用场景 :
- PS DMA → PS 外设间传输
- PL DMA → PL 端数据传输
- 高级特性 :
- 支持 Scatter‑Gather 链式传输
- 支持 64 位地址
Linux 驱动
- 框架 :内核通过 DMA Engine 框架统一管理(驱动文件:
drivers/dma/xilinx/zynqmp_dma.c)。 - 核心 API :
dma_request_channel()-- 申请通道dma_prep_memcpy()-- 准备传输dmaengine_submit()-- 提交传输dma_async_issue_pending()-- 启动传输
- 用户空间访问 :可通过
/dev/mem+mmap访问 DMA 寄存器。
性能与优化
- 性能对比 :
- 小数据量(< 64 KB):DMA 不如 CPU
memcpy(存在配置开销) - 大数据量(> 64 KB):DMA 优势明显,4 MB 传输可达 4.6 倍加速
- 小数据量(< 64 KB):DMA 不如 CPU
- 优化策略 :
- Scatter‑Gather 链式传输 -- 减少 CPU 干预
- Cache Line 对齐(64 字节)
- 缓存一致性 -- 使用
dma_alloc_coherent - 双缓冲(Ping‑Pong) -- 最大化带宽
💡 完整视频讲解可前往 ALINX 视频号进行直播回看
更多细节欢迎关注我们黑金云课堂全年免费直播课,
黑金云课堂七月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!
| 系列 | 内容定位 |
|---|---|
| Verilog开发 | 硬件描述语言基础、逻辑设计、仿真调试 |
| Vitis开发 | Zynq软硬件协同、外设驱动、网络协议栈 |
| Linux开发 | 嵌入式Linux系统移植、驱动编写、应用开发 |