ZYNQ MPSOC之PL与PS数据交互DMA方式

ZYNQ MPSOC之PL与PS数据交互DMA方式

1 摘要

XILINX ZYNQ 以及 ZYNQ MPSOC主要优势在于异构 ARM+FPGA。其中非常关键的一点使用了 AXI 总线进行高速互联。而且这个 AXI 总线是开放给我们用户使用的。在前面的文章中我们详解了使用了AXI-HP方式PL到PS端进行数据交互。本文主要涉及到DMA访问方式,实现PL端到PS端数据互访,并测试在当前数据总线位宽和PL端频率下DMA方式的带宽速度。

2 DMA(Direct Memory Access)接口

DMA 是一种高效的数据传输技术,广泛应用于需要大量数据传输的计算机系统中。通过允许外设直接访问内存,DMA 可以显著提高系统的性能和资源利用率。
(1)DMA 的工作原理
请求 DMA 传输:外部设备(如硬盘、网络适配器或其他外设)通过控制器发出 DMA 请求,表明它需要进行数据传输。
•DMA 控制器响应:系统的 DMA 控制器接收到请求后,向 CPU 发送信号,通知它暂时停止处理任务,允许 DMA 控制器接管总线。
•设置传输参数:DMA 控制器配置数据传输的源地址、目的地址和数据传输的大小。
•数据传输:DMA 控制器直接从源地址读取数据并写入到目的地址。此过程不需要 CPU 的参与,从而提高了效率。
•完成传输:当数据传输完成后,DMA 控制器向 CPU 发送中断信号,通知其传输已完成,CPU 可以继续执行其他任务。
在这里插入图片描述
可以看到 DMA 的数据传输经 S_AXI_HP 接口。ZYNQ MPSOC 拥有 4 个S-AXI HP 接口,提供了 ZYNQ 内最大的总带宽。每一个 HP 接口都包含控制和数据 FIFO。这些 FIFO 为大数据量突发传输提供缓冲,让 HP 接口成为理想的高速数据传输接口。
在这里插入图片描述

(2)DMA 的类型
•Burst Mode DMA:在这种模式下,DMA 控制器在传输数据时占用总线,直到传输完成。此模式适合于大块数据传输。
•Cycle Stealing DMA:DMA 控制器在每个数据传输周期中占用总线的一部分时间,允许 CPU 和 DMA 控制器交替访问总线。此模式适合于小块数据传输。
•Transparent DMA:DMA 控制器在 CPU 不使用总线时进行数据传输,从而不会影响 CPU 的操作。
•Demand Mode DMA:DMA 控制器在设备请求时才进行数据传输,适合于不定时的数据传输需求。

(3)DMA 的应用场景
•音频和视频处理:在音频和视频流的传输中,DMA 可以实现高效的数据传输,减少延迟。
•网络数据传输:网络适配器通常使用 DMA 将数据包直接传输到内存中,提高网络通信性能。
•大数据量的存储操作:在硬盘和内存之间进行大规模数据传输时,DMA 可以显著提高传输效率。

3 DMA FPGA设计

3.1 block design设计

采用FPGA block design 设计MPSOC DMA接口,顶层通过axis-data-fifo控制写数据操作,SOC端通过DMA中断将DMA通道接收的数据缓存至DDR中,完成PL端到PS端DDR的读写访问。
在这里插入图片描述
在位宽为32bit,PL端频率为150MHz测试DMA速率如下,可以适当提高PL端时钟频率以提高传输速度
在这里插入图片描述

3.2 顶层模块

`timescale 1 ps / 1 ps
module system_wrapper();reg [31:0]S_AXIS_tdata;wire S_AXIS_tlast;wire S_AXIS_tvalid = 1'b1; wire pl_clk0;wire s_axis_aclk;wire s_axis_aresetn;wire [3:0]S_AXIS_tkeep;wire S_AXIS_tready;wire [0:0]gpio_rtl_tri_o;wire [0:0]peripheral_aresetn;assign S_AXIS_tkeep = 4'b1111;  
assign s_axis_aclk =  pl_clk0;
assign s_axis_aresetn = peripheral_aresetn&&gpio_rtl_tri_o;always@(posedge pl_clk0)beginif(s_axis_aresetn == 1'b0)beginS_AXIS_tdata <= 0;endelse beginif(S_AXIS_tready&&S_AXIS_tdata<511)S_AXIS_tdata <= S_AXIS_tdata + 1'b1; else if(S_AXIS_tready)S_AXIS_tdata <= 0;  endendassign  S_AXIS_tlast = (S_AXIS_tdata == 511)&&S_AXIS_tready&&S_AXIS_tvalid;system system_i(.S_AXIS_tdata(S_AXIS_tdata),.S_AXIS_tkeep(S_AXIS_tkeep),.S_AXIS_tlast(S_AXIS_tlast),.S_AXIS_tready(S_AXIS_tready),.S_AXIS_tvalid(S_AXIS_tvalid),.gpio_rtl_tri_o(gpio_rtl_tri_o),.peripheral_aresetn(peripheral_aresetn),.pl_clk0(pl_clk0),.s_axis_aclk(s_axis_aclk),.s_axis_aresetn(s_axis_aresetn));
endmodule

4 SOC设计

4.1 硬件导出

在工程中导出硬件平台及bit文件
在这里插入图片描述
生成VITIS工程
在这里插入图片描述)

4.2 PSU_A53控制代码

#include "dma_intr.h"
#include "ttc_intr.h"
#include "sys_intr.h"
#include "xgpio.h"
volatile u32 RX_success;
volatile u32 TX_success;volatile u32 RX_ready=1;
volatile u32 TX_ready=1;
int Tries = NUMBER_OF_TRANSFERS;
int i;
int Index;
u8 *TxBufferPtr= (u8 *)TX_BUFFER_BASE;
u8 *RxBufferPtr= (u8 *)RX_BUFFER_BASE;
u8 Value=0;
float speed_tx;
float speed_rx;
static XGpio Gpio;
XAxiDma AxiDma;
XScuGic Intc; //GIC
#define AXI_GPIO_DEV_ID	        XPAR_AXI_GPIO_0_DEVICE_IDint axi_dma_test()
{int Status;char speed_r[100];TxDone = 0;RxDone = 0;Error = 0;xil_printf( "----DMA Test----\r\n");XTtcPs_Start(&

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

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

相关文章

枚举法——C++算法【泪光2929】

前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 引入 枚举在成熟框架中,用得还挺多的.枚举可以让程序更容易理解 之前写过一篇关于枚举的帖子--- 白话编程---数据篇(4)枚…

HarmonyOS NEXT应用开发-Notification Kit(用户通知服务)notificationManager.cancelAll

1.notificationManager.cancelAll 支持设备Phone2in1TabletCarWearable cancelAll(callback: AsyncCallback<void>): void 取消当前应用所有已发布的通知。使用callback异步回调。 系统能力&#xff1a;SystemCapability.Notification.Notification 示例&#xff1a; …

Mac 创建QT按钮以及一些操作

在创建QT项目好 后我们打开mainwindow.cpp&#xff0c;下面所示的代码都是在这个cpp文件里面因为它是窗口的入口函数 #include "mainwindow.h" #include "ui_mainwindow.h" #include<QPushButton>//按钮的头文件MainWindow::MainWindow(QWidget *pa…

开源协议全解析:类型、选择与法律风险规避指南

[TOC] 在当今开源软件主导的技术生态中&#xff0c;开源协议&#xff08;Open Source License&#xff09;是决定项目能否被商业使用、二次开发的关键法律文件。据统计&#xff0c;GitHub上超过70%的项目使用某种形式的开源协议&#xff0c;但其中近30%存在协议兼容性问题。本…

TM1668芯片学习心得一

一、TM1668 是一种带键盘扫描接口的LED&#xff08;发光二极管显示器&#xff09;驱动控制专用电路&#xff0c;内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良&#xff0c;质量可靠。主要应用于VCR。 学习链接 二、 三、显示寄存器的地址…

时空特征如何融合?LSTM+Resnet有奇效,SOTA方案预测准确率超91%

LSTM有着不错的时序信息提取能力&#xff0c;ResNet有着不错的空间特征信息提取能力。如果现在有时空特征融合的创新需求&#xff0c;我们是否能将LSTM和ResNet两者的优点融合起来呢&#xff1f; 随着这个思路下去&#xff0c;LSTM ResNet混合模型横空出世&#xff0c;在各个…

[PRO_A7] SZ501 FPGA开发板简介

SZ501 FPGA开发板简介 概述 SZ501 FPGA开发板是专为高性能FPGA设计、快速原型开发和复杂应用调试打造的先进开发平台。搭载Xilinx Artix-7系列XC7A100T FPGA芯片&#xff0c;SZ501提供卓越的逻辑运算能力和灵活的接口支持&#xff0c;广泛适用于通信、信号处理、嵌入式系统及…

企业微信jdk 授权 记录

1、npm install wecom/jssdk 2、index.html 引入 <script src"https://wwcdn.weixin.qq.com/node/open/js/wecom-jssdk-2.0.2.js"></script> 3、创建js import * as ww from "wecom/jssdk"; /*** 获取企业微信jdk局方法----------------…

Android13增加第三方类实现加入到系统

1、将需要的添加包放在/frameworks/base/core/java/com目录下&#xff0c;比如devmgr/devicemgr/DeviceMgr.java package com.devmgr.devicemgr; import android.content.Context; public class DeviceMgr {private volatile static DeviceMgr instance null;private Context…

计算机网络核心知识点全解析(面试通关版)

一、网络体系结构&#xff1a;从OSI到TCP/IP的分层设计 1.1 七层模型与四层模型对比 OSI七层模型核心功能TCP/IP四层对应典型协议生活类比应用层为应用程序提供服务&#xff08;如文件传输、邮件、Web浏览&#xff09;应用层HTTP、FTP、SMTP、DNS快递面单信息&#xff08;收件…

AI图稿生成订单管理系统

让设计生产“零误差、全自动、秒响应” 一、核心价值&#xff1a;重构设计到生产的效率革命 效率提升70% 告别人工排版&#xff0c;AI自动复用历史稿件模板&#xff0c;单次设计永久沉淀为可调用资产&#xff1b; 印刷文件生成速度达20万张/分钟&#xff0c;满足电商大促、…

TwinCAT数据类型,%MX,%MD这些特殊符号

在 TwinCAT&#xff08;Beckhoff PLC 编程环境&#xff09;中&#xff0c;%MX、%MD 等符号是 IEC 61131-3 标准的地址表示法&#xff0c;用于直接访问 PLC 的物理 I/O 或内存区域。这些符号通常用于 变量声明 或 直接寻址&#xff0c;特别是在 TwinCAT 2 和 传统 PLC 编程 中较…

基于UNet算法的农业遥感图像语义分割——补充版

前言 本案例希望建立一个UNET网络模型&#xff0c;来实现对农业遥感图像语义分割的任务。本篇博客主要包括对上一篇博客中的相关遗留问题进行解决&#xff0c;并对网络结构进行优化调整以适应个人的硬件设施——NVIDIA GeForce RTX 3050。 本案例的前两篇博客直达链接基于UNe…

Compose笔记(二十一)--AnimationVisibility

这一节主要了解一下Compose的AnimationVisibility,AnimatedVisibility 是 Jetpack Compose 里用于实现组件可见性动画效果的组件&#xff0c;借助它能让组件在显示和隐藏时带有平滑的过渡动画&#xff0c;从而提升用户体验。现总结如下: API 1. visible 含义&#xff1a;这是一…

基于 HT 构建 2D 智慧仓储可视化系统的技术解析

在当今数字化时代&#xff0c;仓储管理对于企业的运营效率和成本控制愈发关键。图扑软件&#xff08;Hightopo&#xff09;凭借其强大的 HT for Web 产品&#xff0c;打造出 2D 智慧仓储可视化平台&#xff0c;为仓储管理带来了全新的技术解决方案。 HT 是一款基于 WebGL、can…

HTML ASCII 编码详解

HTML ASCII 编码详解 引言 HTML&#xff08;HyperText Markup Language&#xff09;是一种用于创建网页的标准标记语言。在HTML中&#xff0c;字符的表示方式非常重要&#xff0c;因为它直接影响到网页内容的显示效果。ASCII编码作为一种基本的字符编码方式&#xff0c;在HTM…

pinia-plugin-persistedstate的使用

pinia持久化存储的使用 安装 npm install pinia-plugin-persistedstate 注册 import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstateconst pinia createPinia() pinia.use(piniaPluginPersistedstate)export default pinia …

Vue:el-table-tree懒加载数据

目录 一、出现场景二、具体使用三、修改时重新加载树节点四、新增、删除重新加载树节点 一、出现场景 在项目的开发过程中&#xff0c;我们经常会使用到表格树的格式&#xff0c;但是犹豫数据较多&#xff0c;使用分页又不符合项目需求时&#xff0c;就需要对树进行懒加载的操…

ChipCN IDE KF32 导入工程后,无法编译的问题

使用ChipON IDE for KungFu32 导入已有的工程是时&#xff0c;发现能够编译&#xff0c;但是点击&#xff0c;同时选择硬件调试时 没有任何响应。查看工程调试配置时&#xff0c;发现如下问题&#xff1a; 没有看到添加有启动配置&#xff0c;说明就是这里的问题了(应该是IDE的…

前端笔记-Element-Plus

结束了vue的基础学习&#xff0c;现在进一步学习组件 Element-Plus部分学习目标&#xff1a; Element Plus1、查阅官方文档指南2、学习常用组件的使用方法3、Table、Pagination、Form4、Input、Input Number、Switch、Select、Date Picker、Button5、Message、MessageBox、N…