【【萌新的SOC学习之 VDMA 彩条显示实验之一】】

萌新的SOC学习之 VDMA 彩条显示实验之一

实验任务 :
本章的实验任务是 PS写彩条数据至 DDR3 内存中 然后通过 VDMA IP核 将彩条数据显示在 RGB LCD 液晶屏上

下面是本次实验的系统框图
在这里插入图片描述

VDMA 通过 HP接口 与 PS端的 DDR 存储器 进行交互

因为 VDMA 出来的是 stream流 的 数据 我们现在需要的是把 这个 stream流的数据 通过这个 AXI4-Stream to Video Out 模块
变成 RGB 所能接收的 格式
因为 LCD 有很多的 型号啊 分辨率 之类的
我们可以通过 AXI GPIO 这个接口 接收 LCD的ID 以便 为了后续的设计做处理

下面的 Video Timing Controller VTC 是用来给我们的 RGB 提供一个时序信息

还有一个 动态时钟配置 就是为了给不同屏幕 提供不同的同步时钟
在这里插入图片描述

为什么在这里 它要先把 VDMA的数据传递到 DDR 再传回 VDMA呢
目的是 为了 解决 视频源 和 视频不匹配的问题

我们目前 可以 先简化这样的流程设计
在这里插入图片描述

因为 我们目前所处理的是 固定的型号的屏幕 那么我们可以 删除 AXI GPIO 接口
动态时钟配置 删除 改为 使用 PLL 锁相环 提供 固定时钟的 频率
这个 rgb2lcd 的 IP 只是为了 把 LCD 信号 封装 我们在前期的设计中 也可以暂时将它 删除 取消

还有对于 VTC模块 PS端本来会针对 不同的屏幕 输出 不同的时序 但是 目前来说 我们只针对使用 一个时序 所以可以把PS端 连接输入到 VTC 的 线删除 让它 输出固定频率 不需要调配了
下面是调配完成的 系统框图
在这里插入图片描述

在 zynq中 GP接口 PS 作为 主机 HP接口 PS作为从机
HP 和 GP接口的区别
HP接口 指的是
High-Performance Ports
如果涉及到 大量数据 高带宽的性能传输 用HP
GP 接口指的是
General-Purpose Ports
GP 主要会用到一些中低速的传输

对于zynq HP 是 PL端指向 PS端的
在这里插入图片描述

而对于 GP接口 PS PL 都可以作为主机和从机
在这里插入图片描述

这是我们从图上直观的感知出来的 现在我们观察 用户手册发现HP和 GP 的 区别
HP接口 为PS端的DDR和 OCM 提供一个高带宽的数据路径
每一个HP接口都包含了 FIFO 缓存 提供了 读写的传输

我们在设置的时候 会发现 HP接口是 slave
但是 我们在文档里 可以发现 HP接口 还有显示 master 的 其实这是看我们和什么进行比较 如果我们HP与 AXI interconnect 进行比较时 这就是 master接口
GP接口总线的数据位宽是32位
而HP接口总线的数据位宽 可以是32位 也可以是64位
GP接口 没有FIFO 作缓冲
在这里插入图片描述

VDMA 提供了一种高带宽的存储访问 在 存储器与 目标外设之间
AXI目标外设是 AXI stream video 类型的目标外设
AXI Stream Video 协议
在这里插入图片描述

tuser—作用 start of Frame 表示一帧的开始
tlast ----作用 用来指示 一行的结尾
tkeep 和 tstrb 如果我们 用到了这两个信号 我们就把它赋值为1 就可以了
tuser信号 可能是多个比特的信号 但是只有 bit 0 才代表了 start of Frame

如何用 vaild 和 ready 信号 来传递 SOF信息
在这里插入图片描述

为什么要有 EOL信号 是用来表示我们信号的时序
EOL 代表着 一行的结束 它是在 AXI4-Stream 的 TLAST信号上 的
我们把 TLAST置为高 就相当于 代表着 一行的 结束
VDMA相对于 DMA 不仅接口类型不同 它还会 提供 帧缓存
帧缓存 就是在 存储器内部开辟一个视频空间 用来存储 输入的视频数据 或者是要输出的 视频图像
帧缓存的存在 是为了用来处理 帧速率的 改变 还有图像维度的 改变

在这里插入图片描述

VDMA 模块示意图
VDMA 左边 接到了 DDR上 它是一种 存储映射接口
右边接到了 AXI Stream 的 VDMA 接口
在这里插入图片描述

第二个 fsync 是帧同步信号
帧同步信号的下降沿 标示着一帧信号的开始
然后我们先把 address 的 vaild 信号 拉高 在这里拉高了5次
表示我们从内存中 连续读出 五行 图像 (然后这五行图像组成了1帧)
在这里插入图片描述

下面是 读数据通道 它会返回我们从内存中 读出来的数据

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

这两个 共同组成了MM 接口
下面我们来讲述ST接口
我们从MM 读出的数据 会先存到 line buffer 中 然后从 ST接口传输出去
在这里插入图片描述

我们可以观察到 当tvaild 拉高时 代表从内存读出来的数据以ST的形式正在输出
tlast 拉高 表示的时eol 所以在每一行的最后 都会拉高
在这里插入图片描述

st 接口的 tlast 表示 每一行的 最后一个像素点
在这里插入图片描述

axi协议的 last 信号 实际上是 突发传输的 最后一个数据

下面我们从 Block Design 中 学习具体的内容
在这里插入图片描述

第一个 S_AXI_LITE 接口 主要接到了 zynq 上的 GP端 用来传输 我们主机对 VDMA 的 各种控制
在这里插入图片描述

这两个的 下标前缀都是 AXIS 表示这是 传输 图像数据 的 Stream 接口
剩下两个是相对于我们 在上图 总体规划的左侧的 存储器映射接口

在这里插入图片描述

在这里插入图片描述

Address Width 表示我们最大访问的范围 32 就是 2的32次方
Frame Buffers 帧缓存 我们默认为3
(意思是 在同时使能读 同时使能写 的 状况下 我们 默认为 3 )

现在这里 我们只进行 读 不进行写 所以我们在内存中 只开辟一个帧缓存的空间
在这里插入图片描述

Memory Map Data Width 指的是 存储器 映射位宽

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

这里的 Stream Data Width 实际上就是我们传输的 (图片 这种形式下的 数据位宽
这里我们读RGB888 RGB888是 24bit 的数据
Line Buffer Depth 这里是 行缓存的大小
在这里插入图片描述

这是得到的 最后配置

然后我们观察 Advanced 选项
里面有一个 Fsync Options 这是 设置 帧同步的选项 我们可以选择 None 也可以选择 帧同步
在这里插入图片描述

帧同步 是什么意思呢
我们只有在 帧同步信号的下降沿 我们才对一帧进行操作
在这里插入图片描述

GenLock Mode 指的是 帧缓存的同步模式 这个只有在同步使能读通道 写通道的时候 才会出现这个

我们配置完毕后 选择自动连接 如下是整个电路示意图
在这里插入图片描述

我们观察 如图 发现它会出现两个互联 一个是 AXI interconnect 互联 还有一个是 AXI SmartConnect 互联
现在我们讲述一下 这两个互联之间的 区别和联系
Smart互联 更加紧密的集成到了Vivado的开发环境中去
AXI 互联 可以用在所有的存储器映射中

有一些特定的情况 针对高带宽 的传输 我们使用 Smart互联 他会对我们的设计进行更好的优化 ,它会给系统带来更大的带宽和更小的延时 。
对于中高性能的设计 一般来说用 AXI SmartConnect
对于 低性能如 AXI4-Lite 复杂度比较小 所以用 AXI interconnect

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

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

相关文章

【数据预处理3】数据预处理 - 归一化和标准化

处理数据之前,通常会使用一些转换函数将「特征数据」转换成更适合「算法模型」的特征数据。这个过程,也叫数据预处理。 比如,我们在择偶时,有身高、体重、存款三个特征,身高是180、体重是180、存款是180000&#xff1…

SpringBoot 整合 Freemarker

通过 Freemarker 模版,我们可以将数据渲染成 HTML 网页、电子邮件、配置文件以及源代码等。 Freemarker 不是面向最终用户的,而是一个 Java 类库,我们可以将之作为一个普通的组件嵌入到我们的产品中。 Freemarker 模版后缀为 .ftl(FreeMarke…

python算法例10 整数转换为罗马数字

1. 问题描述 给定一个整数,将其转换为罗马数字,要求返回结果的取值范围为1~3999。 2. 问题示例 4→Ⅳ,12→Ⅻ,21→XⅪ,99→XCIX。 3. 代码实现 def int_to_roman(num):val [1000, 900, 500, 400,100, 90, 50, 40…

【DevOps】Git 图文详解(四):Git 使用入门

Git 图文详解(四):Git 使用入门 1.创建仓库2.暂存区 add3.提交 commit 记录4.Git 的 “指针” 引用5.提交的唯一标识 id,HEAD~n 是什么意思?6.比较 diff 1.创建仓库 创建本地仓库的方法有两种: 一种是创建…

(Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、完整程序数据说明文档下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matalb平…

Java Swing算术我最棒

内容要求 1) 本次程序设计是专门针对 Java 课程的,要求使用 Java 语言进行具有一定代码量的程序开发。程序的设计要结合一定的算法,在进行代码编写前要能够设计好自己的算法。 本次程序设计涉及到 Java 的基本语法,即课堂上所介绍的变量、条件语句、循…

vuedraggable拖拽列表设置某一条元素禁止被拖拽

直接上代码 <draggable filter".unDrag"><div class"unDrag">不能拖拽</div><div class"canDrag">可以拖拽</div> </draggable>一、设置filter 在draggable节点的属性filter设置不可拖拽的class名&#…

3D全景视角,足不出户感知真实场景的魅力

近年来&#xff0c;随着科技的快速发展&#xff0c;普通的平面静态视角已经无法满足我们了&#xff0c;不管是视角框架的限制还是片面的环境展示&#xff0c;都不足以让我们深入了解场景环境。随着VR全景技术的日益成熟&#xff0c;3D全景技术的出现为我们提供了全新的视觉体验…

uni-app(1)pages. json和tabBar

第一步 在HBuilderX中新建项目 填写项目名称、确定目录、选择模板、选择Vue版本&#xff1a;3、点击创建 第二步 配置pages.json文件 pages.json是一个非常重要的配置文件&#xff0c;它用于配置小程序的页面路径、窗口表现、导航条样式等信息。 右键点击pages&#xff0c;按…

Kafka(四)消费者消费消息

文章目录 如何确保不重复消费消息&#xff1f;消费者业务逻辑重试消费者提交自定义反序列化类消费者参数配置及其说明重要的参数session.time.ms和heartbeat.interval.ms和group.instance.id增加消费者的吞吐量消费者消费的超时时间和poll()方法的关系 消费者消费逻辑启动消费者…

遗传算法GA-算法原理与算法流程图

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、遗传算法流程图 1.1. 遗传算法流程图 二、遗传算法的思想与机制 2.1 遗传算法的思想 2.2 遗传算法的机制介绍 三、 遗传算法的算法流程 3.1 遗传算法的算法…

PXE高效批量网络装机

目录 一.PXE 1. 系统装机的三种引导方式 2. 系统安装过程 3. 光盘安装相关文件 4. PXE简介 5. 实现过程 6. PXE优点 二.PXE实现过程 1. 实验准备 2. 搭建DHCP服务器 3. 配置TFTP服务器 4. 准备pxelinu.0文件 5. 挂载镜像准备内核、驱动文件 6. 手写配置文件 7. 准…

强烈 推荐 13 个 Web前端在线代码IDE

codesandbox.io&#xff08;国外&#xff0c;提供免费空间&#xff09; 网址&#xff1a;https://codesandbox.io/ CodeSandbox 专注于构建完整的 Web 应用程序&#xff0c;支持多种流行的前端框架和库&#xff0c;例如 React、Vue 和 Angular。它提供了一系列增强的功能&…

springboot项目中获取业务功能的导入数据模板文件

场景: 在实际业务场景中,经常会遇到某些管理功能需要数据导入共功能,但既然是导入数据,肯定会有规则限制,有规则就会有数据模板,但这个模板一般是让客户自己下载固定规则模板,而不是让客户自己随便上传模板。下面介绍直接下载模板 一、下载模板示例 1、在项目的…

信安.网络安全.UDP协议拥塞

第一部分 如何解决UDP丢包问题 一、UDP 报文格式 每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分。报头由 4 个 16 位长&#xff08;2 字节&#xff09;字段组成&#xff0c;分别说明该报文的源端口、目的端口、报文长度和校验值。UDP 报文格式如图所示。 UDP 报文中每个…

前端性能优化之LightHouse

优质博文&#xff1a;IT-BLOG-CN 一、LightHouse环境搭建 LightHouse是一款由Google开发的开源工具&#xff0c;用于评估Web应用程序的性能和质量。可以将其看作是一个Chrome扩展程序运行&#xff0c;或从命令行运行。为LightHouse提供一个需要审查的网址&#xff0c;它将针对…

基于django水果蔬菜生鲜销售系统

基于django水果蔬菜生鲜销售系统 摘要 基于Django的水果蔬菜生鲜销售系统是一种利用Django框架开发的电子商务平台&#xff0c;旨在提供高效、便捷的购物体验&#xff0c;同时支持水果蔬菜生鲜产品的在线销售。该系统整合了用户管理、产品管理、购物车、订单管理等核心功能&…

springboot引入第三方jar包放到项目目录中,添加web.xml

参考博客&#xff1a;https://www.cnblogs.com/mask-xiexie/p/16086612.html https://zhuanlan.zhihu.com/p/587605618 1、在resources目录下新建lib文件夹&#xff0c;将jar包放到lib文件夹中 2、修改pom.xml文件 <dependency><groupId>com.lanren312</grou…

【C++】【Opencv】cv::warpAffine()仿射变换函数详解,实现平移、缩放和旋转等功能

仿射变换是一种二维变换&#xff0c;它可以将一个二维图形映射到另一个二维图形上&#xff0c;保持了图形的“形状”和“大小”不变&#xff0c;但可能会改变图形的方向和位置。仿射变换可以用一个线性变换矩阵来表示&#xff0c;该矩阵包含了六个参数&#xff0c;可以进行平移…

数据库课后习题加真题

文章目录 第二章第三章第四到六章某年真题 第二章 第三章 3.8 对于教学数据库的三个基本表&#xff1a; s( 学号 ‾ \underline{学号} 学号​&#xff0c;姓名&#xff0c;年龄, 性别) sc( 学号 , 课程号 ‾ \underline{学号, 课程号} 学号,课程号​, 成绩) c( 课程号 ‾ \un…