FPGA学习之基于MicroBlaze软核的推箱子游戏设计
来源:互联网 发布:网络快车功能 编辑:程序博客网 时间:2024/06/06 01:38
有不足或错误的地方还请大家指正
有一段时间没有做fpga的项目了,趁现在还有一丝丝映像,把之前做的一款推箱子小游戏项目写在这里。
经典的推箱子是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。本次项目就是设计这样一款游戏。
硬件平台采用SPARTAN3,为了显示游戏界面,外接一块3.3v的12864液晶屏。由于推箱子逻辑相对比较复杂,用vhdl实现比较困难,因此我选择搭建一个MicroBlaze软核,简单来说,就是可以用C语言编程了。关于MicroBlaze软核这里不做进一步介绍,参考这里可以直接进行配置。本来以为按照这个过程配置会很简单,但在实际操作的过程中,遇到莫名其妙的问题:将MicroBlaze例化元件与其他元件连线时,MicroBlaze例化元件的接口便会失去电气效果,出现无法通过代码控制硬件端口高低电平的现象。经过一段时间的摸索,发现在进行例化的过程中,不能对已经建好的管脚改动,否则会导致该管脚不可用。所以在例化管脚的过程中,必须在初始过程一次例化成功,不可以在后期添加,很蛋疼啊。。。
上图是系统整体的框架,由控制器、三态门和MicroBlaze软核例化得到的lcd12864器件组成。其中,控制器部分主要完成辅助功能,比如使用拨码开关进行选关操作、采用数码管显示当前关卡、用led进行倒计时操作以及按键输入来控制游戏人物的移动等等。三态门是数电里一个重要的模块,当端口进行输入时,需要将其输出设置为高阻态。因为液晶屏需要读写数据,所以这里采用三态门这一中间级。
entity three_state_gate isPort ( clk : in STD_LOGIC;data_in : in STD_LOGIC_VECTOR (7 downto 0);data_out : out STD_LOGIC_VECTOR (7 downto 0);data_inout : inout STD_LOGIC_VECTOR (7 downto 0);we : in STD_LOGIC_VECTOR(0 downto 0));end three_state_gate;architecture Behavioral of three_state_gate isbeginprocess(clk,we)beginif(clk'event and clk = '1') thenif(we = "1") thendata_inout <= data_in; elsedata_out <= data_inout;data_inout <= "ZZZZZZZZ";end if;end if;end process;end Behavioral;核心部分就是12864模块,这块通过C语言实现复杂的逻辑判断,以及液晶屏的显示控制,对于液晶屏的操作这里也不做介绍,网上有很多资料,这里用8x8的像素区域作为一个图形块,利用控制不同像素点01两种状态,构成人物、墙、箱子以及空地等元素,从而完成整个地图的显示。当捕获到按键输入时,更改相应位置的元素,从而更新地图,达到动态显示的效果。
不难看出,圆圈代表目标点,方块代表箱子。
整个工程文件戳这儿
- FPGA学习之基于MicroBlaze软核的推箱子游戏设计
- c++之简单的推箱子游戏
- Hdu1254-推箱子(经典的推箱子游戏)-bfs
- 推箱子游戏学习(1)
- 推箱子游戏学习(2)
- Android游戏开发之推箱子有感
- linux shell脚本游戏之推箱子
- C语言之推箱子游戏代码
- Java小游戏之推箱子游戏
- 简单的推箱子游戏的实现
- 推箱子游戏算法的一点改进:拉箱子
- 推箱子游戏的自动求解
- 推箱子II游戏代码的改进
- 推箱子游戏的自动求解
- 推箱子游戏的求解算法
- 一个简单的推箱子游戏
- 实例,js实现的推箱子游戏
- [html5游戏开发]经典的推箱子
- vue-cli之那些日子踩过的坑 哈哈(或许有你想要的答案)
- motion的移植和使用
- Android Studio 打包时 Signature Version V1 V2
- [Unity&重装系统]重装系统缺少MSCRV120.dll
- SQL 简介
- FPGA学习之基于MicroBlaze软核的推箱子游戏设计
- Java中的NIO和IO的比较
- 由浅入深理解java集合(四)
- 医疗协议DICOM学习之基础知识
- Hadoop之HDFS工作原理
- java四大特性理解(封装继承多态抽象)
- RecyclerView找不到原因
- 115个Java面试题和答案——终极列表
- android知识体系图