【友晶科技】基于FPGA的贪吃蛇游戏设计(六)——VGA驱动模块图片显示

13 篇文章 0 订阅
12 篇文章 3 订阅

前面已经完成VGA的色块和字符显示,接下来要完成VGA的图片显示。

原理分析

在游戏最开始,VGA显示器先显示游戏欢迎界面:

毕竟图片的数据量比较大,不好像前一篇字符显示一样直接设计一个reg来存放,那要怎么处理呢?

可以调用Quartus里面的ROM IP, 将图片数据存储在ROM里面, 显示的时候直接从ROM 里面读取出来。

ROM里面可以存放mif和hex格式的文件。所以要先把图片转换成mif格式的文件。

获取mif文件

将VGA要显示的图片通过Windows自带的画图工具打开,调整大小。具体步骤如下:

pan class="nolink">点击重新调整大小,去掉保持纵横比的复选框勾,点选像素,填入像素值(比如调整到160*120)。

然后另存为时选择24bit bmp格式。

接着在网络上下载一个bmp转mif的小工具将这个bmp文件转换成mif文件(如littlesnake .mif),记住输出图像格式选择RGB888,因为DE10-Standard的RGB输出也是24位。

将littlesnake .mif文件拷贝到Quartus工程目录下。

调用ROM IP

在IP Catalog里面搜索ROM,选择ROM 1-PORT:

设置位宽为24位,深度为32768字节:

深度的设置一定要大于图片的大小,稍微设置大一点没关系,但是也没必要太大,以免造成资源浪费。

连续点击Next找到如下页,点击Browse,选择项目路径下littlesnake .mif文件,完成后点击next,最后点击Finish结束ROM IP 的设置并把对应的rom.qip文件添加到工程里面。

代码设计

首先在VGA_control.v模块中定义中间变量:

然后标记出图片有效显示区:

注意这里picture_flag_enable不等同于en(VGA有效显示区域),因为picture_flag_enable可以是比640*480还小的区域。en的区域如下:

然后根据picture_flag_enable信号生成ROM地址计数器:

例化ROM IP,按照ROM地址计数器顺序读出ROM数据:

然后把读出的ROM数据输出给VGA显示器:

“欢迎来到贪吃蛇游戏”的画面停留6s的计算:时钟25MHz也就是 0.04us,0.04us*150_000_000=6s。

不过复位以后VGA显示器有一个初始化的过程(这时候是黑屏)会占用2-3s,所以欢迎界面实际显示时间是小于6s的。

到此,VGA显示图片的功能就完成了。对应的完整代码请参考VGA_control.v模块。

贪吃蛇系列连载文章:


  ​
1. 基于FPGA的贪吃蛇游戏设计(一)

2. 基于FPGA的贪吃蛇游戏设计(二)——数码管驱动模块

3. 基于FPGA的贪吃蛇游戏设计(三)——计分模块

4. 基于FPGA的贪吃蛇游戏设计(四)——VGA驱动模块色块显示

5. 基于FPGA的贪吃蛇游戏设计(五)——VGA驱动模块字符显示

6. 基于FPGA的贪吃蛇游戏设计(六)——VGA驱动模块图片显示

7. 基于FPGA的贪吃蛇游戏设计(七)——食物(苹果)的产生

8. 基于FPGA的贪吃蛇游戏设计(八)——状态机设计

9. 基于FPGA的贪吃蛇游戏设计(九)——蛇身控制

关注“友晶Terasic”公众号可获取源码下载地址。

移植到DE1-SOC、DE2-115时代码无需改变,只需修改引脚分配即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值