Zynq7000系列FPGA中的DMA控制器简介(二)

AXI互连上的DMA传输

所有DMA事务都使用AXI接口在PL中的片上存储器、DDR存储器和从外设之间传递数据。PL中的从设备通过DMAC的外部请求接口与DMAC通信,以控制数据流。这意味着从设备可以请求DMA交易,以便将数据从源地址传输到目标地址。

虽然DMAC在技术上可以访问PS中的IOPs,但这通常不是很有用。原因是这些路径通常不提供流量控制信号。流量控制是确保数据以稳定速率传输的机制,以避免缓冲区溢出或数据丢失。由于缺少这些信号,DMAC无法有效地管理通过PS IOPs的数据流。

DMAC通常使用的数据路径如图9-3所示,外围请求接口(用于流量控制)在图中没有显示。每个AXI路径可以是读或写操作,因此存在多种组合。其中两个典型的DMA事务例子包括:

  • 内存到内存(片上内存到DDR内存):通常用于在系统的不同内存区域之间高效地传输数据。例如,处理器可能需要将数据从片上缓存或SRAM移动到DDR主存储器中,以便长期存储或供其他设备访问。
  • 内存到/从PL外设(DDR内存到PL外设或从PL外设到DDR内存);用于在系统的处理器系统和可编程逻辑部分之间传输数据。DDR内存中的数据可以通过DMA被高效地传输到PL中的外设,如硬件加速器或I/O接口。同样,PL外设产生的数据也可以通过DMA被传输回DDR内存或片上内存,以供处理器或其他设备使用。

5c7b3c1df6754be899035f924c47b56a.png

在考虑AXI事务时,有一些关键的特性和限制需要注意。如下所示:

  • AXI数据传输大小
    • AXI支持的数据访问宽度可以达到AXI数据总线的64位宽度。
    • 如果用户将src_burst_sizedst_burst_size字段编程为大于64位,AXI会发出一个精确的终止信号。
    • 最大突发长度(burst length)是16个数据节拍(data beats)。
  • AXI突发跨越4KB边界
    • AXI规范不允许AXI突发跨越4KB地址边界。
    • 如果控制器被编程为使用突发起始地址、大小和长度的组合,这会导致单个突发跨越4KB地址边界,那么控制器将生成两个突发,它们的组合长度等于指定的长度。这种操作对DMAC通道线程程序是透明的。换句话说,DMAC(或其背后的软件/硬件逻辑)会处理这种地址边界的跨越情况,而不需要DMAC通道线程程序显式地处理这个问题。例如,当DMAC接收到一个DMALD(可能是表示DMA读操作的指令)时,它会自动生成两个适当的AXI读突发操作,而不是一个可能会跨越4KB边界的突发操作。
  • AXI突发类型
    • 可以编程以生成仅用于数据访问的固定地址或递增地址突发类型。不会为数据访问或指令获取生成环绕地址突发。
  • AXI写地址
    • 可以发出多达八个未完成的写地址(写发出能力)。
    • DMAC在发出写地址之前,会先读取完成该写事务所需的所有数据字节。
  • AXI写数据交织
    • 不生成交织的写数据。一个写事务的所有写数据节拍都会在下一个写事务的任何写数据节拍之前输出。
  • AXI特性
    • 不支持锁定(locked)或独占(exclusive)访问。锁定访问通常用于确保在事务完成之前,数据不会被其他事务修改。独占访问则用于缓存一致性协议,确保在特定时间只有一个处理器可以访问或修改某个内存位置。

这些考虑因素对于正确配置和使用AXI接口至关重要,特别是在设计高性能数据传输系统时。了解AXI的这些特性和限制可以帮助开发者避免潜在的问题,并优化数据传输的效率。

DMA Manager 

负责管理DMA传输的软件或硬件接口的一部分。它允许用户通过两个APB(Advanced Peripheral Bus,高级外设总线)接口之一向DMA控制器发送指令。

当DMAC(DMA控制器)在实时操作中时,用户通常只能发送以下有限指令集的一个子集:

  1. DMAGO :用于启动用户指定的DMA通道上的DMA传输。它告诉DMA控制器开始从源地址读取数据,并将数据写入目标地址,根据预配置的DMA描述符或通道设置进行传输。
  2. DMASEV (DMA Set Event/Interrupt):用于通过用户指定的事件编号来触发事件或中断。这可以用于通知系统DMA操作已完成,或者达到某个特定条件(如传输错误、完成一定百分比等)。这样,CPU或其他系统组件可以响应这些事件并采取相应的行动。
  3. DMAKILL:用于终止一个DMA线程。在某些情况下,可能需要取消或停止正在进行的DMA传输。DMAKILL指令允许用户做到这一点,它会导致DMA控制器停止当前的DMA操作,并释放与该线程关联的任何资源。

需要注意的是,当DMAC在实时操作中时,其他更复杂的配置或管理指令可能不可用或受到限制,因为实时系统需要快速响应和确定性行为。因此,这些基本指令集(DMAGO、DMASEV和DMAKILL)为实时环境中的DMA操作提供了必要的控制和反馈机制。

DMA管理器(DMA Manager)的操作取决于SLCR(System Level Control Register)寄存器中的TZ_DMA_NS设置的安全状态。这个设置决定了DMA管理器是在安全状态还是非安全状态下运行。

  • 安全状态(Secure State):如果DMA管理器在安全状态下运行,那么必须使用安全的APB接口来发送指令。如果使用非安全的APB接口发送指令,DMAC(DMA Controller)将会忽略这些指令。
  • 非安全状态(Non-Secure State):当DMA管理器在非安全状态下运行时,建议使用非安全的APB接口来启动或重启DMA通道。但是,即使在非安全模式下,也可以使用安全的APB接口。这通常是在某些特殊情况下,比如需要更高安全级别的操作时才这样做。

在通过Debug Instruction寄存器或DBGCMD寄存器向DMA管理器发送指令之前,必须首先读取DBGSTATUS寄存器以确保调试器处于空闲状态。如果调试器不处于空闲状态,DMA管理器将忽略这些指令。

当DMA管理器从APB(Advanced Peripheral Bus)从接口接收到指令时,由于系统内部的处理流程和资源限制,可能需要经过几个时钟周期才能处理该指令。例如,如果流水线正忙于处理另一条指令。

在发出DMAGO之前,系统内存必须包含一个适合DMA通道线程执行的程序,从DMAGO指定的地址开始。

示例:启动DMA通道线程

以下示例显示了使用调试指令寄存器启动DMA通道线程所需的步骤:

  1. 创建DMA通道程序
    首先,你需要为DMA通道编写一个程序。这通常是一个包含DMA传输指令的序列。

  2. 将程序存储在系统内存区域
    将你的DMA通道程序存储在系统内存的一个区域中。确保这个区域对DMA管理器是可访问的。

  3. 轮询dmac.DBGSTATUS寄存器以确保调试空闲
    在尝试编程DMAGO指令之前,你需要确保调试器处于空闲状态。这可以通过读取dmac.DBGSTATUS寄存器并检查其dbgstatus位是否为0来实现。

  4. 写入dmac.DBGINST0寄存器
    使用APB接口之一,向dmac.DBGINST0寄存器写入以下信息:

    • DMAGO指令的字节0编码。
    • DMAGO指令的字节1编码。
    • 调试线程位设置为0,以选择DMA管理器。
  5. 写入dmac.DBGINST1寄存器
    使用DMAGO指令的字节[5:2]数据(通常是目标地址的高位部分)写入dmac.DBGINST1寄存器。这些字节必须设置为在第2步中写入系统内存的程序中第一个指令的地址。

  6. 指示DMAC执行指令
    dmac.DBGCMD寄存器写入0。这将指示DMAC执行调试指令寄存器中包含的指令。DMAC会启动DMA通道线程,并将dbgstatus位设置为1。当DMAC完成指令的执行后,它会清除dbgstatus位,将其设置回0。

注意事项:

  • 在编写和调试DMA通道程序时,请确保遵循你的硬件文档和DMA管理器的规范。
  • 在发送任何DMA指令之前,始终检查DMA管理器的状态,以确保它准备好接受新的指令。
  • 如果你的系统支持中断,并且你希望在DMA操作完成时得到通知,请确保正确设置和配置相关的中断。
  • 始终考虑DMA操作的性能和资源消耗,以避免对系统造成不良影响。

 

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

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

相关文章

pdf合并,pdf合并成一个pdf,pdf合并在线网页版

在处理pdf文件的过程中,有时我们需要将多个pdf文件合并成一个pdf文件。作为一名有着丰富计算机应用经验的技术博主,我将为您详细介绍如何将多个pdf文件合并成一个pdf文件。 pdf合并方法:使用, “轻云处理pdf官网” 打开 “轻云处…

ChatGPT智能对话绘画系统 带完整的安装源代码包以及搭建教程

系统概述 ChatGPT 智能对话绘画系统是一款集智能语言处理和绘画创作于一体的综合性系统。它利用了深度学习和自然语言处理技术,能够理解用户的意图和需求,并通过与用户的交互,生成富有创意的绘画作品。该系统的核心是一个强大的人工智能模型…

C#基于SkiaSharp实现印章管理(3)

本系列第一篇文章中创建的基本框架限定了印章形状为矩形,但常用的印章有方形、圆形等多种形状,本文调整程序以支持定义并显示矩形、圆角矩形、圆形、椭圆等4种形式的印章背景形状。   定义印章背景形状枚举类型,矩形、圆形、椭圆相关的尺寸…

QT事件处理及实例(鼠标事件、键盘事件、事件过滤)

这篇文章通过鼠标事件、键盘事件和事件过滤的三个实例介绍事件处理的实现。 鼠标事件及实例 鼠标事件包括鼠标的移动、按下、松开、单击和双击等。 创建一个MouseEvent项目,通过项目介绍如何获得和处理鼠标事件。程序效果如下图所示。 界面布局代码如下&#xff…

Python数据分析-风湿关节炎生存分析

一、研究背景和意义 类风湿关节炎(RA)是一种慢性炎症性疾病,主要影响关节,但也可能影响身体的其他部分。RA的病因尚不完全清楚,但已知其涉及免疫系统的异常反应。患者的免疫系统错误地攻击自身的关节组织,…

STM32音频应用开发:DMA与定时器的高效协作

摘要: 本文章将深入浅出地介绍如何使用STM32单片机实现音频播放功能。文章将从音频基础知识入手,逐步讲解音频解码、DAC转换、音频放大等关键环节,并结合STM32 HAL库给出具体的代码实现和电路设计方案。最后,我们将通过一个实例演示如何播放W…

Maven的依赖传递、依赖管理、依赖作用域

在Maven项目中通常会引入大量依赖,但依赖管理不当,会造成版本混乱冲突或者目标包臃肿。因此,我们以SpringBoot为例,从三方面探索依赖的使用规则。 1、 依赖传递 依赖是会传递的,依赖的依赖也会连带引入。例如在项目中…

云计算【第一阶段(21)】Linux引导过程与服务控制

目录 一、linux操作系统引导过程 1.1、开机自检 1.2、MBR引导 1.3、GRUB菜单 1.4、加载 Linux 内核 1.5、init进程初始化 1.6、简述总结 1.7、初始化进程centos 6和7的区别 二、排除启动类故障 2.1、修复MBR扇区故障 2.1.1、 实验 2.2、修复grub引导故障 2.2.1、实…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇Kerberos委派安全RBCD资源Operators组成员HTLMRelay结合

红队内网攻防渗透 1. 内网横向移动1.1 横向移动-资源约束委派-利用域用户主机加入1.1.1 利用思路1.1.2 利用条件1.1.3 利用过程1.2 横向移动-资源约束委派-Acount Operators组1.2.1 利用思路:1.2.2 利用条件:1.2.3 利用过程:1.3 横向移动-资源约束委派-CVE结合HTLMRelay1.3.…

哥斯拉短视频:成都柏煜文化传媒有限公司

哥斯拉短视频:巨兽传奇的视听盛宴 在短视频的海洋中,成都柏煜文化传媒有限公司 有一种特殊的存在总能吸引人们的目光,那就是以哥斯拉为主题的短视频。这些视频以震撼的视觉效果、扣人 ​心弦的剧情和独特的怪兽文化,为我们呈现了…

SHELL脚本学习(十二)sed进阶

一、多行命令 概述 sed 编辑器的基础命令都是对一行文本进行操作。如果要处理的数据分布在多行中,sed基础命令是没办法处理的。 幸运的是,sed编辑器的设计人员已经考虑了这个问题的解决方案。sed编辑器提供了3个处理多行文本的特殊命令。 命令描述N加…

NPOI入门指南:轻松操作Excel文件的.NET库

目录 引言 一、NPOI概述 二、NPOI的主要用途 三、安装NPOI库 四、NPOI基本使用 六、性能优化和内存管理 七、常见问题与解决方案 八、结论 附录 引言 Excel文件作为数据处理的重要工具,广泛应用于各种场景。然而,在没有安装Microsoft Office的…

PySide(PyQt)在图像上画线

1、按鼠标左键任意画线 import sys from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget from PySide6.QtGui import QPainter, QPixmap, QMouseEvent, QColor, QPen from PySide6.QtCore import Qt, QPointclass PaintLabel(QLabel):def __init__(self…

本教程将指导如何通过 Vue 组件和后端 API 交互

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

Redis 集群模式

一、集群模式概述 Redis 中哨兵模式虽然提高了系统的可用性,但是真正存储数据的还是主节点和从节点,并且每个节点都存储了全量的数据,此时,如果数据量过大,接近或超出了 主节点 / 从节点机器的物理内存,就…

【Python系列】列表推导式:简洁而强大的数据操作工具

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

洛谷 P1548 [NOIP1997 普及组] 棋盘问题

题目 洛谷 P1548 [NOIP1997 普及组] 棋盘问题 [NOIP1997 普及组] 棋盘问题 题目背景 NOIP1997 普及组第一题 题目描述 设有一个 N M N \times M NM 方格的棋盘 ( 1 ≤ N ≤ 100 , 1 ≤ M ≤ 100 ) (1≤N≤100,1≤M≤100) (1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个正…

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记,有些图是自己理解画的,可能不正确,可以作为参考,有疑问的地方请直接指出,共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构,主要解决海量数据的存储和海…

不知道自己的优势擅长和兴趣爱好,我该如何填报高考志愿选专业?

天生我才必有用,每个人都是独立的个体,拥有自己的优势和擅长,当然这个优势和擅长,不是和别人对比,而是和自己对比产生的。 如果说你不知道自己的优势擅长,不知道自己的兴趣和爱好,那只不过是你没…

HarmonyOS APP应用开发项目- MCA助手(持续更新中~)

简言: gitee地址:https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5 注&#xff1…