碎碎思 · 2022年05月12日

FPGA比较完美的复现俄罗斯方块

《俄罗斯方块》(Tetris, 俄文:Тетрис)是一款由俄罗斯人阿列克谢·帕基特诺夫于1984年6月发明的休闲游戏。

ae49b52a501c63b688af11ab24bdf5cc.png

游戏介绍

762c86eecc6777d9d5ad62631517435f.png

这里就不介绍了,很经典的游戏。

软硬件环境

FPGA板卡

ZEDBOARD(纯逻辑设计,没使用ARM) 其他板卡也可以

02fe5f55a828b81b1996d523e327a1d6.png

VGA显示器

d84b77f9610fef47cd5a2bcff5516c28.png

PS2键盘

游戏需要4(上下左右移动)+New Game(游戏GG,重新开始)

8ada5fcad20339fab7994a34db324c04.png

上下左右键,上是旋转,下是加速下降,左右就是左右移动,N字幕键是重新开始。

这里需要将PS2鼠标或者键盘连接到开发板上,所以制作了一个PMOD扩展小板转接出PS2接口,如下:

60e759465b98e44ede9c0ef09ce4fded.png

原理图+PCB地址:

https://gitee.com/openfpga/FPGAandGames/tree/main/hardware/PMOD_PS2

注意:PS2不一定用5V供电,亲测3.3V也可以。

Vivado

Vivado 2018.3及更高版本

源码简介

整个核心框图如下所示:

1521c6417cfb786bfb2b3bda812adb8a.png

FSM如下:

ce992c2848bc02e47ea4dc9032b23d43.png

每个模块的源码上都有简介,状态机代码也比较简单(主要控制,初始状态,失败三个状态,详见代码)。

整个工程使用SystemVerilog建模,学习SV的同学也可以看看,尤其针对状态机部分使用typedef enum实现,可以看下和Verilog在状态机建模方面的区别。

开源链接

https://github.com/suisuisi/FPGAandGames/tree/main/TETRIS/fpgatetris

下载后可以直接进行综合,使用JTAG下载到FPGA中,就能看到VGA显示画面如下:

6c452bf12b750ddb17c8a2646fd89ecc.jpg

视频演示

https://www.bilibili.com/video/BV1FL4y1F7Yb?spm_id_from=333.337.search-card.all.click

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA技术干货请关注FPGA 的逻辑技术专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
推荐阅读
关注数
10596
内容数
559
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息