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需要重置时,这个接口就非常重要。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

激光雷达数据处理

激光雷达技术以其高精度、高效率的特点,已经成为地表特征获取、地形建模、环境监测等领域的重要工具。掌握激光雷达数据处理技能,不仅可以提升工作效率,还能够有效提高数据的质量和准确性,为决策提供可靠的数据支持。 第一章、激…

STM32_hal库学习(3)-OLED显示

硬件:stm32f103c8t6,四脚oled 四脚OLED用的是iic通讯协议,什么是IIC通讯协议?具体可看这篇文章。 stm32中IIC通讯协议-CSDN博客 既然了解了iic协议,接下来我们就利用stm32cubemx来配置oled。 1.新建一个工程 2.然…

愁煞了,UI设计师是闷葫芦,会干不会说,该咋办呢?

Hi,我是大千UI工场,经常有粉丝反映做好设计,不知道咋给客户和团队小伙伴阐述,传达设计里面,换言之就是设计师有必要提升表达能力,该如何提升。 UI设计师需要提升语言表达能力的原因有以下几点:…

科技赋能·创领未来丨智合同和百胜中国就Contract AI Studio项目达成合作

#智合同 #百胜中国 #AIGC #NLP #LLM #Contract AI Studio 近期,国内AIGC和LLM大语言模型发展可谓是如火如荼,其迅速崛起为社会和产业发展起到了非常重要的作用。人们利用AI技术(AIGC、LLM大语言模型、NLP等)将其赋能到企业生…

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件

<sa8650>QCX ISP Tuning 使用详解 — Tuning前置条件 一 如何安装 Qualcomm Chromatix™ 摄像头校准工具二 如何使用 Qualcomm Chromatix™ tuning工具创建tuning项目2.1 创建工程前提依赖2.2 创建工程2.3 添加场景2.4 编辑区域触发器三 如何创建Tuning 树一 如何安装 Qualco…

ChatGPT国内中文版镜像网站整理(2024/6/25)

一、国内外模型大对比 1.交互式对话测评 用同样一个问题问文言一心3.5模型和ChatGPT3.5模型,以下是得到的两个结果: 文言一心3.5模型的回答 文言一心的这个回答显然非常愚蠢,虽然回答了很长一段话,但是“一斤土豆的重量和土豆的…

详细分析SpringBootTest中的测试类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战3.1 项目测试3.2 功能测试 前言 书写测试类,一般只需要加入Test即可,但是结合Springboot项目来整体测试对应需要怎么下手 详细的Java知识点推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面…

26、 MySQL数据库基础练习系列股票交易系统基础查询和复杂查询

5、基础查询 -- 1、查询用户信息仅显示姓名与手机号 SELECT username as 姓名,phone as 手机号 from users;-- 2、模糊查询和explain语句 alter table stocks add index stock_name_index(stock_name); explain SELECT * from stocks where stock_name like %东吴证券%; -- 3、…

提升自来水公司经济效益的策略研究

现阶段,如何提高自来水公司经济效益的问题已经得到社会的广泛关注。文章将立足于成本管理的角度,在对自来水公司生产现状分析的基础上,总结影响自来水公司经济效益的相关因素,最后从成本管理的角度出发,对如何提高自来…

企业级Windows设备日志采集工具

永久免费: 前往Gitee最新版本 更新内容 进一步提升工程师部署采集客户端效率. 打开根Url,自动跳转到部署页面.(原工程师需输入很长的Url);新增复制同类客户端同步任务功能.优化客户端分组操作;文件同步到服务器后,可配置文件名增加时间戳; 介绍 定时全量或增量采集工控机,…

字节码编程ASM之两数之和

写在前面 源码 。 看下如何使用ASM来写如下的类: package com.dahuyou.demo.asm;public class AsmSumOfTwo {public AsmSumOfTwo() {}public static void main(String[] var0) {int var1 (new AsmSumOfTwo()).sum(1, 2);System.out.println(var1);}public int su…

C++精解【8】

文章目录 运算,- 加减法* / 乘除法逐元 乘法逐元 除法逐元综合运算矩阵乘法与加减法 转置、共轭、伴随矩阵点乘法,叉积 运算 ,- 加减法 逐元加减法 #include <iostream> #include "e:/eigen/Eigen/Dense" using namespace std;int main() {Eigen::Matrix2d …

【源码】Spring Data JPA原理解析之Auditing执行原理

Spring Data JPA系列 1、SpringBoot集成JPA及基本使用 2、Spring Data JPA Criteria查询、部分字段查询 3、Spring Data JPA数据批量插入、批量更新真的用对了吗 4、Spring Data JPA的一对一、LazyInitializationException异常、一对多、多对多操作 5、Spring Data JPA自定…

vue + Lodop 制作可视化设计页面 实现打印设计功能(二)

历史&#xff1a; vue2 Lodop 制作可视化设计页面 实现打印设计功能&#xff08;一&#xff09; 前言&#xff1a; 之前本来打算用直接拿之前做的vue2版本改改就发的&#xff0c;但考虑到现在主流都是vue3了&#xff0c;所以从这篇文章开始使用vue3来写&#xff0c;以及最后…

Spring相关面试题(三)

29 如何在所有的BeanDefinition注册完成后&#xff0c;进行扩展 Bean工厂的后置处理器&#xff0c;在所有的Bean注册完成后&#xff0c;就被执行。 public class A implements BeanFactoryPostProcessor {private String name "a class";private B b; ​public St…

项目分层--简单图书管理系统

分层情况 实体类Book代码 //实体类 public class Book {private int id;private String name;private int bsum;public Book() {}public Book(int id, String name, int bsum) {this.id id;this.name name;this.bsum bsum;}public int getId() {return id;}public void set…

2024上海初中生古诗文大会倒计时4个多月:真题示例和独家解析

现在距离2024年初中生古诗文大会还有4个多月时间&#xff0c;我们继续来看10道选择题真题和详细解析&#xff0c;以下题目截取自我独家制作的在线真题集&#xff0c;都是来自于历届真题&#xff0c;去重、合并后&#xff0c;每道题都有参考答案和解析。 为帮助孩子自测和练习&…

Midjourney 平替 Leonardo AI 国内版上线关键还免费

Leonardo AI 正式在国内上线&#xff0c;功能相对基础&#xff0c;计划在两周后推出新一轮的更新&#xff0c;届时将支持 Elements (Lora) 和一些新的 XL 模型&#xff0c;逐步会把国际服上的功能移植过来。 虽然界面是英文&#xff0c;但是不要慌&#xff0c;你可以在 fanbook…

Cloud Serpent

Cloud Serpent 风蛇&#xff0c;刷厄运北很好用的&#xff0c;不记得早前好像就是50级副本神庙带俯冲&#xff0c;加速&#xff0c;远距离攻击&#xff0c;这样就不容易被厄运北法师和恶魔的法术攻击打中&#xff0c;残废术&#xff0c;而减速&#xff0c;刷本拉怪超级好用 闪…

历史的加速度:智人何时会迎来下一个版本?人类的命运与挑战

在《人类简史》中&#xff0c;尤瓦尔赫拉利主要探讨了人类的过去和发展历程&#xff0c;重点关注的是智人&#xff08;Homo sapiens&#xff09;。在他的续作《未来简史》中&#xff0c;他进一步探讨了未来人类的发展&#xff0c;并引入了“神人”&#xff08;Homo deus&#x…