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

1  配置界面说明

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

  • 不使能SG模式--默认就是Direct Register模式
  • Width of Buffer length :即buffer length对应的位宽,设置23bit,即buffer length最大设置8338607,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 配置和寄存器详解

地址0x000  写 0x0000_7001

地址0x018  写 0x0000_0000

地址0x028  写0x0000_0080

地址0x030  写 0x0000_7001

地址0x048  写 0x0000_0000

地址0x058  写0x0000_0080

其中 0x000 0x018 0x028  对应MM2S

        0x030 0x048 0x058   对应S2MM

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

地址0x030  写 0x0000_7001 

 bit0=1  bit[14:12]=3'b111

bit0-->RS  0:stop  1:start

bit14:12-->使能相应的中断

0x48--目的地址寄存器  此处是0x0000_0000

0x58--数据长度 单位Byte  此处是0x80,即一次搬移128个byte

3.2  MM2S工作流程

       从仿真可以看出,当0x28配置完成之后,AXI4_MM2S从0x0000_0000的基地址开始取数据,并将数据转为AXIS_MM2S输出,最后一个数据的时候拉起Tlast,数据量为128个byte,传输完成之后mm2s中断拉起。

3.3 S2MM工作流程

       从仿真可以看出,当0x58配置完成之后,接收AXIS_S2MM的数据,这里要注意,是接收到Tlast信号,之后,将数据通过AXI4_S2MM写入BRAM。基地址为0x0000_0000,写完之后S2MM中断拉起。

4  注意事项

  • MM2S是边从内存取数据,边通过AXIS端发出,数据足够buffer length的时候,拉高tlast信号
  • S2MM是先接收AXIS的数据,存在接收数据缓冲区,当接收到Tlast信号,或者数据量足够Buffer length的时候,将数据转为AXI4写入内存,也就是当数据量不足128byte,但是Tlast提前到来了,它也会执行数据搬移
<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、付费专栏及课程。

余额充值