AXI Direct Memory Access IP核(3):AXI DMA --SG模式仿真例程(xilinx example)

1  配置界面说明

我们打开AXI Direct Memory Access 7.1的配置界面:

  • 使能SG模式
  • Width of Buffer length :即buffer length对应的位宽,设置16bit,即buffer length最大设置65536,buffer length对应的单位为Byte。
  • Read Channel:M_AXI_MM2S读数据  通过 M_AXIS_MM2S发出
  • Write Channel:S_AXIS_S2MM写入数据 通过 M_AXI_S2MM写给内存

所以可以理解为:Read channel对应MM2S  Write channel 对应S2MM。

2  仿真架构说明

打开example仿真工程,可以看到架构如下

其中CHECK模块会核对读写数据的一致性,输出pass 和 fail

3  仿真说明

3.1 配置和寄存器详解

地址0x008  写 0x0000_0000

地址0x000  写 0x0002_7001

地址0x010  写0x0000_0040

地址0x038  写 0x0000_00C0

地址0x030  写 0x0002_7001

地址0x040  写0x0000_0100

其中 0x000 0x008 0x010  对应MM2S的SG模式

        0x030 0x038 0x040   对应S2MM的SG模式

我们只对MM2S的寄存器进行说明,S2MM与MM2S是一样的,只是寄存器地址不同

地址0x008  写 0x0000_0000,即SG模式的描述符的开始地址。

地址0x000  写 0x0002_7001,DMA控制器的配置。

bit[0]--DMA Run

bit[14:12]---使能响应的中断

bit[23:16]=2,即收到两个中断之后,才拉起外部的intr。

地址0x010  写 0x0000_0040,尾描述符指针。

3.2  SG链表配置详解

      当我们配置完,描述符的首指针 并使能DMA之后,SG通道就从指针对应的地址,取链表信息,链表信息包含了如下配置。

我们看一下例程中读出的信息:

这是0x000地址配置完之后,SG通道读取的信息

从第一个链表地址0x0000_0000读出:

数据1-0x00:0x40---即下一个链表的地址

数据2-0x04:0x00

数据3-0x08:0x00---即MM2S取数据的基地址是0x0000_0000

数据4-0x0c:0x00

数据5-0x10:0x00

数据6-0x14:0x00

数据7-0x18:0x0c00_0080--MM2S这个链表的传输配置项,如下

bit[22:0]对应80,即buffer length=0x80=128byte,本次搬移128byte数据量

bit[27:26]=2'b11,指示这个起始帧,也是结束帧,即单帧有效

那根据第一个链表的指示,第二个链表就从0x0000_0040基址开始取链表信息

数据1-0x00:0x80---即下一个链表的地址

数据2-0x04:0x00

数据3-0x08:0x80---即MM2S取数据的基地址是0x0000_0080

数据4-0x0c:0x00

数据5-0x10:0x00

数据6-0x14:0x00

数据7-0x18:0x0c00_0080--MM2S这个链表的传输配置项,如下

bit[22:0]对应80,即buffer length=0x80=128byte,本次搬移128byte数据量

bit[27:26]=2'b11,指示这个起始帧,也是结束帧,即单帧有效

根据这样的配置,就可以实现提前在内存中写好CMD信息,然后在AXI4LITE配置接口给出描述符的起始和结尾,就可以发起多次DMA传输了,与Direct Register模式相比可以大大提高传输的效率。

3.3  MM2S工作流程

         从仿真可以看出,当0x000配置完成之后,AXI4_SG从0x0000_0000的基地址开始取SG的配置信息。       

       当第一个链表配置信息读取成功之后,AXI4_MM2S从0x0000_0000的基地址开始取数据,并将数据转为AXIS_MM2S输出,最后一个数据的时候拉起Tlast,数据量为128个byte,

     当第二个链表配置信息读取成功之后,AXI_MM2S就从0x80的基地址取数据,转为AXIS_MM2S输出,最后一个数据拉起Tlast

        每完成一次传输,实际都会产生一次中断,但是我们前面的配置是2次IRQ中断才拉起一次外部中断,所以可以看到MM2S_intr是在两次传输都完成之后才拉起的。

        从时序可以看出,每次传输完成之后SG都会发起一笔写请求,写的地址为0x1c,写的数据为0x8000_0080,什么意思呢?

从Table 2-21可以看出,0x1C对应 STATUS,寄存器如下:

bit[22:0]=0x80,即本次实际传输了128byte的数据(与配置要求的传输数据量一致)

bit[31]为1,即本次传输成功。

在AXI_DMA传输故障的时候,这个寄存器显得尤为重要。

3.3 S2MM工作流程

         从仿真可以看出,当0x030配置完成之后,AXI4_SG从0x0000_00C0的基地址开始取SG的配置信息。       

       当第一个链表配置信息读取成功之后,AXIS_S2MM接收stream流数据,转为AXI4_S2MM,写数据的基址为0x0000_0000,数据量为128个byte。

     当第二个链表配置信息读取成功之后,AXIS_S2MM接收stream流数据,转为AXI4_S2MM,写数据的基址为0x0000_0080

        每完成一次传输,实际都会产生一次中断,但是我们前面的配置是2次IRQ中断才拉起一次外部中断,所以可以看到S2MM_intr是在两次传输都完成之后才拉起的。

4  注意事项

      MM2S是边从内存取数据,边通过AXIS端发出,数据足够buffer length的时候,拉高tlast信号
S2MM既认数据量又认Tlast,也就是当数据量不足128byte,但是Tlast提前到来了,它也会执行数据搬移。

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
<think>嗯,用户问的是AXI Direct Memory Access IP和VIVADO里其他AXI DMA IP的区别。首先,我需要确认这两个IP的具体名称和功能。可能用户提到的“AXI Direct Memory Access IP”指的是XilinxAXI DMA IP,而其他AXI DMA IP可能包括AXI CDMA或者AXI MCDMA之类的。 接下来,我需要回忆这些IP的主要功能和应用场景。AXI DMA通常用于高速数据传输,支持scatter-gather操作,适合处理大量数据,常用于需要高带宽的场景,比如视频流或高速采集。而AXI CDMA可能更侧重于简单的直接内存访问,可能不支持scatter-gather,适用于简单的点对点传输。 另外,AXI MCDMA可能支持多通道,允许多个独立的数据流同时传输,适合需要多个DMA通道的应用。而普通的AXI DMA可能只有单通道。需要确认这些IP在功能、性能、资源占用和配置复杂度上的差异。 还要考虑用户可能的实际应用场景,比如是否需要多通道、是否需要处理复杂的数据结构,或者对延迟和吞吐量的要求。用户可能在设计系统时面临选择,需要了解不同IP的优缺点,以便做出合适的选择。 另外,需要检查文档中的参数配置选项,比如是否支持不同的AXI协议版本,数据宽度,是否支持中断,以及是否支持不同的传输模式。这些参数也会影响IP的适用性。 可能还需要提到资源占用情况,比如LUT、FF、BRAM的使用量,这对资源有限的FPGA设计来说很重要。此外,是否需要额外的逻辑来管理传输,比如描述符管理,或者是否集成在IP内部。 总结下来,需要从功能、性能、适用场景、资源占用、配置复杂度等方面进行对比,给出明确的区别点,并举例说明各自的适用情况。同时,用户可能需要进一步了解如何选择,或者具体的配置方法,所以相关问题应该围绕这些方面展开。</think>AXI Direct Memory AccessAXI DMAIP与VIVADO中其他AXI DMA相关IP(如AXI CDMAAXI MCDMA)的区别主要体现在以下方面: 1. **功能复杂度** - **AXI DMA**:支持高性能数据传输,包含Scatter-Gather功能(可处理非连续内存地址),适用于高速数据流(如视频、ADC/DAC)。 - **AXI CDMA**:轻量级DMA,仅支持简单的一维内存拷贝,无Scatter-Gather,适合低复杂度场景。 - **AXI MCDMA**:多通道DMA,支持多个独立数据流并行传输,适用于需要多通道隔离的场景(如多路传感器数据采集)。 2. **传输模式** - AXI DMA:支持MM2S(内存到流)和S2MM(流到内存)双向通道。 - AXI CDMA:仅支持MM2MM(内存到内存)单向传输- AXI MCDMA:支持多通道MM2S/S2MM,每个通道独立配置。 3. **资源占用** - AXI DMA和MCDMA资源占用较高(需描述符管理逻辑),而AXI CDMA更节省资源。 4. **适用场景** - AXI DMA:复杂数据流处理(如图像传输)。 - AXI CDMA:简单内存拷贝(如缓冲区填充)。 - AXI MCDMA:多通道并发传输(如工业控制多轴同步)。 ```python # 示例:AXI DMA典型应用场景 def axi_dma_use_case(): # 配置Scatter-Gather描述符 descriptors = [ {"src": 0x1000_0000, "dst": 0x2000_0000, "length": 4096}, {"src": 0x1000_1000, "dst": 0x2000_1000, "length": 2048} ] # 启动DMA传输 dma_engine.start(descriptors) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGA_小田老师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值