基于FPGA的“2048”游戏综合设计

基于FPGA的“2048”游戏综合设计,第1张

学号:17020110019    姓名:高少魁

嵌牛导读2048游戏在网页端与移动端均可以使用,本设计将该游戏移植到了硬件平台FPGA上,使用Digilent Nexys 4 DDR 开发板,使用Xilinx Vivado 用于搭建基于MicroBlaze 软核处理器的硬件运行环境,“2048”游戏主程序和VGA 显示控制等程序的编写在Xilinx SDK 上进行。游戏必需的上、下、左、右方向控制,在物理上由开发板上的按键实现,在软件层面通过查询方式实现。最终,嵌入式系统的运行结果将输出到显示屏上,包含4×4 棋盘方格、游戏得分和游戏结果。

嵌牛鼻子FPGA    VGA    最小嵌入式系统    软核CPU

嵌牛正文

一、硬件设计

系统设计的整体电路框图如图所示

硬件部分由基于MicroBlaze 软核处理器的最小嵌入式系统和外围的输入输出模块构成。最小嵌入式系统以MicroBlaze 软核处理器、时钟模块(Clocking Wizard)、处理器系统复位模块(Processor System Reset)、调试模块(MicroBlaze Debug Module,MDM)、内置存储(LocalMemory)和外置存储接口模块(Memory Interface Generator,MIG)为核心,以AXI 总线互联模块(AXI Interconnect)作为处理器与外设的通信基础,以直接或间接挂载于其上的AXI 中断控制器(AXI Interrupt Controller)和中断请求集成器(Concat)作为中断信号的数据通路。

外围输入输出模块包括以下若干部分,它们均通过AXI 总线与处理器通信。UART 模块(AXI Uartlite)实现嵌入式系统与计算机的调试通信,GPIO 模块(AXI GPIO)实现按键输入,TFT 模块(AXI TFT Controller)把系统运行结果通过VGA 接口输出。

由于软件部分需要存储大量的资源,且TFT 模块要求显存不少于2MB,而处理器的内置存储空间不足,故使用MIG 模块以使用外置DDR2 存储。硬件系统共需要有三种不同频率的时钟信号:处理器需要100MHz 时钟、MIG 模块需要200MHz 时钟、TFT 模块需要25MHz 时钟,故Clocking Wizard 输出三路时钟。

要把上述嵌入式系统在FPGA 上实现,需要添加管脚约束。共有三处需要添加约束:时钟信号输入、GPIO 模块的按键输入和TFT 模块的VGA 接口输出。前两处在添加相应IP 核时以完成约束,TFT 模块的约束需要手动完成,即把红、绿、蓝三通道颜色信号和行、场同步信号约束到VGA 端子上。

二、软件设计

1素材

嵌入式系统的运行结果,即“2048 ”游戏的状态需要以图形的方式输出到显示屏,因此需要把所有可能显示的较为复杂的内容预先制作好并存储起来。这些内容包括2~ 65536 共16个数字方块、用于显示得分的 0~ 9 这十个数字 、“得分”提示语 和游戏给出的“赢”和“输”的提示信息,均使用 Adobe Photoshop制作。然后,利用 Image 2 Lcd 工具软件把输出为 C 语言格式的数组备用。

2主程序部分

主程序实现的功能为:配置硬件工作参数 、调用 VGA 显示部分的函数来显示两幅静态页面 、初始化游戏、初始化屏幕显示和 识别用户输入的控制信号并传输给游戏核心部分。

硬件工作参数包括GPIO 通道的数据传输方向 、 显存基地址 和 TFT 扫描方式 。 GPIO 用于获取用户输入的控制信息,因此方向为输入 TRI 寄存器的值配置为 0 x1F 。显存基地址为0x 87 E 00000 ,大小为 2MB ,该信息写入 AR 寄存器 。 TFT 显示控制器的工作参数为从左到右扫描、开启显示输出,相应地把 0x 1 写入 CR 寄存器。

程序开始执行时,首先调用VGA 显示部分的两个函数分别 2~ 65536 共 16 种不同数字方格的棋盘。 然后,调用函数开始一局新游戏并在屏幕上预先绘制好不需要更新的棋盘区域底框、“得分”提示信息和显示分数的区域的底框。 主程序使用查询的方式不断获取 GPIO 寄存器提供的用户输入信息。当有输入时,调用游戏核心部分的函数更新“棋盘”信息。

3VGA显示部分

该部分程序按照一定的规则向显存写入数据以在显示屏上显示不同的内容。这些内容包括 2~ 65536 共 16 种数字方格的棋盘、得分信息、游戏进行时的棋盘和提示信息。

2~ 65536 共 16 种数字方格的棋盘在程序刚开始执行时显示,每幅画面大约显示 5 秒,用软件延时粗略控制。随着游戏的进行, VGA 显示部分不断读取“棋盘”,并把代表相应数字的绘制到显示器上。同时,它还读取得分信息,并绘制到预先设定的位置。如果“棋盘”上出现了“ 2048 ”,它输出“赢”的提示信息。如果“棋盘”上的方格均不能移动且没有出现“ 2048 ”,则显示“输”的提示信息。

4游戏核心部分

游戏核心部分主要涉及对“棋盘” 的处理 ,程序把它抽象为 4 × 4 的二维数组。这部分的功能包括: 游戏初始化、 方块四个方向 的移动和合并策略、向棋盘添加一个新的方块、检查游戏的状态、计算得分和获取游戏的状态信息。

游戏初始化把得分清零,并向棋盘添加两个数字。方块四个方向的移动和合并策略与我们之前体验过的2048 游戏完全一致。方块移动后,“棋盘”上一定会增加一个新的方块,可能是2 或 4 ,概率为 9:1 。之后,程序检查“棋盘”上是否出现过 2048 。如果出现过(“棋盘”上至少有一个不小于“ 2048的方格),则游戏结束,通知 VGA 绘图部分显示“赢”的提示信息。如果没有出现过,则检查棋盘上的空余位置数量数量以以及方块是否还能移动。如果没有空余位置且方块不能继续移动,及方块是否还能移动。如果没有空余位置且方块不能继续移动,则游戏失败,通知则游戏失败,通VGA显示部分显示部分输出“输”的提示信息。接下来,输出“输”的提示信息。接下来,程序将通知程序将通知VGA显示部显示部分更新“棋盘”和得分的显示。分更新“棋盘”和得分的显示。

三、设计运行效果

运行效果如下图

如果你确定C是列 那For C = B To N Step S 中的B N S 就分别是起始 终止 还是步进值

FX值应该就是2种可能 一个1 一个0或2 来控制 循环时C的取值一种是 C从1每次递增1 然后到3 另一种是 C起始值2 每次减1 递减到0

可以试试这个办法,先进入维修模式:#插入C插入,进去以后打代码51,选择开始键,打代码21,选择开始键,把数值0改成1,最后测试纸盒上纸,希望能帮助到你。

另外我这里还有夏普ar2048复印机卡纸故障解决方法你可以参考:一、清洁对位杆上面的橡皮轮子,也可以用纱布把橡皮轮打磨一下增加摩擦力。二、此机器之前因设计缺陷容易出现此故障,目前厂家已经出了改良件,详情可联系夏普复印机售后维修。三、对位杆离合老化,更换对位杆走纸离合。四、旁路进纸正常纸盒卡纸,纸盒进纸离合老化,更换纸盒进纸离合。

其实复印机在使用过程中是需要经常清洁保养的,定期用脱脂棉擦拭搓纸轮可有效避免卡纸。使用时可选用离感光鼓近的纸盒,这样复印走纸的过程较短而且也能减少"卡纸"概率。

前缀0x是十六进制,所以0x800是十六进制,转换成10进制就是2048

十进制是不需要任何前缀的,八进制则是以0开头的数

所以700是十进制,0700是八进制,0x700是十六进制

1电脑开机,看提示按DEL进入电脑 CMOS设置,根据主板BIOS不同,一般选择进入Advanced CMOS Features,然后选择The First BOOT Dirver,设置为CD-ROM,然 后按ESC退出,选择Save & Exit Saving来保存COMS的设置。这样做的目的是为了让电脑由光驱来 启动。如果是intel的原装主板,则应该把启动顺序设置为:CD -ROM,C,F。 2根据提示把XP(或其他 *** 作系统)安装到C盘 3安装电脑硬件的各项驱动程序,然后右击我的电脑—属性—系统还原,将它关闭,这个浪费硬盘空间和系统资源。如果你安装 的是SP1的XP系统,如果你没把握让SP1升级为SP2的话,那最好 再关闭系统自动更新,否则会有系统激活的麻烦 4调整显示器的分辨率和刷新率,如果该电脑使用的是NVIDIA的 显卡,则进入NVIDIA显卡驱动的显卡设置,关闭垂直同步,这样 在打游戏的时候,如果你的电脑性能够好的话,显卡驱动不会限 制你的游戏侦数,还有选择超频刷新率,根据个人打游戏时的分 辨率设置,选择75~85HZ的刷新率,这样你在进入全屏游戏的时 候,刷新率不会改变到60HZ。 5IE设置。进入internet选项,选择设置,把使用的磁盘的空间 拉到1M,因为现在很电脑都使用宽带来连接到网络,每次都自动 更新网页,所以不需要更多的空间来保存旧的网页。 6安装常用软件

以上就是关于基于FPGA的“2048”游戏综合设计全部的内容,包括:基于FPGA的“2048”游戏综合设计、VB写的2048代码中的一段,不懂什么意思、夏普2048卡对位代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10119876.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存