ZYNQ-AXI DMA IP简介

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 small 3个月
推荐场景:
数据库上云
数据传输服务 DTS,数据同步 1个月
简介: ZYNQ-AXI DMA IP简介

学习内容


本文主要介绍关于AXI DMA的IP核相关内容。

DMA简介


DMA(Direct Memory Access,直接存储器访问)是计算机中一种内存访问技术。它允许某些硬件子系统可以独立地直接读写系统内存,而不需中央处理器( CPU)介入处理。

DMA 是用硬件实现存储器与存储器之间或存储器与 I/O 设备之间直接进行高速数据传输。 使用 DMA时, CPU 向 DMA 控制器发出一个存储传输请求, 这样当 DMA 控制器在传输的时候, CPU 执行其它操作,传输操作完成时 DMA 以中断的方式通知 CPU。

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

  • 源地址 — 数据被读出的地址。
  • 目的地址 — 数据被写入的地址。
  • 传输长度 — 应被传输的字节数。

image.png

  • DMA 存储传输的过程如下:
  1. 配置用 DMA 传输数据到存储器,处理器发出操作DMA的指令/代码。
  2. DMA 控制器把数据从外设传输到存储器或从存储器到存储器,而让 CPU 腾出手来做其它操作。
  3. 数据传输完成后,向 CPU 发出一个中断信号来通知它 DMA 传输可以关闭了。

AXI DMA IP简介


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

AXI DMA IP提供内存和AX14-Stream接口的目标外设之间的高带宽直接内存访问。它可以选择scatter/gather模式进行数据的传输搬移,可将CPU从数据搬运任务中解放出来。

功能框图


IP的功能框图如下:

image.png

由框图可知,通过AXI4-Lite从接口访问初始化、状态并控制和管理寄存器。MM2S接口完成MemoryMap to Stream 的转换,即存储器映射转换到AXI4-Stream接口转换。同理S2MM接口完成Stream to MemoryMap的转换,即AXI4-Stream接口转换到存储器映射转换。图中标注的三个接口只有在S/G模式下才会生成那三个接口进行IP的控制读写以及数据交互。

典型设计解读


在IP的指导手册中有下图这样的一个控制AXI DMA IP的设计系统。在图中我们可以看到,对于处理器(microblaze),只需要使用少量的控制指令,即可完成高速的多数据传输。处理器(microblaze)通过interconnect互联模块连接到AXI4-Lite接口,进行IP的寄存器配置。在AXI DMA IP的完成数据传输时,通过MM2S_IntrOut,S2MM_IntrOut指示数据传输完成,并发送给处理器进行进一步操作。在图中的系统AXI DMA IP使能了S/G模式,该存储器映射接口通过互联模块连接到DDR控制端口,ctrStrm(控制Stream)、StatusStrm(判断Stream状态)和SG R/W是在SG模式下使用的三个端口。剩下的MM2S和S2MM进行数据的交互和传输。

image.png

时钟要求


AXI DMA IP,对于不同芯片信号的不同速度、等级下的最大时钟频率有不同的要求。在进行设计开发时,要根据设计芯片的具体型号满足时序要求,避免出现时序伪例的现象。

image.png

对于时钟的输入端口,有以下端口:

  • m_axi_mm2s_aclk for MM2S interface
  • m_axi_s2mm_aclk for S2MM interface
  • s_axi_lite_aclk for AXI4-Lite control interface
  • m_axi_sg_clk for Scatter Gather Interface

AXI DMA提供两种时钟模式,同步模式和异步模式。

同步模式: 所有的逻辑都连接在一个单一的时钟源,m_axi_mm2s_aclk、m_axi_s2mm_aclk、m_axi_sg_clk必须在一个相同的时钟源下,s_axi_lite_aclk可以连接到更低的时钟。

异步模式: 所有逻辑都可以是异步的,但是s_axi_lite_aclk必须小于或等于m_axi_sg_aclk的时钟频率, m_axi_sg_aclk必须小于或等于m_axi_mm2s_aclk或m_axi_s2mm_aclk的时钟。

在异步模式下,这四类时钟信号所影响到的接口信号,(在SG模式下和单一传输模式)如下图所示:

image.png

复位


axi_resetn信号需要持续至少16个最慢的时钟周期,并且需要和s_axi_lite_aclk保持同步。

编程指导


在AXI DMA IP中,一共有三个模式可以进行编程配置:

  • Direct Register Mode (Simple DMA)
  • Scatter/Gather Mode
  • Cyclic DMA Mode

Direct Register Mode (Simple DMA)


简单DMA模式,该模式下,提供了在MM2S和S2MM通道上进行简单的DMA传输的配置。只需要较少的FPGA资源,通过访问DMACR、源地址或者目的地址和长度寄存器发起DMA的传输。当传输完成后,如果使能了产生中断输出,那么DMASR寄存器相关联的通道位会有效,即产生中断输出。

DMA的MM2S通道启动顺序:

  1. 设置运行/停止位为1 (MM2S_DMACR.RS=1),启动MM2S通道运行。 停止位(DMASR.Halted)应该取消上拉,表示MM2S通道正在运行。
  2. 可以通过向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn写入1来启用中断。 当AXI DMA配置为Direct Register 模式时,延迟中断、延迟计数和阈值计数不被使用。
  3. 向MM2S_SA寄存器写入有效的源地址。 如果AXI DMA配置的地址空间大于32,则对MM2S_SA MSB寄存器进行编程。如果AXI DMA没有配置为数据重新对齐,则必须对齐有效地址,否则将出现未定义的结果。认为对齐是或非对齐是基于数据流的宽度。当在Micro 模式下配置AXI DMA时,要进行指定正确的地址。在Micro 模式下配置AXI DMA时,是不关心4K边界的。例如,如果内存映射数据宽度= 32,则如果数据位于字偏移(32位偏移),即Ox0、0x4、0x8、OxC,等等,则数据对齐。如果DRE使能,并且数据宽度小于128,那么源地址可以是任何字节偏移量。
  4. 在MM2S LENGTH寄存器中写入要传输的字节数。 写为零的值没有任何效果。如果该值不为零,则MM2S LENGTH决定了从MM2S AXI4接口读取并输出到MM2S AXI4- stream接口传输的数据个数。MM2S_LENGTH寄存器必须最后写入。 所有其他MM2S寄存器都可以按任意顺序写入。在Micro DMA下,此值不能超过[突发长度*(内存映射数据宽度)/8]。

DMA的S2MM通道启动顺序:(类似MM2S通道启动顺序)

  1. 开启/使能S2MM通道
  2. 如果需要,可以使能中断
  3. 写一个有效的源地址到S2MM_SA寄存器,如果没有使能DRE功能,在指定起始地址时,要注意字节地址对齐,哪些地址对齐不对齐取决于Stream流的数据位宽。
  4. 写传输的字节数到LENGTH寄存器。一个长度为0的值是无效的,而一个非0的值将决定存储器映射到Stream流的数据个数。S2MM_LENGTH寄存器必须最后写入。

Scatter/Gather Mode


S/G模式下,AXI DMA操作需要一个存储DMA操作列表的内存驻留数据结构。这个指令列表被组织成所谓描述符链。每个描述符都有一个指向下一个要处理的描述符的指针。链中的最后一个描述符指向链中的第一个描述符。

S/G模式允许一个包被多个描述符描述。此特性的典型用途是允许从内存中的一个位置存储或获取头,并从另一个位置存储有效数据。利用这一点的程序可以提高吞吐量。利用帧起始位(TXSOF)和帧结束位(TXEOF)来描述缓冲区描述符链中的数据包。当DMA获取一个设置了TXSOF位的描述符时,将触发包的开始。包继续获取后续的描述符,直到获取一个设置了TXEOF位的描述符。

在接收(S2MM)通道上,当数据包开始被接收时,AXI DMA用RXSOF标记描述符,指示软件与此描述符相关联的数据缓冲区,包含数据包的开始。如果正在接收的包的字节数比描述符中指定的更长,则使用下一个描述符缓冲区来存储接收包的其余部分。这个获取和存储过程继续进行,直到整个接收包被传输完毕。接收包结束时正在处理的描述符被AXI DMA标记为RXEOF=1。这向软件表明,与此描述符相关联的缓冲区包含包的结尾。

每个描述符的状态字段包含为特定描述符实际传输的字节数。该软件可以通过从RXSOF描述符遍历描述符链到RXEOF描述符来确定接收包传输的总字节数。Scatter Gather继续获取一个额外的描述符并存储。这个过程在很大程度上改善了DMA性能。

S/G模式从设置控制寄存器和描述符指针开始。简单来说,就是把传输的基本参数存储到内存中;这些参数被称为BD(Buffer Descriptor),在工作时,通过SG的接口进行加载和更新BD的状态从而进行对指定的位置的数据进行读写操作。

MM2S通道的DMA操作通过以下顺序建立和启动:

  1. 将起始描述符的地址写入当前描述符寄存器。 如果AXI DMA被配置为大于32的地址空间,那么也对当前描述符的MSB的32位进行编程。
  2. 设置运行/停止位为1 (MM2S_DMACR.RS=1),启动MM2S通道运行。 停止位(DMASR.Halted)应该取消上拉,表示MM2S通道正在运行。
  3. 可以通过向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn写入1来启用中断。
  4. 向尾部描述符寄存器写入一个有效地址。 如果AXI DMA被配置为大于32的地址空间,那么也对尾部描述符的MSB 32位进行编程。
  5. 写入尾描述符寄存器将触发DMA开始从内存中获取描述符。 在多通道配置的情况下,当数据包到达S2MM通道时开始获取描述符。
  1. 对获取的描述符进行处理,数据从内存中读取,然后输出到MM2S流通道。

S2MM通道的DMA操作通过以下顺序建立和启动:

  1. 将起始描述符的地址写入当前描述符寄存器。 如果AXI DMA被配置为大于32的地址空间,那么也对当前描述符的MSB 32位进行编程。
  2. 设置运行/停止位为1 (S2MM_DMACR.RS=1),启动S2MM通道运行 停止位(DMASR.Halted)应该取消上拉,表示MM2S通道正在运行。
  3. 可以通过向MM2S_DMACR.IOC_IrqEn和MM2S_DMACR.Err_IrqEn写入1来启用中断。
  4. 向尾部描述符寄存器写入一个有效地址。 如果AXI DMA被配置为大于32的地址空间,那么也对当前描述符的MSB 32位进行编程。
  5. 写入尾描述符寄存器将触发DMA开始从内存中获取描述符。
  6. 对获取的描述符进行处理,并将从S2MM流通道接收的任何数据写入内存。

Cyclic DMA Mode


通过对缓冲区描述符(BD)链设置进行某些更改,AXI DMA可以以循环模式运行。在循环模式下,DMA不中断地获取和处理相同的BDs。DMA继续获取和处理,直到停止或重置为止。为了使循环运行,BD链的设置如下图所示:

image.png

在这个设置中,Tail BD指向第一个BD, Tail Descriptor(尾描述寄存器)没有任何用途,仅用于触发DMA。遵循在S/G模式中提到的相同编程顺序。确保控制寄存器中的循环位已设置。在编写了Tail Descriptor寄存器之后,DMA开始获取和处理BDs(以环形方式设置),直到DMA停止或重置。

Reference


  1. PG021_axi_dma
  2. 正点原子开发视频
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
存储 缓存 测试技术
ZYNQ-AXI Interconnect IP介绍
ZYNQ-AXI Interconnect IP介绍
1509 0
ZYNQ-AXI Interconnect IP介绍
|
存储 网络性能优化 vr&ar
深入理解AMBA总线(十七)AXI是如何提高性能的
深入理解AMBA总线(十七)AXI是如何提高性能的
2004 1
|
安全 物联网 数据安全/隐私保护
深入理解AMBA总线协议(AXI总结篇)
深入理解AMBA总线协议(AXI总结篇)
1548 1
|
存储 SoC
深入理解AMBA总线(十一)AXI协议导论
深入理解AMBA总线(十一)AXI协议导论
1692 0
|
存储 安全
深入理解AMBA总线(四)AHB-lite总线
深入理解AMBA总线(四)AHB-lite总线
1117 0
|
芯片
深入理解AMBA总线(一)APB总线入门(上)
深入理解AMBA总线(一)APB总线入门
1076 0
|
网络性能优化
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
深入理解AMBA总线(十九)AXI4新增信号以及AXI4-lite
720 0
|
vr&ar SoC 内存技术
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
深入理解AMBA总线(十二)AXI突发传输和AXI控制信号
1537 0
|
SoC 内存技术
深入理解AMBA总线(五)AHB-lite Transfer进阶
深入理解AMBA总线(五)AHB-lite Transfer进阶
675 0
|
vr&ar 内存技术
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
深入理解AMBA总线(十八)一个简单的AXI2SRAM设计
599 0