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显示图片的更多相关文章

  1. 基于FPGA驱动VGA显示图片的小问题

    学习VGA显示图片的过程中,遇到了一个小问题,我在显示屏上开了一个60x60的框,放了一张图片进去显示,但是最终的结果如下图所示. 出现了一个竖黑边,看了看代码,分析了一下逻辑没问题,然而看这个显示那 ...

  2. 基于FPGA的Uart接收图像数据至VGA显示

    系统框图 前面我们设计了基于FPGA的静态图片显示,接下来我们来做做基于FPGA的动态图片显示,本实验内容为:由PC端上位机软件通过串口发送一幅图像数据至FPGA,FPGA内部将图像数据存储,最后扫描 ...

  3. 基于FPGA的VGA显示静态图片

    终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为 ...

  4. 纠错:基于FPGA串口发送彩色图片数据至VGA显示

    今天这篇文章是要修改之前的一个错误,前面我写过一篇基于FPGA的串口发送图片数据至VGA显示的文章,最后是显示成功了,但是显示的效果图,看起来确实灰度图,当时我默认我使用的MATLAB代码将图片数据转 ...

  5. FPGA驱动VGA显示静态图片

    一 .前言 本文设计思想采用明德扬至简设计法.VGA是最常见的视频显示接口,时序也较为简单.本文从利用显示屏通过VGA方式显示测试图案及静态图片着手带大家接触图像显示应用,算是为后续VGA显示摄像头采 ...

  6. OV5640图像采集(一)VGA显示

    vga控制器模块 1 引言  项目的背景是采集无人车间现场的工件图像并送往控制间pc端处理,最终实现缺陷检测.项目包括图像采集模块,数据传输模块,上位机,缺陷检测算法等四个部分.其中,图像采集模块又分 ...

  7. img只显示图片一部分 或 css设置背景图片只显示图片指定区域

    17:14 2016/3/22img只显示图片一部分 或 css设置背景图片只显示图片指定区域 background-position: 100% 56%; 设置背景图片显示图片的哪个坐标区域,图片左 ...

  8. python将图片转换为Framebuffer裸数据格式(终端显示图片)

    要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...

  9. Chrome 控制台新玩法-console显示图片以及为文字加样式

    有兴趣的同学可以文章最后的代码复制贴到控制台玩玩. Go for Code 在正常模式下,一般只能向console 控制台输出简单的文字信息.但为了把信息输出得更优雅更便于阅读,除了cosole.lo ...

  10. 如何使用SOIL在VS2012的 C++环境下显示图片

    先看下效果. 这是一个很无聊的功能....首先说下,我做这个功能的初衷并不是为了实现在控制台中显示图片...(这貌似很无聊) 而是因为自己想做用C做一个游戏:http://q.cnblogs.com/ ...

随机推荐

  1. Unity实现敌人生命条

    在敌人物体身上添加 Slider,将Background设置为黑色,FIllarea设置为绿色,调整滑块大小. 生命值减少代码设计如下: using System.Collections; using ...

  2. 使用小皮面板新建站点配置SSL证书

    1.新建站点 2,点开配置->SSL,将证书内容复制进去,点击保存后会在"配置文件"生成一个serve{}代码块 3,删掉默认的serve{},保留经过SSL生成的serve ...

  3. KingbaseES角色和权限介绍

    KingbaseES 使用角色的概念管理数据库访问权限.为了方便权限管理,用户可以建立多个角色,对角色进行授权和权限回收,并把角色授予其他用户. 数据库初始化时,会创建一个超级用户的角色:system ...

  4. kingbaseES 优化之数据库瓶颈排查

    针对数据库的性能瓶颈排查方法分为两个层次1.实例级别性能问题排查 2.语句级别性能问题排查 实例级别 实例级别性能问题排查用来分析数据库实例整体是否存在性能瓶颈,然后根据排除出的疑似问题进行实例级别参 ...

  5. redis的两种持久化方式

    1.为什么redis需要持久化 答:edis是基于内存的,如果Redis服务器挂了,数据就会丢失 2.有几种方式实现redis的持久化 答:有两种,一种是AOF 持久化,另一种是RDB持久化 一. A ...

  6. #K-D Tree#BZOJ 4303 数列

    题目传送门 分析 将 \((i,p_i)\) 视为一个点,那么相当于对横坐标或纵坐标对应的点区间乘.区间加或者区间求和, 把这些点丢到 K-D Tree 上,维护最小/大横/纵坐标,如果当前区间点在范 ...

  7. #直径,线段树#51nod 1766 树上的最远点对

    题目 多组询问,在 \([a,b]\) 和 \([c,d]\) 中分别选一个点 \(x,y\) ,使得 \(dis(x,y)\) 最大 分析 考虑直径的一个性质,两个点集两条直径的四个端点可能成为合并 ...

  8. 80+产品正通过兼容性测试,OpenHarmony生态蓬勃发展

    4 月 25 日,开放原子开源基金会举办了 OpenAtom OpenHarmony(以下简称"OpenHarmony")技术日活动,OpenHarmony PMC 委员代表首次对 ...

  9. OpenHarmony将携新成果亮相HDC2022

     第四届华为开发者大会 2022(Together)将于11月4日-6日在东莞召开,OpenAtom OpenHarmony(以下简称"OpenHarmony")将携新生态成果亮相 ...

  10. 深入理解 Java 方法重载与递归应用

    Java 方法重载 方法重载 允许在同一个类中定义多个具有相同名称的方法,但 参数列表 必须不同. 语法: returnType methodName(parameter1, parameter2, ...