赞
踩
可以在不受CPU干预的情况下,完成对内存的存取。
在PS和PL两端都有DMA,其中PS端的是硬核DMA,而PL端的是软核DMA。
如何选用这两个DMA呢?
如果从PS端的内存DDR3到I/O、DDR3、OCM,少量的数据传输就用PS端的DMA;
而对于大量数据的搬运,内存DDR3到PL的软核AXI DMA,并且用HP接口以达到高速传输的效果,但是其缺点是会占用FPGA的一部分逻辑资源,以内存换速率。
AXI DMA为内存和AXI4-Stream外设之间提供了高带宽的直接内存访问
其可选择的SG模式可以将CPU从数据搬运任务中解放出来
AXI DMA通过AXI-Lite接口对寄存器做一些配置和获取。
MM2S: MemoryMap to Stream 存储器映射(AXI4-Full)到AXI4-Stream
S2MM: Stream to MemoryMap AXI4-Stream到存储器映射(AXI4-Full)
简单DMA模式(禁用SG模式即可)提供了一种可在MM2S和S2MM通道上执行简单DMA传输的配置,只需要较少的FPGA资源。通过访问DMACR(DMA控制寄存器)、源地址或目标地址和长度寄存器来启动DMA传输。当传输完成时,如果使能了产生中断输出,那么DMASR(DMA状态寄存器)相关联的通道位IOC_Irq会有效,便会产生中断。
DMA的MM2S(存储器映射到Stream)通道的启动顺序:
1、使能MM2S通道(令MM2S_DMACR.RS = 1);
2、如果需要的话,可以使能中断;
3、写一个有效的源地址到MM2S_SA寄存器(源地址寄存器)
注:如果没有使能DRE的功能,在指定起始地址时,需要注意字节地址对齐,哪些地址是对齐或者不对齐的,取决于stream流的数据位宽。如果启用了 DRE 并且
数据流位宽 < 128,则源地址可以是任意字节偏移。
4、写传输的字节数到MM2S_LENGTH寄存器。
注:一个长度位0的值是无效的,而一个非0的值,将会决定存储器映射到Stream流的数据个数;并且必须最后一个配置MM2S_LENGTH寄存器,而其他寄存器的配置顺序没有要求。这表明配置完数据长度,此时整个配置过程已经结束。
DMA的S2MM(Stream到存储器映射)通道的启动顺序:(和MM2S非常相似)
1、使能S2MM通道(令S2MM_DMACR.RS = 1);
2、如果需要的话,可以使能中断;
3、写一个有效的源地址到S2MM_DA寄存器(目的地址寄存器)
注:如果没有使能DRE的功能,在指定起始地址时,需要注意字节地址对齐,哪些地址是对齐或者不对齐的,取决于stream流的数据位宽。如果启用了 DRE 并且
数据流位宽 < 128,则源地址可以是任意字节偏移。
4、写传输的字节数到S2MM_LENGTH寄存器。
注:一个长度位0的值是无效的,而一个非0的值,将会决定Stream流到存储器映射的数据个数;并且必须最后一个配置S2MM_LENGTH寄存器,而其他寄存器的配置顺序没有要求。这表明配置完数据长度,此时整个配置过程已经结束。
在SG模式下,它把传输的基本参数,存储在内存中;
这些参数就是被称为BD(Buffer Descriptor)
在工作时,通过SG接口加载和更新BD中的状态。
SG模式在另一篇文章中详细介绍了,传送门:
https://blog.csdn.net/m0_61298445/article/details/122790130?spm=1001.2014.3001.5501
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。