Verilog FPGA开发入门--游戏设计

最近做完了电子课设,题目是基于FPGA的游戏。苦于资料难找,在此分享一波入门级资料。

大概分为VGA显示模块、PS2模块、以及游戏设计。这篇主要讲一下如何用VGA做显示附,赠程一路走来的序源码。

关于VGA显示的原理这里就不细讲了,网上有很多相关讲解。

来点干货,VGA显示的方式大概可以分为三种:

1.直接操作像素点绘图

VGA_Pattern函数中,输入变量是屏幕上的行列值,输出是红绿蓝的色度值0~1516个数。当oRedoGreenoBlue,都为零时,出现颜色为黑色。都为15时出现的颜色为白色,其他色度都可以通过设置三个变量数值来实现。

2.把图片存在ROM里然后调用

首先,将要显示的图片保存成bmp文件的格式,然后用BmpToMif软件转换成mif文件,生成的这个文件就可以导入ROM,在VGA中显示。显示图片时,需要调用一个Rom IP核。保存该mif文件。这个操作要考虑板子ROM的空间。

3.在RAM里面用数组生成图像或字符,然后调用

可以考虑通过一个通用的RAM_set模块来一次性设置一个字符对应的寄存器的值。以显示两个字符为例(字符颜色白色,背景黑色),通过Verilog声明一个长度为148位寄存器数组reg [7:0] p[13:0],因为两个字符占用2*7*8=14*8个像素,所以p[i][j]=0表示第i+1列第j+1行像素为黑色,反之1为白色。这样的话,就可以分别把p[13:7]p[6:0]通过RAM_set来设置。RAM_set模块可以根据要显示的不同字符的字模给寄存器赋不同的值。

其实3和1是同一种

来具体解释一下方法2

 附录,如何生成mif文件并写入ROM

方法1:利用Quartus自带的mif编辑器

优点:对于小容量RAM可以快速方便的完成mif文件的编辑工作,不需要第三方软件的编辑;

缺点:一旦数据量过大,一个一个的输入会使人崩溃;

使用方法:在quartus中,【file/new】,选择Memory  Initialization file,弹出如下窗口:


Number of words:可寻址的存储单元数

words size:存储单元宽度

根据自己的需求进行选择

然后点击“OK”.


  • 在表格中输入初始化数据;
  • 右键单击左侧地址值,可以修改地址和数据的显示格式;
  • 表中任一数据的地址=列值+行值,如图中蓝色单元的地址=24+4=28;

对每个单元填写初始值之后,将文件保存即可。

 

方法2:利用mif软件来生成

无论使用什么编辑器,必须保证mif文件的格式如下:冒号左边是地址,右边是数据;分号结尾;我使用的是名为BmpToMif的软件。

MIF写入ROM

Quartus中点击Tools-MegaWizad Plug IN Managers,选择Create a new custommegafuntion variation.然后选择板子系列Clcyone 3,所用语言Verilog HDL,memory compiler选择想要的ROM PORT,选个路径并取名字(要带.v的后缀生成v文件),设置位宽和深度。(


(为了方便,上面的图来自网络)


之后在调用该IP核就可以在VGA上显示图片。

然后放一下干货,这些是在altera DE0板子上实现的VGA显示

VGA的demo程序--链接:https://pan.baidu.com/s/1K0QX_4A7tnvPOvy_d7cz0g 密码:lnrs

VGA的图片显示--链接:https://pan.baidu.com/s/1NsTJXJmxEEn9mLZCn2R2PQ 密码:3asv

VGA显示字符--链接:https://pan.baidu.com/s/1OameDRMFMh7mW3RgzFbtKw 密码:d65r

基于FPGA的打地鼠小游戏初级--链接:https://pan.baidu.com/s/1LFHIW7EwArn5qhr34OjgBg 密码:8dq8

后面还会继续修改完善的~~



评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值