【【萌新的SOC学习之AXI DMA环路测试介绍】】

news2024/10/3 4:37:17

萌新的SOC学习之AXI DMA环路测试介绍

AXI DMA环路测试
DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器(CPU)介入处理。DMA 是一种快速的数据传送方式,通常用来传送数据量较多的数据块,很多硬件系统会使用 DMA,包括硬盘控制器、绘图显卡、网卡和声卡,在使用高速 AD/DA 时使用 DMA 也是不错的选择。

DMA 是所有现代计算机的重要特色,它允许不同速度的硬件设备进行沟通,而不需要依于中央处理器的大量中断负载。否则,中央处理器需要从来源把每一片段的数据复制到寄存器,然后把它们再次写回到新的地方。在这个时间里,中央处理器就无法执行其它的任务。DMA 是用硬件实现存储器与存储器之间或存储器与 I/O 设备之间直接进行高速数据传输。使用 DMA时,CPU 向 DMA 控制器发出一个存储传输请求,这样当 DMA 控制器在传输的时候,CPU 执行其它操作,传输操作完成时 DMA 以中断的方式通知 CPU。

AXI DMA简介
AXI DMA提供了一个高性能的内存直接访问 在内存和AXI4-stream流 目标内存之间 。[提供了一个可选的(分散/聚集)的功能 可以将CPU从数据搬运中解救出来]

AXI DMA : AXI Direct Memory Access 直接内存访问
AXI DMA为内存和 AXI4-Stream外设之间提供了高带宽的直接内存访问
其可选的S/G 功能 可以将CPU从数据搬运任务中解放出来
在这里插入图片描述

为了发起传输事务,DMA 控制器必须得到以下数据:
• 源地址 — 数据被读出的地址
• 目的地址 — 数据被写入的地址
• 传输长度 — 应被传输的字节数

  1. 为了配置用 DMA 传输数据到存储器,处理器发出一条 DMA 命令
  2. DMA 控制器把数据从外设传输到存储器或从存储器到存储器,而让 CPU 腾出手来做其它操作。
  3. 数据传输完成后,向 CPU 发出一个中断来通知它 DMA 传输可以关闭了。ZYNQ 提供了两种 DMA,一种是集成在 PS 中的硬核 DMA,另一种是 PL 中使用的软核 AXI DMA IP。在 ARM CPU 设计的过程中,已经考虑到了大量数据搬移的情况,因此在 CPU 中自带了一个 DMA 控制器 DMAC,这个 DMAC 驻留在 PS 内,而且必须通过驻留在内存中的 DMA 指令编程,这些程序往往由CPU 准备,因此需要部分的 CPU 参与。DMAC 支持高达 8 个通道,所以多个 DMA 结构的核可以挂在单个DMAC 上。DMAC 与 PL 的连接是通过 AXI_GP 接口,这个接口最高支持到 32 位宽度,这也限制了这种模式下的传输速率,理论最高速率为 600MB/s。这种模式不占用 PL 资源,但需要对 DMA 指令编程,会增加软件的复杂性。
    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 提供 3 种模式,分别是 Direct Register 模式、Scatter/Gather 模式和 Cyclic DMA 模式,这里我们简单的介绍下常用的 Direct Register 模式和 Scatter/Gather 模式。Direct Register DMA 模式也就是 Simple DMA。Direct Register 模式提供了一种配置,用于在 MM2S 和S2MM 通道上执行简单的 DMA 传输,这需要更少的 FPGA 资源。Simple DMA 允许应用程序在 DMA 和Device 之间定义单个事务。它有两个通道:一个从 DMA 到 Device,另一个从 Device 到 DMA。应用程序必须设置缓冲区地址和长度字段以启动相应通道中的传输。Scatter/Gather DMA 模式允许在单个 DMA 事务中将数据传输到多个存储区域或从多个存储区域传输数据。它相当于将多个 Simple DMA 请求链接在一起。SGDMA 允许应用程序在内存中定义事务列表,硬件将在应用程序没有进一步干预的情况下处理这些事务。在此期间,应用程序可以继续添加更多工作以保持硬件工作。用户可以通过轮询或中断来检查事务是否完成。SGDMA 处理整个数据包(被定义为表示消息的一系列数据字节)并允许将数据包分解为一个或多个事务。例如,采用以太网 IP 数据包,该数据包由 14 字节的报头后跟 1 个或多个字节的有效负载组成。使用 SGDMA,应用程序可以将 BD(Buffer Descriptor,用于描述事务的对象)指向报头,将另一个 BD 指向有效负载,然后将它们作为单个消息传输。这种策略可以使TCP / IP 堆栈更有效,它允许将数据包标头和数据保存在不同的内存区域,而不是将数据包组装成连续的内存块。

AXI DMA 通过 AXI4-lite接口对寄存器做一些配置和获取 。
MM2S : Memory Map to stream 存储器映射(AXI4-Full) 到 AXI4 - Stream
S2MM : Stream to MemoryMap AXI4-Stream 到存储器映射

对于IP核的设计
在这里插入图片描述

这个是整体的结构框图
在这里插入图片描述

(单一的DMA传输模式
这个模式是我们当前需要的模式 ,也就是(SG模式被disable的情况下的)
为了发起传输事务,DMA 控制器必须得到以下数据:
• 源地址 — 数据被读出的地址
• 目的地址 — 数据被写入的地址
• 传输长度 — 应被传输的字节数)
AXI DMA编程顺序
Direct Register Mode(简单DMA)
此模式提供了在MM2S 和 S2MM 通道上进行简单的DMA传输的配置 ,只需要较少的FPGA资源
我们可以通过访问 DMACR , 源地址 , 或者 目的 地址 和长度寄存器 发起 DMA传输 。当传输完成后,如果使能了产生中断输出, 那么DMASR寄存器相关联的通道位会有效。
对于复位时钟 必须至少保持16个s_axi_lite_aclk

看一下DMA的MM2S(存储器映射到Stream) 通道的启动顺序
1.把MM2S通道 打开
2.使能中断
3. 朝着MM2S_SA 寄存器中写一个有效的源地址 (如果AXI DMA 没有配置一个数据重对齐的选项的话 , 这个有效的地址必须进行对齐 否则会产生未定义的结果 ) (这里就是说如果在写地址的时候 DRE被使能了,那么就可以写成任意地址 。如果DRE没有被使能 ,那么只能写成4的倍数)
4. 朝着MM2S_LENGTH 寄存器写传输的字节数 (这个必须是最后一个进行配置,其他的没有顺序要求)
一个长度为0的值是无效的,一个非0 的值将会决定存储器映射到Stream流的数据个数 。

S2MM通道顺序
1.差不多

SG模式
它把传输的基本参数,存储在内存中;
这些参数被称为BD(Buffer Descriptor)
在工作时,通过SG接口加载和更新BD中的状态

axi 时钟的同步和异步的选择 并不是简单的通过对axi_dma进行配置 而是通过对外部的连线 完成时钟 假设连接在不同的时钟频率,就是异步了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

一般用在传输非常少量数据的情况下

在这里插入图片描述

指派的数据位宽 也就是说2的多少次方
在这里插入图片描述

指定地址位宽
在这里插入图片描述
在这里插入图片描述

使能读 和 使能写
Memory Map Data Width 指的是 memory map 这一侧的数据位宽
Stream Data Width 值的是stream 流的数据位宽
最大突发大小 影响的AXI4

是否使能对齐 如果勾选 就可以任意给定 不勾选 就是4的倍数

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

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

相关文章

【atoi函数详解】

文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数 atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返…

手搭手Mybatis-Plus数据迁移至TDSQL

环境介绍 技术栈 springbootmybatis-plusdruidbaomidoumysqloracle 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 Navicat测试连接TDSQL 开启访问外网 IDEA环境搭建 pom.xml所需依赖 <dependencies><dep…

计算机毕业设计选什么题目好?springboot 试题库管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

element ui el-table表格复选框,弹框关闭取消打勾选择

//弹框表格复选框清空 this.$nextTick(()>{this.$refs.table.clearSelection();})<el-table ref"table" v-loading"crud.loading" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #3…

【Java 进阶篇】JavaScript 日期和时间详解

JavaScript是一种强大的编程语言&#xff0c;它不仅可以用于处理文本和数字&#xff0c;还可以处理日期和时间数据。在本篇博客中&#xff0c;我们将深入探讨JavaScript中日期和时间的处理方式。不管你是在网页开发、移动应用开发&#xff0c;还是服务端开发&#xff0c;处理日…

Linux 查看CPU架构及内核版本

涉及arch命令和/proc/version文件 1 查看CPU架构 有些软件的安装需要和CPU架构相匹配&#xff0c;如JDK等等&#xff0c;所以需要确定主机的CPU架构类型。可使用命令arch查看Linux系统的CPU架构&#xff0c;如下&#xff1a; arch 12 查看内核版本 文件/proc/version中包含系…

四、RIP动态路由实验

拓扑图&#xff1a; 基本ip的配置已经配置好了&#xff0c;接下来对两台路由器配置rip协议&#xff0c;两台PC进行跨网段通讯 RIPv1版本只能识别ABC的大类网段&#xff0c;不能区分子网掩码&#xff0c;v2版本可以识别子网掩码 首先进入R1&#xff0c;进入rip&#xff0c;宣告…

来入门一下C语言打印Hello World

&#x1f4da;目录 安装程序官网下载软件启动程序运行代码解决乱码 安装环境IntelliJ Clion 安装程序 IntelliJ ClionVisual Studio…等 由于使用的主开发软件是IntelliJ的产品&#xff0c;所以这一次也使用旗下的IntelliJ Clion当做C的开发编程&#xff0c;当然更推荐你们使用…

App自动化测试环境搭建

目录 1、java jdk安装 2、node.js安装 3、安装模拟器安装 4、Android SDK 安装 5、Appium-Server安装 6、appium客户端安装  7、Appium-Python-Client安装 只做记录和注意点&#xff0c;详细内容不做解释 环境&#xff1a;winappium夜神模拟器python 需要用到的工具&a…

树和二叉树 | 一些遇到的小问题

1. TreeNode<T> &a TreeNode<T> &a是一个引用&#xff0c;指向类型为T的TreeNode节点。这个引用可以用来修改或访问该节点的值或属性。 2. *BiTree是什么意思&#xff1a; typedef struct BiTNode{ char data;struct BiTNode* lchild, * rchild; }BiT…

8中间件-Redis、MQ---基本

中间件&#xff08;Middleware&#xff09;是指位于客户端和服务器端之间的软件&#xff0c;用于处理请求和响应&#xff0c;以及提供额外的功能和服务。中间件可以用于各种不同的应用程序&#xff0c;例如Web应用程序、消息传递系统、数据库管理系统等。 在Web应用程序中&…

pycharm远程调试运行程序出现No such file or directory:解决办法

太离谱了&#xff01;&#xff01;&#xff01;&#xff01; 首先还是配置这里 然后重点来了&#xff0c;root path这里填上代码文件夹路径 然后mapping这里就不要再加了&#xff01;&#xff01;&#xff01;因为这个会和上面的root path拼在一起&#xff01;&#xff01;&am…

C++学习day7

一、思维导图 二、作业试编程&#xff1a; 封装一个学生的类&#xff0c;定义一个学生这样类的vector容器&#xff0c;里面存放学生对象&#xff08;至少3个)再把该容器中的对象&#xff0c;保存到文件中。 封装一个学生的类&#xff0c;定义一个学生这样类的载体容器&#xff…

递归:如何用三行代码找到“最终推荐人”?

文章来源于极客时间前google工程师−王争专栏。 推荐注册返佣金。用户A推荐用户B&#xff0c;用户B又推荐了用户C来注册。用户C的“最终推荐人”为用户A&#xff0c;用户B的“最终推荐人”也为用户A&#xff0c;而用户A没有“最终推荐人”。 可以通过数据库来记录这种推荐关系…

【java学习—七】单继承和多层继承(30)

文章目录 1. 相关概念2. 从代码中理解 1. 相关概念 Java 只支持单继承&#xff0c;不允许多重继承&#xff1a; &#xff08;1&#xff09;一个子类只能有一个父类 &#xff08;2&#xff09;一个父类可以派生出多个子类      举例区分&#xff1a; class SubDemo extend…

针对量化交易SDK的XTP的初步摸索

这东西只要是调用API实现自动交易股票的&#xff0c;就不可能免费的接口。 并且用这些接口实现自动交易还得 归证券公司监管。比如 xtp出自 中泰证券&#xff0c;那么如果用xtp实现自动交易股票的软件&#xff0c;具体操作实盘的时候 不能跑再自己的电脑上&#xff0c;必须跑在…

EasyX图形库实现贪吃蛇游戏

⭐大家好&#xff0c;我是Dark Falme Masker,学习了动画制作及键盘交互之后&#xff0c;我们就可以开动利用图形库写一个简单的贪吃蛇小游戏&#xff0c;增加学习乐趣。 ⭐专栏&#xff1a;EasyX部分小游戏实现详细讲解 最终效果如下 首先包含头文件 #include<stdio.h> #…

C语言实现数据结构顺序查找和折半查找代码

文章目录 一、顺序查找二、折半查找 一、顺序查找 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef struct {//查找表的数据结构int *data;//动态数组基址int TableLen;//表长 }SSTable;void InitTable(SSTable *L) {//初始化一个…

10Wqps网关接入层,LVS+Keepalived(DR模式)如何搭建?

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;很多小伙伴拿高薪&#xff0c;完成架构的升级&#xff0c;进入架构师赛道&#xff0c;打开薪酬天花板。 最近有小伙伴拿到了一线互联网企业如京东、网易、微博、阿里、汽车之家、极兔、有赞、希音、百度、滴滴的架…

Redis的Java客户端-Jedis

目录 一、Jedis基本用法二、Jedis连接池 一、Jedis基本用法 二、Jedis连接池