热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XilinxDMA的几种方式与架构

DMA是directmemoryaccess,在FPGA系统中,常用的几种DMA需求:1、在PL内部无PS(CPU这里统一称为PS)持续干预搬移数据,常见的接口形态为AXIS与AX

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的架构方式,搭建属于自己的片上系统架构。

FPGA, PCIe,ZYNQ, C#,C++ 2897551649@qq.com



推荐阅读
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 本文介绍了一种算法,用于在一个给定的二叉树中找到一个节点,该节点的子树包含最大数量的值小于该节点的节点。如果存在多个符合条件的节点,可以选择任意一个。 ... [详细]
  • 本文将指导你如何通过自定义配置,使 Windows Terminal 中的 PowerShell 7 更加高效且美观。我们将移除默认的广告和提示符,设置快捷键,并添加实用的别名和功能。 ... [详细]
  • DropBlock:一种卷积网络的正则化技术
    本文详细探讨了DropBlock这一正则化方法在卷积神经网络中的应用与效果。通过结构化的dropout方式,即在特征图中连续区域内的单元同时被丢弃,DropBlock有效解决了传统dropout在卷积层应用时效果不佳的问题。更多理论分析及其实现细节可参考原文链接。 ... [详细]
  • 5G时代的广域网革新:企业迈向万物智联的新起点
    随着2020年初“新基建”概念的提出,以5G、AI、IoT等为核心的新型基础设施建设正逐步改变企业的运营模式。本文探讨了在这一背景下,企业广域网(WAN)如何通过5G与SD-WAN技术的融合实现转型升级,成为推动企业智能化、数字化发展的关键力量。 ... [详细]
  • SecureCRT 使用指南与技巧
    本文详细介绍 SecureCRT 软件的基本功能,并分享了一些实用的操作技巧,旨在帮助用户提高远程管理效率。 ... [详细]
  • 本文探讨了在使用Apache Flink向Kafka发送数据过程中遇到的事务频繁失败问题,并提供了详细的解决方案,包括必要的配置调整和最佳实践。 ... [详细]
  • Web网络基础
    目录儿1使用HTTP协议访问Web2HTTP的诞生2.1因特网的起源2.2互联网、因特网与万维网2.3万维网与HTTP3网络基础TCPIP3.1TCPIP协议族3.2TCPIP的分 ... [详细]
  • 酷家乐 Serverless FaaS 产品实践探索
    本文探讨了酷家乐在 Serverless FaaS 领域的实践与经验,重点介绍了 FaaS 平台的构建、业务收益及未来发展方向。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 深入解析 RuntimeClass 及多容器运行时应用
    本文旨在探讨RuntimeClass的起源、功能及其在多容器运行时环境中的实际应用。通过详细的案例分析,帮助读者理解如何在Kubernetes集群中高效管理不同类型的容器运行时。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04
    雨林木风 GHOST XP SP3 经典珍藏版 YN2014.04 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
author-avatar
温蚊童鞋_612
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有