Xilinx DMA的几种方式与架构
DMA是direct memory access,在FPGA系统中,常用的几种DMA需求:
1、 在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AXI,AXI与AXI;
2、 从PL与PS之间搬移数据,对于ZYNQ就比较好理解,属于单个芯片内部接口,对于PCIe等其它接口,会稍微复杂一些,属于多个芯片之间的接口;
探索DMA 方式的目的:
1、 了解芯片内部数据搬移的方法,DMA的常用接口、实现方式;
2、 了解芯片之间的数据搬移方法,DMA常用接口、实现方式;
通过这些了解,可以建立一个系统数据搬移的框架结构,那么出现类似的需求,实际上就只要做的就是调用已有的模块去实现它。
本文从Xilinx的各个DMA IP着手介绍,主要从接口的角度来着眼。
1 AXI4 TO AXI4
1.1 AXI Central DMA Controller
The AXI CDMA provides high-bandwidth Direct Memory Access (DMA) between a memory-mapped source address and a memory-mapped destination address using the AXI4 protocol. An optional Scatter Gather (SG) feature can be used to offload control and sequencing tasks from the system CPU. Initialization, status, and control registers are accessed through an AXI4-Lite slave interface, suitable for the Xilinx MicroBlaze processor.
为啥叫CDMA,实际上是为了处理CPU挂载的AXI 接口内存内部的数据传输,典型的场景是MicroBlaze,为啥不说ZYNQ呢?ZYNQ的AXI 内部是直接挂载在CPU内部的,不需要一个DMA去控制,需要的话直接软件copy,copy的动作就会内部发起一次AXI DMA的操作。但是如果ZYNQ想要用PL侧的DDR,那么就得用CDMA去操作,因为ZYNQ没有AXI Master的接口,只有SLAVE(这里说的都是高性能HP接口,不是GP低速接口)。

图 1‑1 AXI CDMA接口与参数选项,其中S_AXI_LITE连接到主控CPU,M_AXI连接到存储器,M_AXI_SG连接到存储器(用于存储SG DMA模式下的dma descriptor)

图 1‑2 CMDA内部结构框图

图 1‑3 ZYNQ框图,只有高性能的AXI SLAVE,没有MASTER
我们来看看内部寄存器,这个实际上更加直观,告诉了用户使用该模块的配置方法,从配置方法可以简单估计使用该模块的复杂程度。从寄存器定义来看,控制、状态检测,SG DMA的descriptor指针,简单DMA的起始地址,目标地址,长度,使用起来并不复杂。那么对应的软件代码建议直接copy xilinx的ZYNQ侧driver代码,然后自己稍微改一改就可以用起来。

最后再来看看资源占用情况,资源占用与位宽成正比,典型的在64bit数据位宽下,占用大约1500个LUT,2500个FF,从我的角度看,这个资源相当不错。

图 1‑4 资源占用

图 1‑5 传输效率、带宽
2 AXI Stream to AXI4
2.1 AXI DataMover
The AXI Datamover is a key Interconnect Infrastructure IP which enables high throughput transfer of data between AXI4 memory mapped domain to AXI4-Stream domain. The AXI Datamover provides MM2S and S2MM AXI4-Stream channel which operate independently in a full duplex like method. The AXI Datamover is a key building block for the AXI DMA core and enables 4 kbyte address boundary protection, automatic burst partitioning, as well as providing the ability to queue multiple transfer requests using nearly the full bandwidth capabilities of the AXI4-Stream protocol. Furthermore, the AXI Datamover provides byte-level data realignment allowing memory reads and writes to any byte offset location.
AXI Datamover是一个重要的基础IP,Xilinx 所有的DMA IP基本都包含这个模块,该模块可以将AXIS与AXI格式的数据进行转换。
类似XDMA,VDMA, AXI DMA, AXI MCDMA等几乎所有DMA IP均包含该模块,如果xilinx的这些已有DMA不能满足需求,那么用户就可以自行设计1各DMA控制器完成DMA操作。

图 2‑1 AXI Datamover 接口与配置项

图 2‑2 MM2S读数据通道,读取AXI4接口数据,转换成AXIS数据输出

图 2‑3 S2MM写数据通道, AXIS数据输入,转换成AXI4数据写到到AXI4接口存储器

图 2‑4 资源占用
2.2 AXI DMA Controller
The AXI Direct Memory Access (AXI DMA) IP provides high-bandwidth direct memory access between memory and AXI4-Stream-type target peripherals. Its optional scatter gather capabilities also offload data movement tasks from the Central Processing Unit (CPU) in processor based systems. Initialization, status, and management registers are accessed through an AXI4-Lite slave interface.
简而言之,AXI DMA Controller为AXIS和AXI4接口的转换(数据存储)提供了一个可由软件控制(通过AXI Lite接口实现)的简单方式。

图 2‑5 AXI DMA内部框图
这里需要说明一下:如果选择不使能SG DMA模式,而是单纯的寄存器控制模式,对于AXI DMA这个IP来说,资源占用会减少,性能会降低(Xilinx其它的DMA IP也是类似的),为什么性能会降低呢?这是因为寄存器模式不支持预先设定传输指令,只能等一次传输结束后开启下一次传输,这就降低了带宽,增加了CPU的干预。不过这种模式也最为简单,还是要看设计中的传输要求。
我们来看一眼寄存器表格,表格列出了SG DMA和寄存器DMA 2种方式下的寄存器,从表中可以看出,要实际使用AXI DMA并不复杂,不过我还是建议直接抄Xilinx SDK的驱动代码,裸机驱动、example就可以,简单直接、易用。

图 2‑6 表中给出了SG模式和寄存器模式下的相关寄存器及其含义

图 2‑7 资源占用上来看,还是不少的

图 2‑8 延迟、性能、带宽数据,带宽数据还不错,一般来说能做到80%是很好的,读比写快,因此MM2S的带宽接近100%,S2MM只有75%
2.3 AXI Multichannel DMA
简单来说,就是AXI DMA的多通道版本,是为了应对多通道、低速的数据传输,AXI MCDMA最多支持双向各16通道,且各个通道间相互独立,允许单独配置,这个给很多低速、多功能的应用提供了一个小面积FPGA的解决方案。
由于AXI MCDMA是AXI DMA的多通道版本,因此不做过多介绍。
The AXI MCDMA facilitates large data migration, offloading the task from the embedded processor. It sits as an intermediary between an AXI Memory-Mapped embedded subsystem an AXI Streaming subsystem. The MCDMA IP is full-duplex, scatter-gather, and supports up to 16 channels. It may be configured as weighted round robin or strict priority

图 2‑9 AXI MCDMA结构框图
2.4 AXI Video DMA
The AXI Video Direct Memory Access (AXI VDMA) core is a soft Xilinx IP core that provides high-bandwidth direct memory access between memory and AXI4-Stream type video target peripherals. The core provides efficient two dimensional DMA operations with independent asynchronous read and write channel operation. Initialization, status, interrupt and management registers are accessed through an AXI4-Lite slave interface.
为什么有了AXI DMA还要由AXI VDMA呢?从下面这段话可以看出原因,Xilinx的video处理,多用AXIS格式,而实际应用中很多需要改变帧速率、缓存帧的需求,直接用AXI DMA不是不可以,只是不能很好的和其它AXIS接口的Video IP匹配,因此专门开发了AXI VDMA,主要是为了缓存图像帧,有朋友要问,不能用BRAM缓存嘛?不能,因为图像对应的1各frame可能很大,用BRAM资源不够。
AXI VDMA的使用方式与其它DMA IP大同小异,这里不做更多介绍,要用的可以直接查看官方手册。

3 PCIe DMA
Xilinx 为PCIe接口也推出了AXI DMA接口,对应为Xilinx DMA for PCIe,同理,类似USB, SRIO等其它接口,用户也可以设计出类似的DMA解决方案,构建高可靠、灵活的系统内部架构。
The Xilinx LogiCORE DMA for PCI Express (PCIe) implements a high performance, configurable Scatter Gather DMA for use with the PCI Express Integrated Block. The IP provides an optional AXI4-MM or AXI4-Stream user interface

图 3‑1 XDMA接口与参数配置项

图 3‑2 XDMA内部框图
那么XDMA可以做什么事情呢?那可多了,有了这个模块,你的PCIe Endpoint设备就可以构建在AXI总线的基础之上,就有了1个灵活、可靠、高性能的片上系统架构。
4 启发
用户可以根据Xilinx DMA的框图架构,在AXI, AXIS接口的互联下,构建灵活可靠的FPGA系统,如果这些IP无法满足要求,还可以模仿PCIe XDMA等IP的架构方式,搭建属于自己的片上系统架构。
Xilinx DMA的几种方式与架构的更多相关文章
- 架构设计哲学【三种方式:支持DevOps的原则】
三种方式:支持DevOps的原则 2012年8月22日作者Gene Kim 45条评论 这篇文章是杨波老师分享的一篇文章:这几年对他架构影响最深的一篇文章.主要描述是关于DevOps的,但对系统架构同 ...
- 在基于MVC的Web项目中使用Web API和直接连接两种方式混合式接入
在我之前介绍的混合式开发框架中,其界面是基于Winform的实现方式,后台使用Web API.WCF服务以及直接连接数据库的几种方式混合式接入,在Web项目中我们也可以采用这种方式实现混合式的接入方式 ...
- WebService的两种方式Soap和Rest比较
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- WebService的两种方式SOAP和REST比较 (转)
我的读后感:由于第一次接触WebService,对于很多概念不太理解,尤其是看到各个OpenAPI的不同提供方式时,更加疑惑.如google map api采用了AJAX方式,通过javascript ...
- 简介C#读取XML的两种方式
简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...
- 序列化和反序列化的几种方式(JavaScriptSerializer 、XmlSerializer、DataContractSerializer)(一)
JavaScriptSerializer 类 为启用 AJAX 的应用程序提供序列化和反序列化功能. 命名空间: System.Web.Script.Serialization 程序集: Sys ...
- Spring获取ApplicationContext方式,和读取配置文件获取bean的几种方式
转自:http://chinazhaokeke.blog.163.com/blog/static/109409055201092811354236 Spring获取ApplicationContex ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 常见的三种Web服务架构
常见的三种Web服务架构 转自http://www.cnblogs.com/bvbook/archive/2008/12/24/1360942.html 相互竞争的服务架构 The Competing ...
随机推荐
- Qt QTableView 表格内添加控件
目录 Qt QTableView 表格内添加控件 1. QItemDelegate 2. setIndexWidget 3. setIndexWidget + setLayout Qt QTableV ...
- 在Blazor中实现拖放(drag and drop)
前言 我在实现一个含有待办列表功能的页面时,发现了一个好看的设计,它将待办分为--"待办","正在进行",和"已完成"三种状态,并且将待办通 ...
- java高级用法之:JNA类型映射应该注意的问题
目录 简介 String Buffers,Memory,数组和Pointer 可变参数 总结 简介 JNA提供JAVA类型和native类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际 ...
- 【GPLT】 2018年天梯赛全国总决赛 L2-2 小字辈(c++)
题目: 这一题并不是很难,属于常规的图论遍历题,这里我是用的bfs(dfs应该也可以,但明显bfs简单一些). 本人写的时候写了很多没必要头文件,自己可以根据内容删去,必要的我会写上注释 如有错误,请 ...
- ps、top命令查找不到进程的解决方案
netstat -anpt发现一个奇怪的连接,但是ps和top命令确查不到此进程,这很可能是因为因为ps和top命令被替换了导致这些进程被过滤掉了.因此我这里有个脚本专门查找出来隐藏的进程 #!/us ...
- 从0开始用webpack开发antd,react组件库npm包并发布
一.初始化一个npm包 1.新建一个文件夹(名称随意,建议和报名一致),输入命令 :npm init -y 会自动生成一个包的说明文件 package.json如下(本文以scroll-antd-ta ...
- redis的zset数据结构:跳表
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 广州这边封闭式管理好久了,今天终于周末可以出去溜溜了 什么是zset z ...
- 拖动元素调换位置——sortable.js
使用简介: https://github.com/SortableJS/Sortable https://segmentfault.com/a/1190000008209715 /**! * Sort ...
- SQL注入的几种类型
SQL注入就是: 将构造SQL语句来插入到web提交的数据之中,让其返回数据时运行自己构造的恶意SQL语句. SQL注入构造恶意SQL语句的方法有: 构造堆叠,构造闭合,构造报错,构造时间差,等等 S ...
- 哈工大软件构造Lab1(2022)
目录 一.实验目标概述 二.实验环境配置 1.安装编写java程序的IDE--IntelliJ IDEA 2.安装Git 3.安装Junit 4.GitHub Lab1仓库的URL地址 三.实验过程 ...