【Xilinx DMA】Xilinx FPGA 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

 

  • 2
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linest-5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值