串口传输数据到FPGA上用VGA显示的可能问题及注意事项

2023-05-16

1.vga分辨率的选择和显示屏分辨率、显示屏尺寸、型号无关。显示器能自动识别输入信号并调整分辨率,输入640*480信号就自动分配到整个屏幕上。PLL的时钟配置时注意别填错,显示器会报错 输入信号不匹配。

2.注意uart 接受模块rx的busy端口,也就是接受完一个字节后拉高的信号。拉高后在下一个时钟沿就要立刻拉低。因为双端口ram写入的使能信号是busy,若拉高时间过长则导致rom_addra不能按一个字节接受完写入一次的时序递增。

3.串口助手的选择及xcom发送数据的格式。
所有串口发送的都是2进制数。
XCOM 正点原子的免费软件。
发送时:
勾选 以16进制发送 代表要发的都是纯数字,则xcom会在缓冲区里每两位16进制数读取一次,加入开始和终止信号制成一帧发送。比如以16进制发送数据 12 ,则发送0-00010011-1(开始信号,数据,终止信号),注意,12不是10进制数,即不是00001100。(12)H = 18 = 00010011 。

不勾选 以16进制数发送 代表要发的数据是字符串格式。xcom会一位一位的读取并发送。比如发送12 ,则实际发送0-00110001-1 0-00110010-1(1的ASCII码是49,转换为16进制是31(00110001),2的ASCII码是50,转换为16进制32(00110010))。

接收时:
勾选以16进制接收:在串口回环实验中,以16进制发送12,则接收12。
不勾选以16进制接收:发送31,会在屏幕上显示接收到1。

xcom有一个发送文件的功能,文件默认是txt格式,根据我实践出的结论,发送文件默认是以字符串格式发送,不论有没有勾选以16进制发送。 所以想发送大文件只能复制到缓冲区里发送,但缓冲区有存储上限,过大的文件只能分别复制然后发送。这篇说的很清楚了。常见串口工具比较(详细)

友善串口调试助手。
没有发送文件的功能,至少我现在没找到。但是发送缓冲区的容量很大,我试过将38.6k的txt直接复制到缓冲区,换成xcom至少要分段复制三次。

4.图片格式转换为RGB444或RGB332可以尝试用MATLAB,非常方便,但是要注意三种颜色分量的顺序,一般是B-G-R,高字节在前。串口传图 不注意顺序结果能显示但颜色对不上。红橙黄绿蓝靛紫黑白灰彩条,下图是RGB分量没对上时的显示结果。
在这里插入图片描述

在这里插入图片描述

5.注意图片大小和显示区域。哪怕显示区域长宽只多了一个像素,显示的图片就会扭曲很多,运气好的话还能看出原本的图案从而改进,运气不好的话就是一堆像素块,完全找不到代码要修改的地方在哪里。

6.RGB332对画面色彩降低非常多,整体偏暗,实用性不强。可以尝试把rx接受模块改造成接收16位bit,效果大概会好很多。

video_20230328_103309

7.有很多可以改进的点。比如设定串口发送的前几位数据为图片长,图片宽,图片大小,这样就不局限于只能显示分辨率一样的图片。代价是ram的容量必须设计成640480rgb位宽,因为必须容纳最大的图片,图片小的话空间就浪费了。8位宽的话容量是2.34MB,看FPGA资源再改进。
uart接收模块也可以替换为摄像头OV5640。
VGA替换成HDMI或DDR3。

8.杂项
FPGA开发板是EG01,里面有vga显示rom图像的工程。EG01用户手册 。

uart模块是从一个非易失性存储器开源项目open-fpga-nvm里拿来用的,里面的uart在接受完一个字节busy信号拉高后不会立刻拉低,要等到下一个开始信号到来后才拉低,这个特点对于这个项目来说无所谓,甚至下板做数据回环也可以正常运行,但是加上vga和rom后就不行,参考2 。当时先做完数据回环和vga显示rom图像后想当然的认为所有模块没有问题,以为简单的模块组合就能完成,大意了。。。

还有学姐的博客对我帮助非常大。基于RS232的VGA图像显示

最后,别放弃,成功不远。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口传输数据到FPGA上用VGA显示的可能问题及注意事项 的相关文章

  • 在vivado中使用tcl脚本(UG894)

    本文源自UG894 主要介绍如何在vivado中使用tcl脚本 1 vivado中如何获取tcl help vivado中任何自带的命令都可以通过 help 获取帮助信息 也可以直接输入 help 取得vivado命令合集 并通过 help
  • 【数字电路基础】三态门

    目录 前言 三态门 经典问题 前言 文主要讲解三态门 三态门 其模型为 其实际电路为 其真值表为 B A C 0 0 Z 0 1 Z 1 0 0 1 1 1 注意 Z是高阻 不代表没有电压 而是电压不确定 受自身 旁边cell的影响 经典问
  • FPGA面试真题解析(3)

    9 寄存器的Tsu 建立时间 是如何定义的 硬件逻辑实习岗 A 在时钟沿到来之后数据保持稳定的时间 B 在时钟沿带来前后数据都需要保持稳定的时间 C 在整个时钟周期数据保持稳定的时间 D 在时钟沿到来之前数据保持稳定的时间 解析 考察数字电
  • Ubuntu16.04主机安装基于ZYNQ的QT交叉编译库

    Ubuntu16 04主机尝试安装基于ZYNQ的QT交叉编译库 前言 基于vivado2016 4 SDK的交叉编译环境 主机Linux上安装vivado2016 4版本 qtcreator上添加基于ZYNQ的交叉编译工具 基本环境 参考资
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • 【原创】always语句 和 initial语句

    过程语句 有 always语句 和 initial语句 相同点 1 always语句 和 initial语句 可以多次使用 2 always语句 和 initial语句 各语句块 整体 是独立运行 3 always语句 和 initial语
  • Xilinx平台SRIO介绍(二)SRIO IP核基础知识

    使用SRIO IP核必须掌握的基础知识 理解了这篇 剩下的只是代码罢了 汇总篇 Xilinx平台SRIO介绍 汇总篇 目录 前言 SRIO RapidIO GT 有什么关系
  • 硬件设计---了解电源篇

    1 概述 在高速电路设计中一块单板上常存在多种电源 3 3V 1 8V 1 2V 1 0V 0 9V 0 75V等 有时光是对FPGA供电就需要五六种电源 为了便于使用往往用户只需要提供一种或几种电源 然后经过板上电源模块转换到各个目标电源
  • Xilinx AXI-memory接口 转 AXI-stream 接口(含源码)

    AXI memory接口 转 AXI stream 接口 AXI memory接口介绍 具体详情可以查看源码 AXI memory接口介绍 从图中我们可以看出memory接口有5个通道 分别是读地址通道 写地址通道 写响应通道 读数据通道
  • Verilog的基础知识

    Verilog的基本介绍 硬件描述语言发展至今已有二十多年历史 当今业界的标准中 IEEE标准 主要有VHDL和Verilog HDL 这两种硬件描述语言 一个设计往往从系统级设计开始 把系统划分成几个大的基本的功能模块 每个功能模块再按一
  • win10下安装vivado 2018.3之后ise14.7 的impact 无法使用

    软件版本号 操作系统win10 ise14 7 vivado 2018 3 ise14 7 在win10里面问题总结 1 ise14 7 闪退问题 比较好解决 论坛上比较多的解决方法 2 ise 14 7 windows 10 版本的ise
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • Lattice Diamond安装

    1 下载 到Lattice官网 http www latticesemi com 注册一个lattice的账号后就可以去下载Diamond 登陆后如下图 根据自己系统情况选择对应的版本 我用的是32位win8 Diamond软件安装包和La
  • FPGA功耗估计(二)

    针对于Altera的Cyclone III 做出了静态功耗 对于Altera 其提供了一个功耗早期估计工具 可以在官网上下到 首先需要将宏设置为安全 在excel选型中选择文件 之后便可看到 根据相应的选择 红框部分 可以查看静态功耗 对于
  • 用python接收高速率的UDP数据包

    我正在使用 python 来从 FPGA 接收 UDP 数据包流 并尝试丢失尽可能少的数据包 数据包速率从大约 5kHz 到一些 MHz 我们希望在特定时间窗口 代码中的 acq time 内获取数据 我们现在有这样的代码 BUFSIZE
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • 修改后的 baugh-wooley 算法乘法 verilog 代码不能正确乘法

    以下 verilog 源代码和 或测试平台可以很好地工作商业模拟器 iverilog https www edaplayground com x 3TuQ也形式化验证工具 yosys smtbmc https gist github com
  • PyOpenCL 中的时间测量

    我正在 FPGA 和 GPU 中使用 PyOpenCL 运行内核 为了测量执行所需的时间 我使用 t1 time event mykernel queue c width c height block size block size d c
  • 当垂直回扫位被清除时,VGA 卡是否会读取像素缓冲区?

    我正在开发一款使用视频模式 13h 的 DOS 游戏 我一直遇到屏幕撕裂的问题 但直到今天我一直忽略这个问题 我认为修复这将是一个挑战 因为它将涉及延迟像素写入一段精确的时间 但这实际上是一个非常简单的修复 您所要做的就是等待重新设置 VG
  • 映射 MMIO 区域写回不起作用

    我希望对 PCIe 设备的所有读写请求都由 CPU 缓存进行缓存 然而 它并没有像我预期的那样工作 这些是我对回写 MMIO 区域的假设 对 PCIe 设备的写入仅在缓存回写时发生 TLP 有效负载的大小是缓存块大小 64B 然而 捕获的

随机推荐

  • Java后端开发功能模块思路

    文章目录 前言一 查找接口及参数信息1 1 找访问路径1 2 参数及返回结果信息1 3 编写功能模块函数 二 代码设计思路三 总结 前言 对于正在学习Java后端开发的同学来说 xff0c 对于Java后端功能模块的开发过程及思路要有一个整
  • 《Linux内核设计与实现》

    文章目录 前言第1章 xff1a Linux内核简介第3章 xff1a 进程管理进程进程描述符及任务结构分配进程描述符进程描述符的存放进程状态设置当前进程的状态进程上下文切换进程家族树 进程创建写时拷贝fork 线程在linux中的实现创建
  • 基于51单片机的FRID智能门禁系统(RFID,12864,AT24C02,步进电机......)

    目录 门禁系统 需要的器件 设计思路 流程图实现 技术实现 实物接线图 实物接线图 函数设计 部分主程序代码 截取片段 12864显示模块 步进电机模块以及蜂鸣器 FRID射频模块 AT24C02模块 功能实现及其源代码 完整文件 门禁系统
  • Linux命令大全

    Linux 命令大全 Linux 命令大全 1 文件管理 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitview indent cut ln le
  • STM32与ST-Link杜邦线连接

    上面的开发板的引脚含义如下图 ST Link的引脚含义在表面就有标注 然后只要将名字相同的引脚用杜邦线连接起来就可以了 xff08 我用的是4根杜邦线就够 xff09 需要注意的是 xff1a 有可能电脑的某个USB接口不可以使用 xff0
  • float a=1.0f 中的“f”代表什么

    一个数字 xff0c 是有默认类型的 xff1a 对于整数 xff0c 默认是 int 类型 xff1b 对于小数 xff0c 默认是 double 类型 如果不想让数字使用默认的类型 xff0c 那么可以给数字加上后缀 xff0c 手动指
  • 前端面试自我检测题目查缺补漏

    git bisect是利用二分法的思想 xff0c 来查找哪一次代码提交引入了错误 git stash 暂存 git rebase 合并 git fetch clone 远程端下载至本地 JavaScript 中的 valueOf 方法用于
  • 《计算机网络(计算机)》

    因特网由两大块组成 xff1a 网络边缘由所有连接在因特网上的主机组成 xff1b 而 xff08 xff09 由大量网络和连接这些网络的路由器构成 主机的IP地址是108 5 18 20 xff0c 使用默认子网掩码 它发送一个直接广播分
  • 《战略人力资源管理》

    西南航空公司的人力资源战略是如何与公司经营战略很好地结合在一起并成功获取市场竞争优势的 xff1f 如何理解战略人力资源规划的五个维度 xff1f 如何理解人力资源管理扮演的 战略伙伴角色 xff1f 什么是战略人力资源管理 xff1f 在
  • 《自动控制原理》

    7图1 5是烤面包机的原理图 面包的烘烤质量烤箱内的温度决及烘烤时间决定 xff08 1 xff09 试说明传动带速度自动控制的工作原理 xff0c 并绘制相应的原理方框图 xff08 2 xff09 绘制烤面包机的方框图 6水位控制系统如
  • 【三】静默压测-windows10本地

    文章目录 一 自动化压测流程图 xff1a 二 静默压测 xff1a 2 1 静默压测介绍 xff1a 2 2 静默压测执行顺序 xff1a 2 2 1 生成 jtl文件 xff1a 2 2 3 Web压测报告生成 xff1a 一 自动化压
  • Java枚举详解

    目录 Java枚举详解 基本介绍 1 自定义类实现枚举 2 使用enum关键字实现枚举 使用enum关键字实现枚举的注意事项 enum的常用方法 enum的使用细节 Java枚举详解 基本介绍 枚举对应英文 enumeration 简写 e
  • 心怀美好,每天多一点微笑

    时光总是匆匆 xff0c 一年又到了尽头 xff0c 十一月底了 xff0c 还有一个月一年又过去了 我们回首过往 xff0c 有收获也要遗憾 在接下来的一个月 xff0c 心怀美好 xff0c 每天多一点微笑 xff0c 闲暇时 xff0
  • axios请求封装

    一 简单封装 封装get请求 function ajax get url params 61 return new Promise resolve 61 gt axios get url params then r 61 gt consol
  • 外接设备superblock问题解决方案

    can 39 t read superblock 1 查询device自动备份的节点 mkfs ext4 n device dev sda1 2 恢复节点 mkfs ext4 b superblocknum device dev sda1
  • Python+Webdriver实现淘宝、京东等抢单操作

    最近双十一已经到了 xff0c 笔者为了拓展技术水平研究了一下网络爬虫技术 xff0c 其中双十一给人印象最深刻地就是抢单了 xff0c 爬虫学的好 xff0c 监狱进得早 本着学术和技术研究的态度 xff0c 笔者仅使用了普通商品进行测试
  • Ubuntu用户创建及sudo权限配置

    在Ubuntu中 xff0c 如果您想让某个用户拥有sudo权限 xff0c 您需要执行以下步骤 xff1a 使用root用户或具有sudo权限的用户登录到系统 执行以下命令来添加新用户 xff1a sudo adduser usernam
  • UCOII信号量与消息邮箱

    信号量 信号量是用来保护共享资源用的 表示共享资源的个数 共享资源有被用的 xff0c 需要释放共享资源 共享资源被占用一个 xff0c 信号量的值会减1 共享资源被释放一个 xff0c 信号量的值会加1 OS EVENT OSSemCre
  • shell编程===》变量

    文章目录 变量一 变量介绍二 变量的使用2 1 先定义 后引用2 2 删除变量 三 变量的三大组成部分3 1 变量名的命名规范3 2 变量值的三种来源 三 预定变量四 常量 变量 一 变量介绍 什么是变量 xff1f 量指的是记录事物的状态
  • 串口传输数据到FPGA上用VGA显示的可能问题及注意事项

    1 vga分辨率的选择和显示屏分辨率 显示屏尺寸 型号无关 显示器能自动识别输入信号并调整分辨率 xff0c 输入640 480信号就自动分配到整个屏幕上 PLL的时钟配置时注意别填错 xff0c 显示器会报错 输入信号不匹配 2 注意ua