1.DMA

我们的整体VGA显示分为几步:比如先导入VIDEO TIMING CONTROL来做对输入数据的时序“对齐”,这里开源骚客写的很详细,先用了一个虚拟IO(VIO)来作为输入,导入了一个简单的RTL模块(当VTL的使能信号有效时,RGB_DATA_OUT就接收来自VIO的RGB_DATA_IN);

接着,我们要把VIO替换掉为DMA+PS端的模块(即输入数据变成了PS端处理过后的,被DMA读取)

DMA 有两个 AXI 流端口。一个是 AXI 主流 (M_AXIS_MM2S),对应于 READ 通道。数据将通过 M_AXI_MM2S 端口从内存中读取,并发送到 M_AXIS_MM2S 端口(并发送到连接到此端口的 IP)。

以下是对VDMA的通俗解释(来自AI):

VDMA就是视频数据的"快递专车",它直接在摄像头(PL端)和内存(PS端)之间建立一条专用高速公路,让视频帧数据不经过CPU就能直达目的地。

写的很详细的教程:Tutorial: PYNQ DMA (Part 1: Hardware design) - Learn - PYNQ

另一个对DMA很通俗的解释视频:10行代码,就能让你真正理解DMA!你用的可能很少,但是在单片机中非常重要!_哔哩哔哩_bilibili

2.AXI接口之读写DDR

  1. AXI4主控制器:模块(axi4_rw)作为AXI总线的主设备,主动发起读写请求。

  2. DDR访问:通过HP接口连接到Zynq(从机)的DDR控制器,实现对DDR内存的读写。

  3. 控制接口:提供启动信号(init_axi_txn)、完成标志(txn_done)和错误指示(error)。

  4. 无用户信号AWUSER/ARUSER/WUSER等宽度为0,简化设计。

用户信号是什么?

在AXI协议中,用户信号(如AWUSERARUSERWUSER等)是可选的扩展信号,用于在标准AXI通道中传递额外的自定义信息。它们不属于AXI核心协议规范,而是提供给设计者的"扩展槽"。

——内容由AI生成

对着野火的PS文档直接复现,一个问题是警告:

你把 AXI 接口的 RUSER_WIDTHWUSER_WIDTH 设成了 1 位,但这不符合 AXI 规范,因为数据总线是 32 位(4 字节),而用户信号宽度必须是“每字节整数倍”的位数。但其实这里我们根本不需要什么用户位宽,双击axi4_rw的ip把后面五个位宽全部修改成0即可解决:

所有m00_axi_*信号连接到Zynq的HP0/HP1等AXI从端口。

当外部逻辑拉高(也就是对应的按键消抖模块的flag有效),m00_axi_init_axi_txn拉高,触发模块开始读写操作。

总结:axi4_rw模块是FPGA与Zynq DDR通信的“桥梁”,通过标准化AXI4协议实现高效突发传输。编写者只需触发init_axi_txn,模块自动完成地址分配、突发控制、握手响应等复杂操作,极大简化了DDR交互逻辑设计。

3.ip核配置

对于GP M口,PS端是主;对于HP ,PS端是从。

信号名称总线类型协议特点典型连接对象
M_AXI_MM2SAXI4-Full存储器映射,含地址/控制信号DDR内存控制器
M_AXIS_MM2SAXI4-Stream纯数据流,无地址信号流处理IP核

S就是Stream的缩写,表示"流式数据传输";摄像头采集的视频就是没有地址的视频流,CPU无法直接解析无地址的流数据,我们要使用VDMA;

在野火的第17个例程DMA环回读写实验中,由于数据经过DMA之后变成了数据流,与之打交道的也应该是带有  Stream 接口的高速的 AD 或 DA IP 核(比如AXI4_STREAM TO VIDEO OUT),这里我们方便起见选择了AXI4  Stream Data FIFO IP 核来充当这类 IP,这个FIFO起到  将AXI-Full 总线转换为 AXI-Stream 总线  ,并且充当一个“流数据池”的作用。其S_AXIS与DMA的M_AXIS_MM2S相连,M_AXIS与DMA的S_AXIS_S2MM相连,非常类似于正负极的连接。

AXI DMA 的 MM2S/S2MM 两个通道 → 通过 fabric 中断号 → 接到 PS 的 GIC → 由 TxIntr_Handler / RxIntr_Handler 处理完成/错误事件 → 把全局标志 Tx_Done / Rx_Done / Error 置位 → 主循环里根据标志位做后续动作。

#define RX_INTR_ID XPAR_FABRIC_AXIDMA_0_S2MM_INTROUT_VEC_ID
#define TX_INTR_ID XPAR_FABRIC_AXIDMA_0_MM2MM_INTROUT_VEC_ID

GIC给中断源分配了中断号,这两个宏就是 BSP 在 xparameters.h 里根据我们的硬件设计自动生成的;在 Vivado 里把 AXI-DMA 的 mm2s_introut / s2mm_introut 信号拉到 PS 的 IRQ_F2P[x] 引脚的那一刻,就已经决定了它的中断号;之后 Vivado 导出 HDF,SDK/Vitis 根据 HDF 生成 xparameters.h,把连线结果翻译成宏值,软件直接用即可。

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

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

相关文章

AGX Xavier 搭建360环视教程【补充一:鱼眼去畸变(Fisheye Undistortion)】

对每路帧做鱼眼去畸变除了用cv::cuda::remap是否有更好的办法呢?确实 cv::cuda::remap 不是唯一可选项,甚至未必是最高效或最适合实际业务量级的方案。🎯 1️⃣ 去畸变的原理鱼眼相机(或者大广角相机)会把直线拉弯&…

tomato靶机练习

下载完靶机后,直接运行,选择安装路径后将虚拟机的网络设置为nat模式,设置完成后重启虚拟机扫描同一网段,查找主机,这里我们使用kali的nmap,既能找到主机,也能查看开启的端口依次尝试&#xff0c…

136. Java 泛型 - 下限通配符

文章目录136. Java 泛型 - 下限通配符 (? super T)**1. 什么是下限通配符 (? super T)&#xff1f;****2. 为什么使用下限通配符&#xff1f;****3. 示例&#xff1a;使用 ? super Integer 允许添加 Integer****✅ 正确示例****4. 为什么 List<? super Integer> 和 L…

C++23中的std::expected:异常处理

C23中的std::expected:异常处理 众所周知&#xff0c;C23以前的异常处理是比较麻烦的&#xff0c;尤其是自己要在可能抛出异常的地方&#xff0c;需要自己去捕获它&#xff0c;比如除数为0的异常、使用std::stoi函数将字符串转换成int整型数据、处理文件读写的异常等等&#x…

处理Electron Builder 创建新进程错误 spawn ENOMEM

这个错误 spawn ENOMEM 表明系统内存不足&#xff0c;无法为 Electron Builder 创建新进程。以下是一些可能的解决方案&#xff1a;释放系统内存关闭不必要的程序和服务增加物理内存 (RAM) 或交换空间 (swap)使用 free -h 和 top 命令检查内存使用情况临时增加交换空间# 创建一…

discuz安装使用教程,及网站部署在公网访问

Discuz!的安装主要包括环境准备、程序部署和配置管理三个核心步骤‌&#xff0c;有条件 的可以使用宝塔面板或云镜像简化流程&#xff0c;本地部署无公网IP的配合类似nat123映射公网访问&#xff0c;当前最新版本为Discuz! Q&#xff08;2025年发布&#xff09;和Discuz! X3.5&…

深入解析C#数字转换:隐式与显式转换的全面指南

—— 数据精度保卫战中的checked与unchecked秘籍 &#x1f4cc; 核心概念速览 1. 隐式转换 自动发生&#xff0c;无数据丢失风险&#xff08;如 int→long&#xff09;遵循"小类型→大类型"路径&#xff08;见下图⬇️&#xff09; [图1&#xff1a;C#隐式数字转换路…

量子计算可以解决的三个现实问题

今年是量子力学被发现一百周年。这一突破帮助人们认识到&#xff0c;支配我们周围世界最小层面&#xff08;分子、原子和亚原子粒子&#xff09;的物理定律&#xff0c;与支配我们在日常生活中与物体相互作用方式的物理定律有着根本的不同。量子力学让我们能够了解从血液中的新…

Valgrind Memcheck 全解析教程:6个程序说明基础内存错误

Valgrind 是一个强大的动态分析框架&#xff0c;其中的 memcheck 工具用于检测 C/C 程序中类型不定的内存错误&#xff0c;是基础级内存调试工具的重要选择。 本文将通过 6 段有意义的错误代码&#xff0c;全面讲解 memcheck 的检测原理和输出分析&#xff0c;进而帮助学习者托…

Vue3 实现 Excel 文件导入导出功能

在Vue 3中实现Excel文件的导入和导出功能&#xff0c;你可以使用一些流行的JavaScript库&#xff0c;如SheetJS&#xff08;也称为xlsx&#xff09;来处理Excel文件。以下是实现这一功能的基本步骤&#xff1a;1. 安装SheetJS首先&#xff0c;你需要安装xlsx库。在你的Vue项目中…

CS231n-2017 Lecture2图像分类笔记

图像分类问题定义&#xff1a;在已有固定的分类标签集合的前提下&#xff0c;能够对输入的图像进行识别处理&#xff0c;从集合中找到该图像所对应的标签。对于计算机而言&#xff0c;图像并非直观的图像&#xff0c;而是一个的像素集合&#xff0c;对于每个像素&#xff0c;其…

Typecho博客Ajax评论功能实现全攻略

文章目录 Typecho实现Ajax评论功能的完整指南 引言 一、技术选型与准备工作 1.1 技术栈分析 1.2 环境准备 二、前端实现方案 2.1 基础HTML结构 2.2 JavaScript处理逻辑 三、后端处理实现 3.1 创建插件处理Ajax请求 3.2 错误处理增强 四、安全性考虑 4.1 CSRF防护 4.2 输入过滤 …

【计算机考研(408)- 数据结构】树与二叉树

树与二叉树 树的定义及相关概念 树是n&#xff08;n≥0&#xff09;个结点的有限集合&#xff0c;n 0时&#xff0c;称为空树&#xff0c;这是一种特殊情况。在任意一棵非空树中应满足&#xff1a; 1&#xff09;有且仅有一个特定的称为根的结点。 2&#xff09;当n > 1时…

MacOS:如何利用终端来操作用户

MacOS&#xff1a;如何利用终端来操作用户MacOS&#xff1a;如何利用终端来操作用户1. 创建用户并赋予管理员权限步骤&#xff1a;2. 取消用户的管理员权限解释&#xff1a;3. 查看组成员查看 admin 组成员&#xff1a;查看 users 组成员&#xff1a;4. 其他常见的用户管理命令…

基于SpringBoot+MyBatis+MySQL+VUE实现的医疗挂号管理系统(附源码+数据库+毕业论文+答辩PPT+项目部署视频教程+项目所需软件工具)

摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对医疗挂号信息管理的提升&#x…

学成在线项目

黑马程序员学成在线项目学习过程记录 解决跨域问题

Shell脚本-grep工具

一、前言在 Linux/Unix 系统中&#xff0c;grep 是一个非常强大且常用的文本搜索工具&#xff0c;它可以帮助我们快速从文件或标准输入中查找匹配特定模式的内容。无论是查看日志、调试脚本&#xff0c;还是进行自动化数据提取&#xff0c;grep 都扮演着至关重要的角色。本文将…

深入解析Ext2文件系统架构

要在硬盘上存储文件&#xff0c;必须先将硬盘格式化为特定类型的文件系统。文件系统的主要功能就是组织和管硬盘中的文件。在Linux系统中&#xff0c;最常见的文件系统是Ext2系列&#xff0c;其早期版本为Ext2&#xff0c;后续又发展出Ext3和Ext4。虽然Ext3和Ext4对Ext2进行了功…

商业秘密保护:从法律理论到企业实战

作者&#xff1a;邱戈龙、柯坚豪深圳商业秘密律师广东长昊律师事务所在商业竞争中&#xff0c;商业秘密就像企业的"隐形护城河"。从法律角度看&#xff0c;它的保护路径经历了三次重要升级&#xff1a;从最初的"合同约定"到后来的"财产保护"&…

AI产品经理面试宝典第36天:AI+旅游以及行业痛点相关面试题的指导

一、AI如何解决旅游行业核心痛点? 面试官提问: "请结合具体案例说明AI在旅游行业的应用价值,以及它如何解决传统旅游服务的痛点?" 你的回答: 以腾讯"一部手机游云南"为例,AI技术通过四大核心体系重构旅游体验: 数字身份体系:通过人脸识别与用户…