当前位置:   article > 正文

【Xilinx DMA】Xilinx FPGA DMA介绍

xilinx dma

DMA(Direct Memory Access 直接内存访问)

可以在不受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)

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBATGluZXN0LTU=,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

DMA分为两种模式:Simple DMA(简单模式)和Scatter Gather DMA(SG模式)

①简单模式

简单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模式

在SG模式下,它把传输的基本参数,存储在内存中;

这些参数就是被称为BD(Buffer Descriptor)

在工作时,通过SG接口加载和更新BD中的状态。

SG模式在另一篇文章中详细介绍了,传送门:

https://blog.csdn.net/m0_61298445/article/details/122790130?spm=1001.2014.3001.5501

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/646102
推荐阅读
相关标签
  

闽ICP备14008679号