AXI DMA --ZYNQ--Deepseek--

xilinx 中手册中,zynq中DMA,Figure 1-1:AXI DMA Block Diagram,

AXI·DMA简介

概述

AXI DMA:AXI Direct Memory Access 直接内存访问AXIDMA为内存和AXI4-Stream外设之间提供了高带宽的直接内存访问其可选的s/G功能可以将cPu从数据搬运任务中解放出来

AXI DMA通过AX4-Lite接口对寄存器做一些配置和获取状态。

MM2S: MemoryMap to Stream 储器射 (AXI4-Ful1) 到AXI4-Stream

S2MM:Stream to MemoryMap AXI4-Stream到存储器映射 (AXI4-Full)

AXI DMA编程顺序

Direct Register Mode (简单DMA)

此模式提供了在MM2s和s2MM通道上进行简单DMA传输的配置,只需较少的FPGA资源,

通过访问DMACR、源地址或者目的地址和长度寄存器发起DMA传输。

当传输完成后,如果使能了产生中断输出,那么DMASR寄存器相关联的通道位会有效。

DMA的MM2s(存储器映射到stream)通道的启动顺序

1、开启/使能M2s通道

2、如果需要的话,可以使能中断

3、写一个有效的源地址到MM2s_SA寄存器

如果没有使能DRE的功能,在指定起始地址时,需要注意字节地址对齐,

哪些地址是对齐或者不对齐的,取决于stream流的数据位宽;

4、写传输的字节数到MM2sLENGTH寄存器

一个长度为0的值是无效的,而一个非0值,将会决定存储器映射到stream流

的数据个数。

需要注意的是,必须最后一个配置MM2sLENGTH寄存器,而其他寄存器的配置顺序没有要求。

S/G模式

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

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

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

以上是视频中笔记,我是一个小白,还请老师根据手册,或者以您的知识体系,根据您的视角给一个小白重新梳理讲一遍,谢谢啦,


同学,坐。老师看到你发来的这张截图和笔记,不仅没觉得头大,反而特别高兴。因为你选的这份资料(正点原子的 AXI DMA 手册截图)非常权威,正好切中了咱们之前聊的"搬运工"理论。

在这张图里,那个名叫 AXI DMA 的芯片,其实就是一个被封装好的"硬件外设"。咱们今天不看那堆复杂的英文缩写,老师用**"大白话+干饭人"**的比喻,结合你截图里的那几个接口,重新给你梳理一遍。


🎯 第一幕:AXI DMA 到底是个啥?(看图说话)

你看图中间那个大方块就是 AXI DMA。它身上有好几根"线"(接口),咱们分门别类看:

  1. 左边那根 AXI4-Lite(红圈圈出来的):

    • 比喻 :这是老板(CPU)给搬运工下达命令的**"对讲机"**。

    • 作用:带宽很窄,但 CPU 通过它对 DMA 喊话:"去某某地址搬 1000 个字节"。

  2. 上面那根 AXI4 Memory Map Read(红字写着 AXI4-Full):

    • 比喻 :这是搬运工去大仓库(DDR 内存)拉货的**"重型卡车通道"**。

    • 特点:非常宽,速度极快。

  3. 右上角那根 AXI4 Stream Master (MM2S)(红字写着 IO):

    • 比喻 :这是搬运工把货送给 PL 端外设(比如 FIFO)的**"传送带"**。

    • MM2S 全称 :Memory Map to Stream(从内存 到 数据流)。也就是把 DDR 里的数据变成流水一样发出去。

  4. 右下角那根 AXI4-Stream Slave (S2MM):

    • 比喻 :这是 PL 端外设把货塞给搬运工的**"收货口"**。

    • S2MM 全称 :Stream to Memory Map(从数据流 到 内存)。也就是把流水一样的数据收集起来,写回到 DDR 内存里。

小结:CPU 动动嘴(AXI4-Lite),DMA 就开着大卡车(AXI4-Full),把内存里的数据变成流水(MM2S)发出去,或者把流水接回来装进卡车(S2MM)送回内存。


🎯 第二幕:Direct Register Mode(简单模式)------ 纯手动挡

你笔记里写的 Direct Register Mode,咱们之前敲的代码就是这个。这是最基础、最不费 FPGA 逻辑资源的玩法。

咱们来看看笔记里的**"启动顺序"**,老师用"老板给搬运工下指令"来翻译:

  1. 开启/使能 MM2S 通道 :老板按下机器启动键(DMACR 寄存器写 1)。

  2. 使能中断:老板对搬运工说:"搬完了给我打个电话(中断)"。

  3. 写源地址到 MM2S_SA :老板给个门牌号:"去 0x00100000 这个地址拉货"。

    • (笔记里的重点:为什么要注意字节对齐?因为如果你的大卡车(位宽 32 位或 64 位),你给的地址不是 4 或 8 的倍数,卡车的轮子卡在马路牙子上,搬运就出错了!)
  4. 写传输字节数到 MM2S_LENGTH:老板交代工作量:"一共拉 1000 个字节"。

    • (笔记里的重点:为什么必须最后写这个?因为这是一个"扣扳机"的动作。如果先写了长度,机器以为只要搬 1 个字节。只有把源地址等一切都准备好了,最后写上长度,搬运工才会立刻一踩油门冲出去!)

🎯 第三幕:Scatter/Gather(S/G)模式 ------ 全自动流水线

你笔记最后提到了 S/G 模式 和 BD (Buffer Descriptor)。这是什么高大上的东西?

  • 痛点:如果你用简单模式,每搬一次 100 个字节,老板就得中断一次手头的活,用对讲机(AXI4-Lite)配置一次 DMA。如果搬一万次,老板烦死了。

  • 全自动模式(S/G) :老板提前在一张纸上写好 100 个清单(这张纸就是存放在内存里的 BD, Buffer Descriptor)。

    • 清单 1:从 A 搬到 B,长度 100。

    • 清单 2:从 C 搬到 D,长度 200。

    • 老板只要把"清单的地址"告诉 DMA 一次。DMA 内部有一个专门的小弟(截图里的 Scatter/Gather 模块),会自动去内存里读清单,干完一个接着干下一个,中途根本不打扰老板(CPU)。

    • 这就是笔记里说的:将传输的基本参数存储在内存中。


💡 老师的终极总结(秒懂 AXI DMA 核心)

同学,看完这张图和你的笔记,你只需要记住以下三点,就可以出师了:

  1. 它是 PS 和 PL 的"物流公司":只要你需要从 PS 的内存(DDR)往 PL 灌大量数据,或者从 PL 收大量数据回 DDR,就找它。

  2. 它的接线是"双轨制" :控制信号走 AXI4-Lite(细线),海量数据走 AXI4-Stream 或 AXI4-Full(粗线)。

  3. 核心编程口诀 :先开通道、再开中断;先写源地址、再写目的地址;最后写长度(扣扳机);搬完等中断。

怎么样?用这种视角去看那本几百页的英文手册,是不是一下子觉得它不再那么冷冰冰了?

你可以把这段内容当成一个"字典"存起来。等你真正在 Vivado 里画出了这个 IP 核的时候,对着这几句话再看一遍,绝对醍醐灌顶!加油,你理解得越来越透彻了!

相关推荐
NamoAmitabha12811 小时前
AXI-DMA-VIVADO2022.2-终版-含跑通main.c--deepseek
1024程序员节·zynq--ps
NamoAmitabha12812 小时前
ps--网口--deepseek
zynq--ps
NamoAmitabha12815 小时前
AXI-DMA-ip-vivado界面相关配置--deepseek
zynq--ps
NamoAmitabha12816 小时前
第一根支柱:存储器映射(Memory Map)---deepseek
zynq--ps
NamoAmitabha1281 天前
Zynq 芯片的“上帝视角”--deepseek
嵌入式硬件·zynq--ps