xilinx官网axi-dma介绍
一、认识axi-dma的接口
先来认识下 AXI DMA 模块
此模块用到了三种总线,
AXI4-Lite 用于对寄存器进行配置,
AXI4 Memory Map 用于与内存交互,在此模块中又分立出了 AXI4 Memory Map Read 和 AXI4 Memory Map Write 两个接口,又分别叫做 M_AXI_MM2S 和 M_AXI_S2MM,一个是读一个是写,这里要搞清楚,不能混淆。
AXI4 Stream 接口用于对外设的读写,其中 AXI4 Stream Master(MM2S)用于对外设写, AXI4-Stream Slave(S2MM)用于对外设读。
另外还支持Scatter/Gather 功能,但本实验不再讲述,留待用户研究。(MM2S 表示 Memory Map to Stream, S2MM 表示 Stream to Memory Map)。
AXI Memory Map 数据宽度支持 32, 64, 128, 256, 512, 1024bits
AXI Stream 数据宽度支持 8, 16, 32, 64, 128, 256, 512, 1024bits
在vivado中视图
接口的分类
S_AXI_LITE是ARM配置DMA寄存器的接口;
S2MM和MM2S表示数据的方向,
MM2S :memory map to stream,用于对外设写;
S2MM:stream to memory map ,用于对外设读;
AXI存储器一侧的接口,AXIS是FPGA一侧的接口;
a.不使能scatter gather和miro DMA,使用简单模式,前者可以配置多个地址,一次开启多次传输。width of buffer length register这个是指接收或发送的最长长度,14位最大就是16384,实际上在函数中判断是16383,该参数设置过长, XAxiDma_SimpleTransfer函数就会返回一个错误。
b.address width是32位,就是对应到DDR3上,一次操作是32bit。read channel 和write channel很不好记,要理解DMA工作时是独立于CPU的,DMA读写都是指对DDR3的操作,由于我的应用是从底层产生数据存到FIFO中,等DMA来读取,因此只需要开启写DDR3通道即可。
c.max burst size,突发传输长度。突发的意思,就是传送一次地址,取多个数据的长度。这一点不好理解:当CPU通过AXI lite写DMA寄存器开启DMA接收后,DMA的tready拉高,开始传输数据,每接收到突发长度后,拉低一次tready,把数据写到DDR3中,写完之后再拉高再接收数据。
d.allow unaligned transfers。地址对齐,这个很重要,发送和接收通道都有,不开启,你发送和接收都必须要从4byte对齐的位置开始,必须从0x00,0x04,0x08等位置发送或接收,否则DMA不会正常工作。
读写通道的判断标准:一切读写操作都是指针对于DDR的操作,所以
写通道:S_AXI_S2MM、 M_AXIS_S2MM
读通道:M_AXI_M2SS 、M_AXIS_M2SS
mm表示memory mapped,即内存映射,代表AXI_FULL协议,对应PS端的AXI接口
s表示stream,代码AXI_STREAM协议
AXIS中的S表示Stream
1、接口分析:
(1)、M_AXI_MM2S:DMA的读通道,从DDR中读取数据。受Enable Read Channel控制,表现为M_AXI_MM2S。
(2)、M_AXI_S2MM:DMA的写通道,将数据写入DDR中。受Enable Write Channel控制,表现为M_AXI_S2MM。
(3)、M_AXIS_MM2S:DMA将数据发送到具有stream接口IP。
(4)、S_AXIS_S2MM:DMA将数据从具有Stream接口的IP中将数据读入。
(5)、mm2s_introut:DMA将数据从DDR的映射单元中读出,然后将数据发送到具有Stream接口的IP完成信号。
(6)、s2mm_introut:DMA将数据从具有stream接口的IP中读入,并写入到内存映射单元的完成中断信号。
说明:第一个字母(M S )代表主从关系,这里是对axi-dma进行配置,所以主从关系也是针对于axi-dma来说的。而dma只会有以下操作
fifo 往dma写数据 S_AXIS-S2MM
dma往fifo 写数据 M_AXIS_MM2S
dma从ddr读数据 M_AXI_MM2S
dma往ddr写数据 M_AXI_S2MM
AXI 和AXIS标示 是axi-full协议,还是axi-stream协议
S2MM表示是stream类型转为memory map
MM2S表示是memory 类型转为stream