文章目录
AXI DMA提供内存和AXI4-Stream 目标外设之间的高带宽直接内存访问。DMA除了配置为直接DMA模式外,还可以配置为scatter/gather(S/G)模式,S/G模式减轻CPU负担。
为了掌握对DMA的使用方法,需要对DMA IP核有足够的了解。这篇文章主要对AXI DMA IP 核的使用进行简单的说明,接下来详细论述,首先是 AXI DMA IP核的结构图,如下所示:
1 AXI DMA IP核结构图
在上图中,DMA 能够实现的功能有:
(1) 内存到AXI4S(AXI4-Stream)是通过AXI4 Read Master 到 AXI4 memory-mapped to stream (MM2S) Master;
AXI4S到内存是 AXI stream to memory-mapped (S2MM) Slave到AXI4 Write Master,在S/G模式下,MM2S和S2MM可以实现最多16个通道的数据传输。
(2) 提供byte级数据重对齐,允许从内存任何位置访问数据;
(3) MM2S通道提供 AXI4 Control Stream 控制流,S2MM提供状态流;
(4) S/G 模式允许访问和更新内存中的 buffer描述符(buffer descriptors, bd)
(5) AXI4接口支持32, 64, 128, 256, 512 和 1024 位的数据传输;
(6) AXI4S 接口支持8, 16, 32, 64, 128, 256, 512 和 1024位的数据传输。
在此先说明一下S/G模式 。
S/G 模式:DMA操作需要在内存中驻留的数据结构保存DMA操作列表,列表描述为描述符链,任一描述符有指向下一描述符的指针,最后一个描述符指向第一个描述符。描述符的存在可以实现数据报头和数据内从在内存中不同位置,获取报头和获取数据相互独立,增加吞吐量。
在 MM2S 通道上使用帧起始位(TXSOF)和帧结束位(TXEOF)描述内存中的数据包长度,当DMA获取TXSOF位设置的描述符时,触发包的开始。数据包继续获取后续描述符,直到获取一个设置了TXEOF位的描述符。
在S2MM通道上,DMA使用RXSOF 和 RXEOF标记描述符。
2 AXI DMA IP接口
了解IP核的结构后,就需要了解IP核的使用方法,首先介绍下IP核的接口资源。
AXI DMA IP核的接口如下图所示:
下面详细介绍接口功能:
s_axi_lite_aclk: AXI4-Lite时钟;
m_axi_sg_aclk: S/G模式时钟;
m_axi_mm2s_aclk: MM2S通道时钟;
m_axi_s2mm_aclk: S2MM通道时钟;
axi_resetn: 复位
mm2s_introut: MM2S通道中断;
s2mm_introut: S2MM通道中断;
axi_dma_tstvec: 提供调试使用;
s_axi_lite_*: AXI4-Lite接口;
AXI4存储器读接口
m_axi_mm2s_*: MM2S通道读接口;
AXI4S 接口
mm2s_prmry_reset_out_n: MM2S通道数据流设备的复位输出;
m_axis_mm2s_*: MM2S的AXI4S接口;
AXI4控制接口
mm2s_cntrl_reset_out_n:MM2S通道控制的复位输出;
m_axis_mm2s_cntrl_*: MM2S的AXI4控制接口;
AXI4存储器写接口
m_axi_s2mm_*: S2MM 通道写接口;
s2mm_prmry_reset_out_n: S2MM 通道数据流设备的复位输出;
s_axis_s2mm_*: S2MM 的AXI4S接口;
s2mm_sts_reset_out_n: S2MM 通道状态的复位输出;
s_axis_s2mm_sts_*: S2MM 的AXI4状态接口;
S/G读接口
m_axi_sg_*: S/G读接口
m_axi_sg*: S/G写接口
1 寄存器说明
对于上面某些控制接口或者状态接口,比如中断接口来说,DMA传输过程中或许不需要产生中断,所以DMA的某些寄存器可以通过用户配置,实现功能选择。DMA的同一地址空间中寄存器对于不同的传输模式,其功能也不相同,下面详细介绍寄存器功能:
1 MM2S寄存器
S/G模式下寄存器地址
寄存器地址 | 名称 | 描述 |
---|---|---|
00h | MM2S_DMACR | run/stop状态控制,1是 |
04h | MM2S_DMASR | MM2S DMA状态寄存器 |
08h | MM2S_CURDESC | MM2S当前描述符指针。地址的低32位。 |
0Ch | MM2S_CURDESC_MSB | MM2S当前描述符指针。地址的高32位。 |
10h | MM2S_TAILDESC | MM2S结尾描述符指针。地址低32位 |
14h | MM2S_TAILDESC_MSB | MM2S结尾描述符指针。地址高32位 |
2Ch | SG_CTL | S/G模式控制 |
30h | S2MM_DMACR | S2MM DMA控制寄存器 |
34h | S2MM_DMASR | S2MM DMA状态寄存器 |
38h | S2MM_CURDESC | S2MM当前描述符指针。地址的低32位。 |
3Ch | S2MM_CURDESC_ |