贪吃蛇-VGA显示图片

1 篇文章 0 订阅
1 篇文章 0 订阅

说明

由于最近有很多同学对基于FPGA的贪吃蛇游戏很感兴趣,趁着最近有时间,特将之前贪吃蛇游戏重新设计一遍,并给出详细的设计步骤,方便大家学习!一共分2期,本期教程主要解决VGA显示图片问题,主要教大家如何写VGA驱动,如何用C语言生成mif文件。本教程还是需要有一定基础的,至少会绑定引脚,会使用软件产生pll、rom等常用的ip。

VGA原理

VGA原理比较简单,主要参考《VGA时序标准》。首先需要说明的是,VGA时序有4种,如下所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以当你看到有些教程的时序不一样,不要慌,他们都是对的,这四种时序都是可以的,本教程选用第一种时序,如下所示:
在这里插入图片描述
从时序图中可以看出,VGA时序的关键信号是行同步信号(HSync)和场同步信号(VSync),共有6个参数,分别为Sync,Back Porch,Left Border(针对行同步信号)/Top Border(针对场同步信号),Addr Time(数据有效时间,分辨率就是看这个参数),Right Border(针对行同步信号)/Bottom Border(针对场同步信号),Front Porch。这些参数在《VGA时序标准》中都会详细给出。需要主要的是,图1-2只是说明场同步信号和行同步信号的6个参数都是类似的,说明他们都有这6个参数,正因为参数是类似的,所以将他们画在一起了,场同步信号与行同步信号实际的相对关系如下所示:
在这里插入图片描述
从图1-3可以看出,VGA真正显示的区域是VSync的Addr Time和HSync的Addr Time同时有效区域(低有效)。如下所示:
在这里插入图片描述
图1-1到图1-4务必要全部搞懂,这个自己花点时间琢磨一下,搞懂这4个图后VGA时序也就全搞明白了。

vga模块代码设计

本教程VGA选用640480@60Hz分辨率,像素时钟频率为25MHz,其具体参数定义如图1-6所示,在代码中将这些参数定义好,如图1-5所示:
在这里插入图片描述
在这里插入图片描述
采用两级计数器架构对行同步信号和场同步信号进行计数,如下所示:
在这里插入图片描述
在这里插入图片描述
根据VGA时序参数和场同步、行同步计数器来产生场同步信号和行同步信号,VGA时序图如下所示:
在这里插入图片描述
从图1-9可以看出,Vsync信号在场同步计数器计满Ver_Sync_Time个数后拉低,计满Ver_Total_Time个数后拉高。HSync信号在行同步信号计满Hor_Sync_Time个数后拉低,计满Hor_Total_Time个数后拉高。代码如下所示:
在这里插入图片描述
在这里插入图片描述
有了场同步信号和行同步信号,接下来就要整VGA的RGB数据了,本教程采用的RGB565格式。并且使用rom存储图片,考虑到fpga内部存储资源较小,本教程使用100
100分辨率的图像。rom的位宽设置为8,深度设置为10000,具体设置如下所示:
在这里插入图片描述
需要注意的是,rom设置时,勾选了‘q’output port,所以rom的数据输出会延迟两拍,这个地方要注意,自己可以仿真看看现象。rom的读使能与vga_hs的时序关系如下所示:
在这里插入图片描述
可以看出rom_rd_en比Hor_Addr_Time区域提前了3个时钟周期,所以rom_rd_data比Hor_Addr_Time区域只提前了1个时钟周期(rom输出延时2拍)。然后vga_r/vga_g/vga_b获取rom_rd_data数据需要消耗一拍,所以最终vga_r/vga_g/vga_b数据与Hor_Addr_Time区域正好对齐。fpga代码编写最重要的就是时序对齐,要精确到一个时钟周期!代码如下:
在这里插入图片描述
由于本教程是在VGA显示屏正中间显示100*100分辨率图片,图片显示位置如下所示:
在这里插入图片描述
vga_r/vga_g/vga_b的实现比较简单,代码如下所示
在这里插入图片描述

rom_start_ctrl模块代码设计

rom_start_ctrl模块比较简单,只要根据rom_rd_en信号产生rom_addr并且例化rom ip即可。代码如下所示:
在这里插入图片描述

C语言产生mif文件

想要vga显示自己想要的图片,就得对rom进行初始化,本教程使用mif文件初始化,下面将教大家如何制作mif文件。
(1) 自己可以在网上去找一幅图片(也可以自己画),然后用电脑自带的画图软件,将他的分辨率调整到100*100,并且重新保存为24位bmp格式的图像,命名为“启动界面.bmp”。
(2) 将“启动界面.bmp”放到我提供的上位机中。如下所示:
在这里插入图片描述
(3) 双击“ImageShow.exe”即可产生mif文件和coe文件。C语言产生mif代码如下,有兴趣的可以自己试试:
在这里插入图片描述

显示效果

在这里插入图片描述

福利

本教程的所有verilog源码以及上位机源码都会公布,百度云链接:
链接:VGA显示图片教程源码下载链
提取码:zpnk

微信公众号里的图片是有压缩过的,看着有点模糊,我在压缩包里提供了pdf教程,那里都是高清的图片哦。**下载后,解压需要密码,扫描下面的二维码并在公众号回复“密码”即可获取密码。**也希望大家转发支持哦,后续还会有第二期~
在这里插入图片描述

  • 10
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值