AXI DMA学习

AXI总线协议


(一)、概述

AXI (高性能扩展总线接口,Advanced eXtensible Interface)是ARM AMBA 单片机总线系列中的一个协议,是计划用于高性能、高主频的系统设计的。AXI协议是被优化用于通过使用Xilinx进行的相应的开发来做FPGA实现,它被用作FPGA 设计的IP 核之间的一种通信方式。

关键特性

1、地址/控制阶段和数据阶段是分开的,即master(主机)和slave(从机)之间有专门的地址/控制通道,还有专门的数据通道。

2、有字节闸来实现对非对齐数据的传输。

3、只需发布起始地址就能做批量数据传输

4、数据的读写通道是分离的,可以用来实现低成本的DMA(直接存储访问,Direct Memory Access)。除了地址和数据通道是分离的之外,读写数据的通道还是分开的,由此可以看出AXI总线的高速性。

5、可以指定多个需要处理的地址。

6、通信会话可以乱序完成,主要是指的数据的乱序,乱序发送需要有主机的ID进行支撑。

7、为了实现时序收敛,可以方便的加入寄存器,即在用户logic和user interface处加入想要观察和处理的用户逻辑与端口。

(二)、AXI总线类型

自从2003年AXI1.0版本发布以后,目前的AXI版本是4.0,AXI接口类型有三种,即AXI4类型、AXI4-Lite类型,AXI4-Stream类型。

AXI4类型:最高性能的接口,适合存储器映射的通信,支持每个地址阶段256个数据传输周期的批量传输,存在于PS-PL之间。

AXI4_Lite类型:AXI4接口类型中轻量级版本,用于存储器映射的单次数据通信会话,简化了的接口占用较少的逻辑部分面积,不支持批量数据,只支持每次传输单个数据,存在于PS-PL之间。

AXI4-Stream类型:没有地址阶段,不是存储地址映射,仅仅存在与PL侧,可以实现无限制的数据批量大小,为流式数据传输定义单个专用通道,连接只能是从主机到从机。为了实现双向传输,两个外围设备都必须是主机/从机兼容类型。

(三)、AXI架构

AXI协议规定一个AXI主机可以用写数据通道通过AXI总线互联将数据传送给一个AXI从机(或者通过读取数据通道从从机传送到主机),写数据传输会话会有一个额外的响应通道,但是读取时并没有,这时考虑到数据的流向。在进行数据读取时,数据流向:Slave to Master,从机可以直接通过读数据通道向主机返回信息。在进行数据写入时,数据流向:Master to Slave,数据流向是单向的,需要有一个专门的响应通道。

无论是

读还是写,地址和控制数据都是在数据的发送/接收之前:

特别注意AXI互联(AXI Interconnect):

(1)、主机AXI从处理器系统和处理器时钟各自流向从机输出S00_AXI和S00_AXLK。

(2)、AXI互联的输出都是主机通道,每个通道驱动对应的设备。

一、DMA简介

DMA是一种内存访问技术,允许某些计算机内部的硬件子系统可以独立的直接读写内存,而不需要CPU介入处理,从而不需要CPU的大量中断负载,否则,CPU需要从来源把每一片段的数据复制到寄存器,然后在把他们再次写回到新的地方,在这个时间里,CPU就无法执行其他的任务。

DMA是一种快速数据传送方式,通常用来传送数据量较多的数据块。使用DMA时,CPU向DMA控制器发送一个存储器传输请求,这样当DMA控制器在传输的时候,CPU执行其他的操作,传输完成时DMA以中断的方式通知CPU。

DMA传输过程的示意图为:

图片

DMA的传输过程为:

1、为了配置用DMA传输数据到存储器,处理器(Cortex-A9)发出一条指令。

2、DMA控制器把数据从外设传输到存储器或者从存储器传输到存储器,从而较少CPU处理的事务量。

3、输出传输完成后,向CPU发出一个中断通知DMA传输可以关闭。

为了发起传输事务,DMA控制器必须得到以下信息:

(1)、源地址——数据被读出的地址

(2)、目的地址——数据被写入的地址

(3)、传输长度——应传输的字节数

二、ZYNQ DMA简介

ZYNQ提供了两种DMA,一种是集成在PS中的硬核DMA,另一种是PL中使用的软核AXI DMA IP。

在ARM APU(Application Processor Unit,应用处理单元)设计过程中,已经考虑到大量数据搬移的情况,因此在APU中自带了一个DMA控制器DAMC,这个DMAC驻留在PS内,而且必须通过驻留在内存中的DMA指令编程,这些程序往往需要CPU准备,因此需要部分的CPU参与。DMAC支持多达8个通道,所以多个DMA结构的核可以挂载在单个DMAC上。

DMAC与PL的连接是通过AXI-GP接口,这个接口最高支持到32位宽,这也限制了这种模式下的传输速率,理论上最大为600MB/s,这种模式不占用PL资源,但需要对DMA指令编程,会增加软件的复杂性。

为了获取更高的速率,可以空间换时间,在PL中添加AXI DMA IP core,并利用AXI_HP接口完成高速的数据传输,各种接口的传输比较为:

图片

图片

ZYNQ中ACI_HP接口的分布为:

图片

通过PL的DMA和AXI_HP接口传输方式的拓扑图为:

图片

DMA的数据传输经过S_AXI_HP接口,每一个HP接口都含有控制和数据fifo,这些fifo为大数据量突发传输提供缓冲,使得HP成为理想的高速数据接口。

对DMA的控制或配置通过M_AXI_GP接口(M代表master为PS),传输状态通过中断传达到PS的中断控制器。

关于GP接口在米联客和原子的教程中当时都没理解太透,现在对M_AXI_GP0理解是:

在ZYNQ7处理器系统IP core中,在PS-PL Configuration下的AXI Non Secure Enablement下有一个GP Master AXI Interface选项,可选一个M_AXI_GP0接口。

该接口的作用是对PL侧的IP core通过AXI-Lite总线进行配置,如果不仅需要的话直接不使能即可。

图片

图片

、AXI DMA IP简介

ZYNQ提供了两种DMA,一种是集成在PS中的硬核DMA,另一种是PL中使用的软核AXI DMA IP。

AXI DMA IP核在AXI4-Stream IP接口之间提供高带宽直接存储访问。其可选的scatter gather(SG,链式相关)功能还可以从基于处理器的系统中的中央处理单元(CPU)卸载数据搬运任务。初始化、状态和管理寄存器通过AXI-Lite从接口访问(即数据发出方为PL,PS为Slave),核心功能组成为(这张图很有助于理解DMA中断以及SDK代码,下面会解释):

图片

原图位于AXI_DMA数据手册的第五页。

AXI DMA使用了三种总线,分别是:

(1)、AXI Memory Map,用于内存交互,AXI4 Memory Map Read用于从DMA读取,AXI4 Memory Map用于向DMA写入。

(2)、AXI4-Lite同于对寄存器的配置。

(3)、AXI4-Stream接口用于对外设的读写,S2MM(Stream to Memory Mapped,数据流向内存映射)用于对外设读取。AXI_MM2S和AXI_S2MM是AXI_Stream总线,可以发送和接收连续的数据流,无需地址。

AXI DMA提供3种模式:

(1)、Direct Register模式:用于在MM2S和S2MM通道上执行简单的DMA传输,小的FPGA资源少。有两个通道:一个从Device到DMA,另一个从DMA到Device。应用程序必须设置缓冲区地址和长度字段以启动相应通道中的传输。

(2)、Scatter/Gather模式:允许在单个DMA事务中将数据传输到多个存储区域传输数据。

(3)、Cyclic DMA模式:

四、AXI DMA参数与接口分析

图片

1、接口分析:

(1)、M_AXI_MM2S:DMA的读通道,从DDR中读取数据。受Enable Read Channel控制,表现为M_AXI_MM2S。

(2)、M_AXI_S2MM:DMA的写通道,将数据写入DDR中。受Enable Write Channel控制,表现为M_AXI_S2MM。

(3)、M_AXIS_MM2S:DMA将数据发送到具有stream接口IP。

(4)、S_AXIS_S2MM:DMA将数据从具有Stream接口的IP中将数据读入。

(5)、mm2s_introut:DMA将数据从DDR的映射单元中读出,然后将数据发送到具有Stream接口的IP完成信号。

(6)、s2mm_introut:DMA将数据从具有stream接口的IP中读入,并写入到内存映射单元的完成中断信号。

2、参数分析

图片

(1)、Enable Scatter Gatter Engine

链式DMA操作,取消选中该选项可启用directregister模式操作。

(2)、Enable Micro DMA

改选项会生成高度优化的DMA,资源数量较少,用于传输极少量数据的应用程序。

(3)、Width of Buffer Length Register

根据IP手册pg021,在direct register模式下,此整数值用于指定控制字段缓冲区长度的有效位数,字节数等于2^(width),即字节读取和字节写入的有效长度都是2^(width)。比如宽度设置为26,可传输的字节数为2^(26)字节。(pg021,78页)。

(4)、Address Width

       指定地址空间的宽度,默认32。

(5)、Enable Read Channel

      Memory Map Data Width:AXI MM2S存储映射读取总线的数据位宽,可为32、64、128、256、512、1024。

Stream Data Width:AXI MM2S AXI-Stream数据总线的位宽,该值必须小于等于Memory Map Data Width,可以为8、16、32、64、128、512、1024。

Max Burst Size:最大突发长度设置,指定的是MM2S的AXI4-Memory Map侧的突发周期的最大值,可为2、4、8、16、32、64、128、256。

(6)、Enable Write channel:同Read channel。

3、关于中断的理解

(1)、M_AXI_MM2S:DMA的读通道,从DDR中读取数据。受Enable Read Channel控制,表现为M_AXI_MM2S。

在AXI_DMA ip core的输出信号中,有两个中断信号,分别是s2mm_introut和mm2s_introut,mm指的是Memory Mapped,S指的是Stream。

Memory Map指的是什么?根据AXI DMA的介绍,AXI DMA提供一个介于AXI4 Memory Mapped 与AXI4 Stream IP之间的高带宽DMA:

原话位于IP参考的page5:

The AXI DirectMemory Access (AXI DMA) IP core provides high-bandwidth direct memory accessbetween the AXI4 memory mapped and AXI4-Stream IP interfaces.

所以,对于DMA来说,S2MM,就是Stream形式的数据到达DDR映射空间,具体的实现方式是Stream数据流先进入DMA,之后再从DMA到Memeory Mapped。

MM2S是Memory Mapped将数据送入具有AXI Stream接口的IP。

从这里分析mm2s_introut与s2mm_introut信号的区别是分析不出来的,因为数据都是先到DMA,再从DMA发送出去。

在第5页还有一张图,讲述AXI DMA的架构:

图片

分析这张图,DDR内存映射空间的读写都是通过AXI4Memory Map完成的,也就是说s2mm与mm2s的重点不在PS DDR侧,重点在PL侧,当Stream接口的数据将输出传到DMA时候,这个过程叫做DMA的接收,DMA将映射单元的数据写到stream接口的IP,这个过程叫做DMA的发送。

所以!也就可以理解在SDK中将s2mm_introut定义为DMA接收中断,将mm2s_introut定义为发送中断了!

所以以下语句就很容易理解了:

// DMA接收通道的中断ID

#define RX_INTR_ID         XPAR_FABRIC_AXIDMA_0_S2MM_INTROUT_VEC_ID

#define TX_INTR_ID         XPAR_FABRIC_AXIDMA_0_MM2S_INTROUT_VEC_ID

  • 15
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值