VGA显示图片
VGA显示图片
1. VGA显示图片的原理
图片比之前显示的色块和字符的数据量大,所以使用rom来存储图片。用到ROM IP。可以存放mif和hex格式,需要先把图片转换成mif格式。
2. 如何制作mif文件
先用windows自带的画图工具打开图片,调整大小。步骤:点击重新调整大小,不勾选“保持从横比”,输入像素(如:160*120).最后,另存为,选择24bit的bmp格式。利用网络下载的格式转换工具,把图片转换成mif格式,注意。图片格式选RGB888,24位。将mif文件复制到工程目录下。图片格式转换工具,经实测,推荐BMP2MIF。
3. 调用ROM IP
在IP窗口搜所rom,选择ROM 1 port。(1)设置位宽24位,深度32768字节。



深度大小设置为比图片大即可。可以自行换算,图片的每个点都是24位,160*120=19200个,所以这里选择32768,才装的下这个图片的数据。也就是,rom可以够大,但不能小。连续点Next,直到下图,选择mif文件。
4. 代码设计
先在VGA_control.v中添加中间变量:
显示图片,需要先定义图片的大小,即长和宽,160*120;然后定义一个计数器cnt_rom_address,用来取rom里的数据,计数器的最大值就是160*120-1,用flag_clear_rom_address表示。图片的定位,还需要考虑图片的坐标,分为行有效和列有效,即flag_begin_h和flag_begin_v。把这两个综合起来的矩形区域就是图片的显示范围。
后面控制图片显示的逻辑,就是先取地址,在图片区域时,递增取地址,循环操作。按地址读取的数据,送到VGA显示。也就是划范围,取地址,读内存,送显。
再标记图片显示有效区:

根据图片显示有效信号picture_flag_enable生产ROM地址计数器:

例化ROM IP,按照地址计数顺序输出图片:

画面停留时间约6S,因为25MHz的时钟换算得来。
修改的代码片段:
// picture
assign flag_clear_rom_address=(cnt_rom_address==height*width-1);
assign flag_begin_h=pos_x>((640-width)/2) && pos_x<((640-width)/2+width+1);
assign flag_begin_v=pos_y>((480-height)/2) && pos_y<((480-height)/2+height+1);
assign picture_flag_enable=flag_begin_h&&flag_begin_v;
//picture rom address counter
always @ (posedge clk, negedge rst_n)
if (!rst_n)
cnt_rom_address<=0;
else if(flag_clear_rom_address)
cnt_rom_address<=0;
else if(picture_flag_enable)
cnt_rom_address<=cnt_rom_address+1;
else
cnt_rom_address<=cnt_rom_address;
//rom inis
rom rom_inst(
.address(cnt_rom_address),
.clock(clk),
.q(rom_data));
always @ (posedge clk, negedge rst_n)
if (!rst_n)
vga_rgb <= 24'b000000000000000000000000;
else if(picture_flag_enable)
vga_rgb <= rom_data;
else
vga_rgb <= 24'b000000000000000000000000;
参考:
https://mp.weixin.qq.com/s/OzBL4HQdLOLQvRbBKuUpxA
VGA显示图片的更多相关文章
- 基于FPGA驱动VGA显示图片的小问题
学习VGA显示图片的过程中,遇到了一个小问题,我在显示屏上开了一个60x60的框,放了一张图片进去显示,但是最终的结果如下图所示. 出现了一个竖黑边,看了看代码,分析了一下逻辑没问题,然而看这个显示那 ...
- 基于FPGA的Uart接收图像数据至VGA显示
系统框图 前面我们设计了基于FPGA的静态图片显示,接下来我们来做做基于FPGA的动态图片显示,本实验内容为:由PC端上位机软件通过串口发送一幅图像数据至FPGA,FPGA内部将图像数据存储,最后扫描 ...
- 基于FPGA的VGA显示静态图片
终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...
- 纠错:基于FPGA串口发送彩色图片数据至VGA显示
今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...
- FPGA驱动VGA显示静态图片
一 .前言 本文设计思想采用明德扬至简设计法.VGA是最常见的视频显示接口,时序也较为简单.本文从利用显示屏通过VGA方式显示测试图案及静态图片着手带大家接触图像显示应用,算是为后续VGA显示摄像头采 ...
- OV5640图像采集(一)VGA显示
vga控制器模块 1 引言 项目的背景是采集无人车间现场的工件图像并送往控制间pc端处理,最终实现缺陷检测.项目包括图像采集模块,数据传输模块,上位机,缺陷检测算法等四个部分.其中,图像采集模块又分 ...
- img只显示图片一部分 或 css设置背景图片只显示图片指定区域
17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...
- python将图片转换为Framebuffer裸数据格式(终端显示图片)
要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...
- Chrome 控制台新玩法-console显示图片以及为文字加样式
有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.lo ...
- 如何使用SOIL在VS2012的 C++环境下显示图片
先看下效果. 这是一个很无聊的功能....首先说下,我做这个功能的初衷并不是为了实现在控制台中显示图片...(这貌似很无聊) 而是因为自己想做用C做一个游戏:http://q.cnblogs.com/ ...
随机推荐
- 重返ubuntu世界
一直对"重返"两个字充满了情怀感,因为会想起小时候看的一本龙珠同人的标题,它就唤作<重回龙珠世界>.最近这五年基本都是在MacOS下工作和学习的,也习惯用MacOS.就 ...
- 使用systemd部署r-nacos
1. 前言 r-nacos是一个用rust实现的nacos服务.相较于java nacos来说,是一个提供相同功能,启动更快.占用系统资源更小(初始内存小于10M).性能更高.运行更稳定的服务. r- ...
- KingbaseES V8R6 中unlogged表
前言 KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged.和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中.在数据库异常 ...
- Makefile 简单学习
一.Makefile 简介 Makefile 是一种常用于编译的脚本语言.它可以更好更方便的管理你的项目的代码编译,节约编译时间(没改动的文件不编译).注意 Makefile 文件命令必须是 Make ...
- 讲讲百度地图API遇到的坑,石锤百度官方代码的错,解决SN校验失败
这两天在做一个项目,用到了百度地图API,根据坐标获取具体位置,总结一下遇到的几个坑 本文基于最新的V3接口,网上好多要么是V2,要么根据地址获取坐标,本文是唯一一个最新的3,根据坐标获取位置的完整说 ...
- #线段树#洛谷 4340 [SHOI2016]随机序列
题目 分析 可以发现加号和减号会抵消掉,真正有用的答案就是第一段的乘积. 那也就是 \(\sum_{i=1}^nS_i*2*3^{n-i-1}\),其中 \(S_i\) 表示 \(a_1\) 到 \( ...
- #搜索,树剖,set#洛谷 3322 JZOJ 4049 [SDOI2015]排序&洛谷 3320 JZOJ 4050 [SDOI2015]寻宝游戏
洛谷 3322 [SDOI2015]排序 题目 小A有一个\(1\sim 2^N\)的排列\(A[1\sim 2^N]\),他希望将A数组从小到大排序,小A可以执行的操作有\(N\)种,每种操作最多可 ...
- Docker 解决 `denied: requested access to the resource is denied`
背景 由于不可描述的原因,相对于以前,最近在更加频繁的迁移服务器,简单的 Shell 脚本已经不能满足需求了,于是将所有的项目 Docker 化. 部分不含敏感配置的项目准备放到 DockerHub ...
- C 语言函数:入门指南
C 语言中的函数声明和定义 您可以通过以下方式创建并调用函数: // 创建一个函数 void myFunction() { printf("我刚被执行了!"); } int mai ...
- 域名之A记录,CNAME,NS联系和区别
域名解析中常常涉及:A记录,CNAME,NS 1. A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器.说明:指向的目标主机地址类型只能使用IP地址; ...