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

DMA控制器(DMAC)使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输,操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上,该指令集提供了一种灵活的指定DMA传输的方法。这种方法提供了比DMA控制器方法的能力更大的灵活性。

DMA引擎的程序代码由软件写入系统存储器的一个区域,该区域由控制器使用其AXI主接口访问。DMA引擎指令集包括用于DMA传输的指令和用于控制系统的管理指令。

控制器最多可配置八个DMA通道。每个通道对应于DMA引擎的处理器上运行的一个线程。当DMA线程执行加载或存储指令时,DMA引擎将内存请求推送到相关的读或写队列。DMA控制器使用这些队列来缓冲AXI读/写事务。控制器包含一个多通道FIFO(MFIFO),用于在DMA传输期间存储数据。

DMA引擎处理器上运行的程序代码将MFIFO视为包含一组用于DMA读写事务的可变深度并行FIFO。程序代码必须管理MFIFO,以便所有DMA FIFO的总深度不超过1024字节的MFIFO。
DMAC能够在没有处理器干预的情况下移动大量数据。源存储器和目标存储器可以位于系统中的任何位置(PS或PL)。DMAC的内存映射包括DDR、OCM、线性寻址Quad SPI读取内存、SMC内存和PL外围设备或连接到M_GP_AXI接口的内存。

用于与PS存储器进行传输的流控制方法使用AXI互连。使用PL外设的访问可以使用AXI流控制或DMAC的PL外设请求接口。没有指向PS I/O外设(IOP)的外设请求接口。对于PL外围AXI事务,在使用中断或状态轮询的编程IO方法中使用在CPU上运行的软件。

控制器有两组控制寄存器和状态寄存器。一组在安全模式下可访问,另一组在非安全模式下可以访问。软件通过控制器的32位APB从接口访问这些寄存器。整个控制器要么以安全模式操作,要么以非安全模式操作;不存在基于信道的模式混合。安全配置更改由slcr寄存器控制,需要重置控制器才能生效。

特征

DMA控制器提供:

  • DMA引擎处理器,具有用于DMA传输的灵活指令集:
  1. 灵活的分散-聚集内存传输
  2. 完全控制源和目的地的寻址
  3. 定义AXI事务属性
  4. 管理字节流
  • 八条缓存线,每条缓存线有四个字宽
  • 八个并发DMA通道线程
  1. 允许多个线程并行执行
  2. 发出最多8个读取和最多8个写入AXI事务的命令
  • 对PS中断控制器和PL的八次中断
  • DMA引擎程序代码中的八个事件
  • 128(64位)字MFIFO,用于缓冲控制器在传输过程中写入或读取的数据
  • 安全性
  1. 用于安全寄存器访问的专用APB从接口
  2. 整个控制器配置为安全或非安全
  • 内存到内存的DMA传输
  • 四个PL外设请求接口,用于管理进出PL逻辑的流量控制:每个接口最多可接受四个活动请求

DMA控制器的系统视图如图9-1所示。

9e65f935a9ac4b8da3e2caf3afbe9c5d.png

方框图

DMA控制器的框图如图9-2所示。

520018d7584949329593e0abea8407da.png

DMA指令执行引擎

DMAC包含一个指令处理块,使其能够处理控制DMA传输的程序代码。DMAC为每个线程维护一个单独的状态机。

  • 渠道仲裁
  1. 为活动DMA通道提供服务的循环方案
  2. 在为下一个DMA通道提供服务之前,先为DMA管理员提供服务
  3. 不支持更改仲裁程序
  • 渠道优先级
  • 以同等优先级响应所有活动(active)DMA通道
  • 不支持对DMA通道的优先级进行相对于其他DMA通道的任何更改

指令缓存

处理器内部通常包含一个或多个缓存,用于存储从主存中取出的指令和数据。缓存的目的是为了加速处理器访问这些指令和数据,因为从缓存中读取数据通常比从主存中读取要快得多。当一个线程(在处理器中执行的程序的一部分)请求从一个特定地址读取指令时,缓存首先会尝试查找这个地址是否在其存储的数据中。如果缓存中存在所请求的指令(即缓存命中),那么缓存会立即提供这个指令的数据给处理器,而不需要从主存中读取。这大大减少了处理器的等待时间。如果缓存中没有所请求的指令(即缓存未命中),那么线程会被暂停(stall),直到控制器使用AXI接口从主存中读取该指令并将其放入缓存中。这个过程被称为“缓存行填充(cache line fill)”。如果一条指令的大小超过四个字节,或者它跨越了缓存行的末尾(即这条指令的一部分在一个缓存行中,另一部分在另一个缓存行中),那么处理器需要执行多次缓存访问来获取这条完整的指令。这是因为缓存通常以固定大小的“缓存行”(cache line)为单位来存储数据,这些缓存行的大小通常是固定的,例如64字节或128字节。

当控制器正在通过AXI接口从主存中读取数据以填充缓存行时,它允许其他线程访问缓存。然而,如果在这个过程中另一个线程尝试访问的指令或数据不在缓存中(即发生另一个缓存未命中),那么该线程的指令流水线(pipeline)会被暂停(stall),直到第一个缓存行填充完成。

当指令缓存需要从系统内存中读取指令以填充其缓存行时,这个填充操作的延迟(latency)取决于系统内存的读取延迟。换句话说,如果系统内存(比如DRAM)的读取速度较慢,那么指令缓存填充操作就需要更长的时间。DMAC的性能高度依赖于64位AXI主接口(AXI master interface)的带宽。

读/写指令队列

当通道线程执行加载或存储指令时,控制器将该指令添加到相关的读取队列或写入队列。在AXI互连上发布事务之前,控制器将这些队列用作指令存储缓冲区。

多通道数据FIFO

DMAC使用多通道先进先出(MFIFO)数据缓冲器来存储它在DMA传输期间读取或写入。

用于指令获取和DMA传输的AXI主接口

程序代码存储在系统存储器的一个区域中,控制器使用64位AXI主接口访问该区域。AXI主接口还使DMA能够将数据从源AXI从设备传输到目标AXI从机。

用于寄存器访问的APB从接口

控制器通过32位APB从接口响应下列两个地址范围,这两个地址范围被软件用作读取和写入控制寄存器。

  • 非安全寄存器访问
  • 安全的寄存器访问

中断接口

中断接口允许硬件事件或软件条件有效地将通知(或称为中断信号)传递给中断控制器(Interrupt Controller)。当这些事件或条件发生时,它们会触发中断,中断控制器随后会暂停当前正在执行的指令(如果处理器正在执行),并跳转到特定的中断处理程序(Interrupt Handler)或中断服务例行程序(Interrupt Service Routine, ISR)以处理该中断。

PL外设DMA请求接口

PL Peripheral DMA Request Interface 通常指的是在可编程逻辑中,用于支持具备DMA能力的外设与DMA控制器之间进行通信的接口。这个接口允许外设在不需要处理器干预的情况下,直接访问系统内存,从而大大提高数据传输的效率。

PL外部设备请求接口支持连接具有DMA功能的外部设备驻留在PL中。每个PL外围请求接口彼此异步,并且与DMA本身异步。

重置初始化接口

用于在设备退出复位状态后,由软件来初始化直接内存访问控制器(Direct Memory Access Controller,简称DMAC)的操作状态的一个接口。当系统启动、重启或经历某个特定的事件导致DMAC需要重置时,这个接口就非常重要。

 

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

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

相关文章

深入理解Java中的类与对象:封装、继承与多态

深入理解Java中的类与对象:封装、继承与多态 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,类与对象是核心概念。类是对…

【电路笔记】-MOSFET放大器

MOSFET放大器 文章目录 MOSFET放大器1、概述2、电路图3、电气特性3.1 ** I D = F ( V G S ) I_D=F(V_{GS}) ID​=F(VGS​)**特性3.2 I D = F ( V D S ) I_D=F(V_{DS}) ID​=F(VDS​)特性4、MOSFET放大器5、输入和输出电压6、电压增益7、总结1、概述 在前面的文章中,我们已经…

表单自定义校验获取的value为undefined(element ui)

<el-form :model"form" :rules"rules"><el-form-item label"年龄" prop"age"><el-input v-model.number"form.age"></el-input></el-form-item> </el-form> export default {data() {…

python中的线程与进程

一、线程与进程 在计算机科学中&#xff0c;理解线程和进程的区别是重要的基础知识。这些概念对于多任务操作和并发编程尤为关键。下面将详细介绍线程与进程的区别、特点和各自的使用场景。 1.1 进程&#xff08;Process&#xff09; 进程是操作系统分配资源的基本单位。每个进…

【WPF】Enum与Converter的使用

在使用场景中大家都会遇到&#xff0c;下拉列表显示汉字&#xff0c;而存储使用的是对应的value值&#xff0c;从而转换就成了一个问题&#xff0c;接下来给大家带来一套的解决方案&#xff0c;方法可能不是特别高明&#xff0c;但是很实用&#xff0c;易读易维护&#xff0c;话…

【Unity】RPG2D龙城纷争(五)关卡编辑器之地图编辑

更新日期:2024年6月25日。 项目源码:本章发布 索引 简介关卡编辑器窗口类(LevelEditor)一、定义关卡编辑器窗口类二、两种编辑模式三、地块编辑模式1.关卡模板2.打开编辑窗口3.编辑器基本属性4.地块模板5.重新生成地图6.地图刷子7.刷地块源码链接简介 关卡编辑器将是我们配…

基本的 Spring Boot 配置步骤和常见的配置项【创建,配置,日志,数据库,安全,MVC】

基本的 Spring Boot 配置步骤和常见的配置项【创建&#xff0c;配置&#xff0c;日志&#xff0c;数据库&#xff0c;安全&#xff0c;MVC】 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、…

EAK高压电阻器-引线高压电阻器-厚膜高压电阻器

描述 EAK高压电阻器是扁平高压电阻器&#xff0c;完全满足低感、稳定和精密无源元件的所有要求。 扁平高压电阻器最适合作为组装在 PCB 上的有线元件&#xff0c;但也可以用作 SMD 元件。 我们提供 HVR、HPR、HVI、HVD 和 HVS 系列的扁平高压电阻器&#xff0c;这些电阻器具…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日&#xff0c; 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办&#xff0c;赛宁网安、永信至诚、红客社区协办&#xff0c;致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展&#xff0c;推动安全行业共建共享…

信息系统项目管理师

1.1项目的定义及特点 项目的定义:为创造独特的产品、服务或成果而进行的临时性工作 项目的特征: 独特性: 差异化(没有完全一样的项目) 临时性: 时间临时(开始时间、结束时间) 团队临时(不同阶段可能有不同的人来参加) 渐进明细性: 成果性目标是逐步…

Cambrian-1:探索以视觉为中心的多模态LLM新纪元

一、摘要 论文&#xff1a;Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs&#xff0c;https://arxiv.org/abs/2406.16860 主页&#xff1a;https://cambrian-mllm.github.io/ 代码&#xff1a;https://github.com/cambrian-mllm/cambrian 本文研发…

堆栈与堆内存 - C#

探索 C# 编程中内存管理的细微差别&#xff0c;区分值类型和引用类型&#xff0c;理解动态和静态内存分配&#xff0c;评估访问效率… 背景 以下是 C# 中堆栈和堆内存之间的主要区别列表。这适用于初学者和专业的 C# 开发人员。 C# 中栈和堆内存的区别 概括 现在&#xff0c…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口&#xff0c;电商企业可以实现商品同步功能&#xff1a; 商品信息同步&#xff1a;通过接口可以实时同步主流电商平台上的商品信息&#xff0c;包括商品标题、价格、库存、销量等数据&#xff0c;确保企业在自…

ubuntu/debian中安装OpenCV并且配置OpenCV开发环境

编译OpenCV 本文想编译第三方的模块&#xff0c;尤其时aruco模块以及sfm(structure from motion)模块&#xff0c;所以需要同时编译contrib代码。 由于sfm模块依赖其他一些库&#xff0c;这些库如果不提前安装&#xff0c;最后sfm不会编译 需要安装下面一些&#xff0c;sfm文…

python中的__hash__魔法函数详解

在Python中&#xff0c;__hash__ 是一个特殊方法&#xff08;也称为魔法方法或双下划线方法&#xff09;&#xff0c;它用于定义对象的哈希值。哈希值是一个整数&#xff0c;通常用于在哈希表&#xff08;如字典和集合&#xff09;中快速查找对象。 当你试图将一个对象作为键添…

Spring Boot中的多模块项目构建

Spring Boot中的多模块项目构建 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 随着应用程序的复杂性增加&#xff0c;将一个大型的应用程序拆分为多个模块或…

HarmonyOS4升级到Harmonyos Next(Api 11)学习捷径

HarmonyOS4升级到Harmonyos Next&#xff08;Api 11&#xff09;学习捷径&#xff0c;新技术学习路上少走弯路。HarmonyOS NEXT和HarmonyOS 4的基本语法都是一样的&#xff0c;但是还有一些区别。如果你学会HarmonyOS4&#xff0c;那么HarmonyOS Next也自然而然的会了。 Harmon…

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习&#xff0c;我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱&#xff0c;下…

哈喽GPT-4o,对GPT-4o 数据分析Data Analysis的思考与看法

目录 上传一个Excel给Data Analysis。Prompt&#xff1a;请问这个数据集是做什么的Prompt&#xff1a;请问书籍的定价如何&#xff0c;请用合适的图表展示它的售价情况Prompt&#xff1a;请统计书名列中出现最多的名称&#xff0c;然后使用词云将其可视化。Prompt&#xff1a;请…

笔记 - shell脚本

前言 Shell脚本是一种用来执行命令行命令的脚本文件。它是由一系列Shell命令组成的程序&#xff0c;通常用于自动化任务、系统管理、数据处理等。Shell脚本可以运行在各种Unix和Linux系统上&#xff0c;也可以在Windows上的一些兼容环境&#xff08;如Cygwin、WSL&#xff09;中…