XDMA原理学习(1)——DMA技术详解

目录

一、什么是DMA?为什么需要DMA?

二、DMA分类

2.1 Block DMA

2.2 Scatter-Gather DMA

2.3 Ring buffer DMA

三、实际案例

3.1 STM32微处理器

3.1.1 Block DMA

3.1.2 Scatter-Gather DMA

3.1.3 使用场景举例:

3.1.4 配置与实现

3.2 FPGA

3.2.1 FPGA中DMA的实现方式

3.2.1.1 IP核集成

3.2.2.2 自定义DMA控制器

3.2.2 AXI DMA IP

3.2.3 XDMA


一、什么是DMA?为什么需要DMA?

        DMA 技术是Direct Memory Access的缩写,其意思是“存储器直接访问”。它是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。DMA 是所有现代计算机的重要特色,它允许不同速度的硬件设备进行沟通,而不需要依于中央处理器的大量中断负载。否则,中央处理器需要从来源把每一片段的数据复制到寄存器,然后把它们再次写回到新的地方。在这个时间里,中央处理器就无法执行其它的任务。

        DMA 是用硬件实现存储器与存储器之间或存储器与 I/O 设备之间直接进行高速数据传输。使用 DMA 时,CPU 向 DMA 控制器发出一个存储传输请求,这样当 DMA 控制器在传输的时候,CPU 执行其它操作,DMA完成后必须以合理的方式通知CPU,那么现有的方式主要依赖中断和轮询两种模式。在高性能下更倾向于使用轮询或者半轮询机制。

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

源地址:数据被读出的地址

目的地址:数据被写入的地址

传输长度:应被传输的字节数

        DMA 存储传输的过程如下:

  1. 为了配置用 DMA 传输数据到存储器,处理器发出一条 DMA 命令
  2. DMA 控制器把数据从外设传输到存储器或从存储器到存储器,而让 CPU 腾出手来做其它操作。
  3. 数据传输完成后,向 CPU 发出一个中断来通知它 DMA 传输可以关闭了。

二、DMA分类

        一般情况下,大家都只需要从使用层面来理解如何使用DMA,但是在本文中,我们希望从底层原理的角度,来详细理解DMA的设计和原理。目前常见的几种DMA设计大致可以分成:(1)Block DMA(2)Scatter-Gather DMA(3)Ring buffer DMA

2.1 Block DMA

        Block DMA 也被称为阻塞式DMA。Block DMA在一次DMA操作中仅能操作一块物理地址连续的数据块。Block DMA 的驱动程序和硬件交互时具有阻塞式的特点:驱动程序在启动一次 DMA 操作后,直到本次操作完成前,不能下发下一次的操作请求。这样一来,当驱动程序准备数据时,DMA 处于空闲状态;当 DMA 处于操作转态时,驱动程序处于空闲状态,因此其性能较低。

工作原理

  1. 初始化:CPU设置DMA控制器的源地址(数据来源)、目的地址(数据去向)、以及要传输的数据块大小。

  2. 传输启动:DMA控制器接管控制权,开始数据传输过程。在这个过程中,CPU不需要进行数据移动的操作。

  3. 连续传输:DMA控制器连续地从源地址读取数据,并将其写入目标地址,直到整个数据块被传输完成。

  4. 传输结束:一旦数据块传输完成,DMA控制器会通过中断信号通知CPU传输已经结束,CPU可以处理其他任务或对传输的数据进行后续处理。

 

2.2 Scatter-Gather DMA

        Scatter-Gather DMA 是一种高级的直接存储器访问(DMA)技术,它允许从非连续的内存区域(scatter)读取数据并将其写入到一个连续的内存区域,或者从一个连续的内存区域读取数据并分散(gather)到多个非连续的内存位置。这种技术在处理多任务和高数据量的系统中非常有用,尤其是在内存布局不是连续分配的情况下。

        Scatter-Gather DMA,也称分散聚集式 DMA,分散聚集指的是它在一次 DMA 传输中将分散在主存中的多块内存空间通过链表的方式聚集在一起,从而实现在一次 DMA 传输中进行多次 DMA 操作。

        与 Block DMA 相比,SG DMA 在一次 DMA 传输中的操作流程更加复杂,SG DMA 首先发起一次 DMA 操作读取内存中的链表结构, 而后依次处理链表中指向的内存空间数据。可以看到,在小数据量的单次内存访问中, SG DMA 反而会带来额外的开销。但是在数据量较大时,Scatter-Gather DMA 可以提高主机中内存的利用率以及 DMA 传输的效率,因为 SG DMA 将多次 Block DMA 中 的软件硬件交互合并为一次,大大降低了由于多次中断带来的延迟和处理器消耗。

工作原理

  1. 描述符表:CPU或DMA控制器构建一个描述符表,这个表包含了多个内存块的地址和大小,这些内存块可能分布在物理内存的不同位置。

  2. DMA读写:DMA控制器根据描述符表中的信息,从多个源内存地址读取数据并将其合并写入单一目标地址,或者将数据从单一源地址读取后分散写入多个目标内存地址。

  3. 中断处理:数据传输完成后,DMA控制器通常会发出中断信号通知CPU,CPU随后进行后续处理。

2.3 Ring buffer DMA

        Ring buffer DMA(环形缓冲区直接存储器访问)是一种常用于流数据处理的DMA技术,特别适用于那些数据持续生成并需要周期性处理的场景,如音视频流处理、网络数据包处理等。环形缓冲区是一个逻辑上首尾相连的循环数据结构,这种结构使得DMA可以持续、高效地管理和传输数据,而不需要频繁的中断或复杂的内存管理操作。

        Ring Buffer DMA 也被称为队列式 DMA。RB DMA 引擎中的各个队列是独立的,并且绑定特定的 CPU 核心,以发挥多核心处理器的体系结构优势。此外,RB DMA 引擎还优化了主机和 DMA 之间的交互流程,RB DMA 使用描述符队列来完成主机与 DMA 之间的命令发布和事件通知。

特性/模式Block DMAScatter-Gather DMARing Buffer DMA
描述一次性传输整个数据块从非连续的内存区域收集数据到连续区域,反之亦然。使用环形缓冲区循环传输数据,适用于流数据处理。
数据连续性需要数据在内存中连续。适用于非连续内存区域的数据。数据循环在固定大小的缓冲区内,不需连续性。
效率高,因为是连续快速传输。高,特别是在内存碎片化时。高,通过减少中断提升处理速度。
CPU负担低,在DMA传输期间CPU可以执行其他任务。低,DMA控制器管理所有内存访问。低,自动处理数据流动,减少CPU干预。
应用场景大文件传输、大数据块处理。数据库系统、文件系统、网络通信。音视频流处理、网络数据包处理、实时系统。
内存管理简单,因为操作连续内存。复杂,需要高级的内存管理技术。中等,固定大小的缓冲区需事先配置。
同步机制通常不需要复杂同步,DMA结束后中断CPU。需要精确控制数据源和目标内存区域的同步。需要同步机制防止写入读取操作冲突。

三、实际案例

3.1 STM32微处理器

        在STM32微控制器中,通常使用的DMA模式包括Block DMA和Scatter-Gather DMA。这些模式被广泛应用于多种外设与内存间的数据传输任务,例如ADC(模拟数字转换器)、USART(通用同步异步接收发射器)、SPI(串行外设接口)等。

3.1.1 Block DMA

        Block DMA在STM32中非常常见,用于处理如SPI或USART等接口的大块数据传输。当数据需要在内存与外设间快速移动时,Block DMA可以一次性传输整个数据块,提高传输效率且减少CPU的负担。例如,从USART接收大量数据并存储到RAM的场景中,Block DMA可以连续传输所有数据而无需CPU介入。

3.1.2 Scatter-Gather DMA

        Scatter-Gather DMA在STM32中主要用于更复杂的数据管理任务,特别是当数据源分布在内存的不同区域时。这种模式允许DMA控制器从多个内存位置收集数据并发送到单一或多个目标,或者相反。STM32的DMA控制器支持多个通道和流,这使得Scatter-Gather操作更为高效,特别是在处理如网络数据包或多路ADC数据时。

3.1.3 使用场景举例:

  • Block DMA:在需要从内存缓冲区向外设如LCD或音频接口连续发送大量数据时使用。
  • Scatter-Gather DMA:在收集来自不同传感器的多个ADC通道数据到单一缓冲区,或者从一个缓冲区将数据分发到多个外设时使用。

3.1.4 配置与实现

        STM32通过其硬件库HAL或底层库LL提供对DMA的支持,使得开发者可以根据需求配置DMA传输类型。配置通常涉及设定源地址、目标地址、传输方向、传输大小、优先级等参数。这些配置可以通过STM32CubeIDE工具链或直接通过编程实现,具体取决于应用的复杂度和性能要求。总结来说,STM32中的DMA使用情况较为灵活,可以根据外设类型和具体应用需求选择合适的DMA模式。

3.2 FPGA

        在FPGA(现场可编程门阵列)中,DMA(Direct Memory Access)的使用是一种高效的数据管理技术,尤其在处理高速数据流和大量数据传输时。FPGA通过DMA可以直接从内存读取或写入数据,而无需CPU干预,这样大大提高了数据处理的速度和系统的总体性能。

3.2.1 FPGA中DMA的实现方式

3.2.1.1 IP核集成

        FPGA通常使用现成的DMA IP核来实现高效的数据传输。这些IP核可以通过FPGA开发工具,如Xilinx的Vivado或Intel的Quartus,进行配置和集成。IP核可以配置为支持多种DMA模式,如简单的单次传输、突发传输或更复杂的Scatter-Gather DMA。

3.2.2.2 自定义DMA控制器

        对于特殊的应用需求,开发者可能会使用Verilog或VHDL来自定义DMA控制器逻辑。自定义DMA控制器允许精细控制数据的流动、优先级管理和错误处理。

        以下举两个典型的例子来进一步介绍FPGA中DMA的使用。

3.2.2 AXI DMA IP

        AXI DMA (Direct Memory Access) IP是专为Xilinx FPGA设计的一种高性能、高通量数据传输接口,基于AXI (Advanced eXtensible Interface) 总线标准。这种IP核广泛用于需要高速数据传输的FPGA应用中,如数据采集、图像处理、网络通信等。AXI DMA IP支持高效的内存到内存、外设到内存以及内存到外设的数据传输。

         AXI DMA 用到了三种总线,AXI4-Lite 用于对寄存器进行配置,AXI4 Memory Map 用于与内存交互,又分为 AXI4 Memory Map Read 和 AXI4 Memory Map Write 两个接口,一个是读一个是写。AXI4 Stream 接口用于对外设的读写,其中 AXI4 Stream Master(MM2S,Memory Map to Stream)用于对外设写,AXI4-Stream Slave(S2MM,Stream to Memory Map)用于对外设读。总之,在以后的使用中需要知道 AXI_MM2S 和 AXI_S2MM 是存储器端映射的 AXI4 总线,提供对存储器(DDR3)的访问。AXIS_MM2S 和 AXIS_S2MM 是 AXI4-streaming 总线,可以发送和接收连续的数据流,无需地址。

AXI DMA IP核特性

  • 高吞吐量和低延迟:AXI DMA利用AXI总线的高带宽和低延迟特性,实现快速数据传输。支持高速数据流和大批量数据处理。

  • 支持Scatter-Gather模式:通过Scatter-Gather列表,AXI DMA可以管理非连续的内存数据块,提高内存使用效率。这种模式使得DMA能够从多个内存区域收集数据并传输到单一或多个目的地,或反之。

  • 可配置性和灵活性:AXI DMA IP核可在Xilinx的Vivado设计套件中配置,允许用户根据具体应用需求调整数据宽度、传输模式等参数。支持多种传输模式,包括单次传输、连续传输等。

  • 中断和事件管理:支持生成中断,以便在传输完成或发生错误时通知CPU或处理器,实现有效的事件管理。这有助于提高应用的响应能力和可靠性。

3.2.3 XDMA

        XDMA是Xilinx公司提供的高性能可配置的SG DMA硬核,具备AXI Stream接口、AXI Lite接口和AXI4接口三种用户接口。XDMA IP核是对FPGA集成的PCIe硬核进行二次封装,开发效率更高。

XDMA的关键特性

  • 高速PCI Express接口支持:XDMA支持多种PCIe配置,包括1x, 2x, 4x, 8x, 16x等通道,兼容PCIe 1.x, 2.x, 3.x, 4.x标准,可实现高达16 GT/s的数据传输速率。
  • 灵活的数据传输模式:支持Memory-Mapped I/O (MMIO) 和 Direct Memory Access (DMA) 操作模式,可以根据需要灵活配置和使用。
  • 支持多个DMA通道:XDMA可以配置多个独立的DMA通道,每个通道可以独立进行数据传输,增加了数据处理的灵活性和系统的扩展性。
  • 高级特性:支持中断和信号机制,确保数据传输的可靠性和及时响应。支持Scatter-Gather DMA,允许从非连续的内存区域收集数据,有效管理内存碎片,优化内存使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/868841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3GPP R18 Multi-USIM 是怎么回事?(三)

这篇内容相对来说都是一些死规定,比较枯燥。主要是与MUSIM feature相关的mobility and periodic registration和service request触发过程的一些规定,两部分的内容是有部分重叠的,为保证完整性,重复部分也从24.501中摘了出来。 24.501 4.25 网络和MUSIM UE可以支持MUSIM fe…

idea控制台乱码问题解决教程

注:按顺序来操作,完成后要重启软件 方案一:修改Tomcat的编码设置 在Tomcat的VM options中添加了-Dfile.encodingUTF-8 方案二:修改IDEA的编码设置 File->Settings->Editor->File Encodings 将Global Encoding、Proj…

STM32-外部中断浅析

本篇解释了STM32中断原理 MCU为什么需要中断 中断,是嵌入式系统中很重要的一个功能,在系统运行过程中,当出现需要立刻处理的情况时,暂停当前任务,转而处理紧急任务,处理完毕后,恢复之前的任务…

深度学习之正则化

目标 我们学习正则化之前应该先了解我们为什么要用正则化 。正则化解决了什么问题 。我们讲正则化之前 ,先了解一个概念–》过拟合 过拟合 数据增强 L1和L2正则化 Dropout 注意:Dropout是不适合用在卷积神经网络的 提前终止 一般的做法是:记…

B端工作台如何设计?指导思想+布局建议+大厂案例全给你

一、B端工作台设计的指导思想 要做好B端工作台设计,以下是一些建议和策略: 1. 用户研究:深入了解目标用户的需求、行为和工作流程。通过用户研究方法,如用户访谈、观察和调研,收集用户反馈和意见,了解他们…

【计算机组成原理】计算机系统概述(上)

(一)计算机系统简介 计算机系统有“硬件”和“软件”两大部分组成。 1)所谓“硬件”即指见计算机的实体部分,它由看得见摸得着的各种电子元器件、各类光、电、机设备的事物组成,如主机、外设等等。 2)所谓…

以SGET协会OSM标准首创有662引脚的OSM模组——凌华智能引领嵌入式运算市场

在可焊接的45 x 45mm尺寸上提升功率 开启嵌入式运算发展的新时代 摘要: 1.开放式标准模块(OSM™),最大尺寸仅45 x 45mm,采用零开销的模块化系统简化生产,并提供662个引脚以增强小型化和物联网应用。 2.凌华智能提供基于NXP i.M…

快速掌握AI的最佳途径实践

科技时代,人工智能(AI)已经成为许多人希望掌握的重要技能。对于普通人来说,如何快速有效地学习AI仍然是一个挑战。本文将详细介绍几种快速掌握AI的途径,并提供具体的操作步骤和资源建议。 前言 AI的普及和应用已经深…

独立站爆款产品的选品思路及底层逻辑拆解

在这个竞争激烈的跨境电商市场,有一件事情比网站设计、营销策略、物流服务都更重要。那就是选品。跨境独立站选品是独立站成功的第一步,如果选错了产品,那么所有努力都可能白费。可能会面临库存积压、利润低迷、客户流失等问题。但是如果选对…

HackTheBox--BoardLight

BoardLight 测试过程 1 信息收集 NMAP端口扫描 端口扫描开放 22、80 端口 80端口测试 # 添加 boardLight.htb 到hosts文件 echo "10.10.11.11 boardLight.htb" | sudo tee -a /etc/hosts检查网页源代码,发现 board.htb # 添加 board.htb 到 hosts 文…

星网安全产品线成立 引领卫星互联网解决方案创新

2024年6月12日,盛邦安全(688651)成立星网安全产品线,这是公司宣布全面进入以场景化安全、网络空间地图和卫星互联网安全三大核心能力驱动的战略2.0时代业务落地的重要举措。 卫星互联网技术的快速发展,正将其塑造为全球…

Camera Raw:裁剪

Camera Raw 的裁剪 Crop面板提供了裁剪、旋转、翻转、拉直照片等功能,通过它们可以更精确地调整照片的视角和范围,以达到最佳二次构图的视觉效果。 快捷键:C ◆ ◆ ◆ 使用方法与技巧 1、使用预设 选择多种裁剪预设(如 1:1、16:…

【安全设备】下一代防火墙

一、什么是防火墙 防火墙是一个网络安全产品,它是由软件和硬件设备组合而成,在内网和外网之间、专用网与公共网之间的一种保护屏障。在计算机网络的内网和外网之间构建一道相对隔离的保护屏障,以达到保护资料的目的。它是一种隔离技术&#…

将QComboBox下拉项中的文本居中、居右

目录 1. 需求提出 2. 解决方法 1. 需求提出 QComboBox下拉项中的文本默认是居左的,如下: 有时需要将下拉项中的文本居中、居右。如何实现? 2. 解决方法 首先想到的是通过样式表来解决,但找遍Qt Assist和网络,都没这…

java设计模式(十)外观模式(Facade Pattern)

1、模式介绍: 外观模式是一种结构型设计模式,提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,使得子系统更容易使用。 2、应用场景: 当你希望为复杂的子系统提供一个简单接口时。 当客户…

电脑数据恢复篇:如何从电脑中恢复已删除的照片

按下 Shift Delete 后后悔了?想要恢复已删除的照片?好吧,如果是这样的话,你来对地方了。在本文中,我们将讨论如何从 PC 中恢复已删除的文件。 自从摄影的概念被提出以来,人们就对它着迷。以前&#xff0c…

中国各省金融监管水平-测算数据(2006-2022年)

金融监管水平是指政府及其指定机构通过法律法规对金融机构及其市场行为进行监督、管理与规范的能力和效率,以维护金融体系稳定、保护投资者和消费者权益、促进公平竞争及支持经济增长。衡量金融监管水平的指标多样,常见的一种计算方式是金融监管支出与金…

[AI 大模型] Google Gemini

文章目录 [AI 大模型] Gemini简介模型架构发展新技术和优势示例 [AI 大模型] Gemini 简介 Google Gemini 是 Google 最新推出的多模态 AI 大模型,旨在提升 AI 在各个领域的应用能力。Gemini 能够处理文本、图像、音频、视频和代码等多种数据类型,展现出…

模拟考试小程序的设计

管理员账户功能包括:系统首页,个人中心,科目管理,复习资料管理,参考文献管理,用户管理,留言板管理,论坛管理 微信端账号功能包括:系统首页,复习资料&#xf…

128陷阱详解(从源码分析)

1、128陷阱描述 Integer 整型 -128~127 超过这个范围,比较会不准确 例子 public static void main(String[] args) {Integer a128;Integer b128;Integer e127;Integer f127;System.out.println(ab); //输出falseSystem.out.println(a.equals(b)); //输出trueS…