目录
大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程师。
在PS端和PL端的数据交互的过程中,在高吞吐、数据连续的一些应用中,往往都是使用DMA去进行数据收发。本系列分享一个基于AXI总线(AXI-Lite、AXI、AXI-Stream)的DMA核的介绍&用法。
好的,言归正传。直接进入正题。
01 功能特性
AXI DMA Core 简介
-
AXI Direct Memory Acess(AXI DMA)是一个软核(Verilog),其集成在Vivado设计工具中;
-
为内存和AXI4 Stream 外设提供了高带宽的DMA访问接口
-
支持Scatter/Gather DMA模式(SGDMA)
AXI DMA Core 特性
-
支持AXI4 [memory-mapped Interface] 接口
-
AXI4总线数据宽度支持32bit、64bit,128bit、256bit、512bit、1024bit
-
AXI4-Stream总线数据宽度支持8bit、16bit、32bit、64bit、128bit、256bit、512bit、1024bit
-
支持Keyhole(可选)
-
支持AXI4-Stream数据重对齐位宽最高为512bits(可选)
-
支持AXI总线control和Status Streams
-
支持最高64位地址寻址
-
支持Scatter/Gather DMA(可选)
-
DMA管理不需要CPU参与
-
Transfer descriptors的update和fetch与数据总线独立开
-
允许descriptors放置在任何memory-mapped的空间(与data buffer分开),例如放置在OCM上(On Chip Memory)
-
支持循环操作(descriptors + control regster)
-
-
支持Micro DMA(可选)
-
允许通过失能SGDMA,获取消耗FPGA更小的简易DMA;传输时通过Source Address(MM2S-AXI总线)或者Destination Address(S2MM-AXI总线),最后通过对length register写入指定的字节长度来启动传输
-
02 功能架构
AXI DMA 模块图
模块 | 描述 |
AXI4 Memory Map Read | 从Memory-mapped device读取数据 |
AXI4-Lite | 与DMA通信,读写DMA寄存器 |
AXI4 Memory Map Write | 向Memory-mapped device写入数据 |
AXI4-StreamMaster(MM2S) | 主机DMA向从机stream设备写入数据 |
AXI4 Control Stream(MM2S) | |
AXI4 Memory Map Write/Read | 与DMA通信,读写SGDMA寄存器 |
AXI4 STREAM(S2MM) | |
AXI4-Stream Slave(S2MM) | 主机stream设备写入数据到从机DMA(读入) |
AXI DMA Core实际接口图
Interface Signal描述
03 寄存器说明
寄存器地址空间
AXI DMA的寄存器是基于内存空间地址映射的(non-cacheable),地址空间必须以AXI总线Word(32-bit)对齐.
-
SGDMA模式寄存器地址映射
-
DMA模式寄存器地址映射
特别说明:由于篇幅原因,以上列表的寄存器的详细说明不在此处罗列,详细可查看《PG021_axi_dma.pdf》章节2的对应内容。
04 文章总结
由于公众号篇幅原因,本篇推文仅是对AXI DMA Core的部分内容进行了描述,有些内容并未在此处描述。对于开发者而言,要深入了解该IP核的具体内容,还得是啃官方的参考文档部分内容。
参考文档:
《PG021_axi_dma.pdf》