基于NiosII贪吃蛇的游戏设计电子综合设计.docx
《基于NiosII贪吃蛇的游戏设计电子综合设计.docx》由会员分享,可在线阅读,更多相关《基于NiosII贪吃蛇的游戏设计电子综合设计.docx(9页珍藏版)》请在冰豆网上搜索。
![基于NiosII贪吃蛇的游戏设计电子综合设计.docx](https://file1.bdocx.com/fileroot1/2023-7/11/0bb9aba8-3a38-49ce-9974-3287b73c5c79/0bb9aba8-3a38-49ce-9974-3287b73c5c791.gif)
基于NiosII贪吃蛇的游戏设计电子综合设计
基于NiosII和LED点阵的贪吃蛇游戏设计
一、摘要………………………………………………………2
二、设计目的…………………………………………………2
三、贪吃蛇设计预期目标……………………………………2
四、方案整体设计……………………………………………2
五、硬件系统的设计及实现…………………………………3
六、软件系统的设计及实现…………………………………11
七、心得体会…………………………………………………14
八、参考文献…………………………………………………15
九、附录………………………………………………………15
一、摘要
基于NiosII软核处理器和LED点阵显示屏的贪吃蛇游戏内容是:
一条蛇在封闭的围墙里,围墙里随机出现一个食物。
玩家通过4个按键控制蛇上下左右移动,且蛇只能沿着头运动的轨迹移动。
蛇头撞到食物,则食物被吃掉,蛇身体增长一节,同时记1分,又出现食物,等待蛇来吃,如果蛇头在移动中出界或咬到自己的身体则游戏结束。
关键字:
贪吃蛇NiosIILED点阵SOPC
二、设计目的
1、掌握按键扫描电路的设计
2、掌握用VHDL语言设计按键扫描电路的方法
3、掌握16*16LED点阵的控制原理和用VHDL语言设计LED点阵扫描电路的方法;
4、掌握SOPCBuilder的设计流程;
5、掌握在NiosII中进行编程的方法;
三、贪吃蛇设计预期目标
1、基本功能
(1)、完成按键扫描电路的设计;
(2)、完成16*16LED点阵的扫描电路设计;
(3)、完成SOPCBuilder中的系统设计;
(4)、完成单色贪吃蛇游戏的基本设计(蛇移动方向的改变,吃到果子后蛇身变长,咬到自己或者出界时的失败处理等);
(5)、完成游戏图形信息提示(游戏目前所处的等级等)。
2、提高功能
(1)、能进行汉字动态显示(显示内容自动更新,形式自定,如百叶窗等);
(2)、蛇头颜色与蛇身区别显示,并与果实颜色区别显示;
(3)、游戏过程中加入声音提示和表情提示;
(4)、所得分数在数码管上显示;
(5)、能进行游戏难度的切换(不同难度下,蛇吃到相应数量的果子后升级)。
四、方案整体设计
为了实现游戏的控制、显示、设置等功能,系统需要具有控制模块,动态扫描显示模块,按键识别模块。
本设计中采用NiosII软核CPU作为游戏的主控制单元,按键识别模块中的每个按键通过产生中断的方式,在中断处理函数中完成按键的标识,并在在软件程序的主体部分完成按键的识别。
动态扫描显示模块又分为LED点阵屏动态扫描显示和LED数码管显示扫描两部分,两部分均采用VHDL语言设计相应的硬件扫描模块来实现。
五、硬件系统的设计及实现
整个硬件系统的设计包括NiosII片上系统的设计和外设驱动电路的设计。
1、硬件整体框架
2、NiosII片上系统的设计
片上系统的设计核心是NiosII嵌入式CPU软核的定制。
根据游戏的功能要求和实现的方案,片上系统应当包括:
NiosII嵌入式CPU软核、一组PIO输入\输出口、定时器、SRAM、JTAGUART、EPCS_FLASH_CONTROLLER。
NiosII系统的结构如下:
(1)、NiosII嵌入式CPU软核
NiosII嵌入式CPU软核作为整个系统的主控制单元,完成对按键信息的接收、识别、处理;此外还要输出相关的控制信息,实现对外设的控制。
(2)、PIO输入\输出口
在定制的一组PIO输入\输出口中,PIO输入口用于接收按键信号,PIO输出口用于输出对DPRAM写数据操作的控制和数据信号以及LED数码管的数据信号;
(3)、定时器
在系统中定制定时器,主要是为了通过定时器的计数产生周期性的中断,通过中断处理函数实现贪吃蛇的移动显示效果。
由于定时器中具有几个软件可操作的寄存器,通过对这些寄存器的操作可以很方便地实现定时器的启停、定时时间设置、中断产生控制等操作。
只要更改定时器产生中断的周期就可以实现贪吃蛇运动速度的控制,从而进行游戏等级的控制。
(4)、SRAM和EPCS_FLASH_CONTROLLER
SRAM在系统中起到了相当于计算机中内存的作用,主要用于存放正在运行的软件程序。
它的特点主要是速度快。
EPCS_FLASH_CONTROLLER作为EPCS_FLASH的控制器。
整个系统的硬件设计都下载固化在EPCS_FLASH上,当程序烧写到了EPCS_FLASH上的时候,就可以实现脱机运行了。
3、外设驱动电路的设计
外设驱动电路的设计包括:
双口DPRAM的定制、DPRAM读数据控制电路的设计、LED点阵屏扫描电路的设计、七段数码管动态扫描电路的设计、整个系统中所用到的时钟信号产生电路以及按键去抖电路。
(1)、双口DPRAM定制
双口DPRAM在系统中作为LED点阵显示屏的显示数据缓存,其中存储了256个LED灯的颜色控制数据。
存放在其中的数据只有四个值有效,分别为0、1、2、3。
送这四个数去控制一个LED灯,分别对应LED灯的颜色为:
黄色、绿色、红色、黑色。
双口DPRAM可以定制成一个输入口和一个输出口的形式。
其中,输入口用于接收NiosII嵌入式软核CPU的数据,输出口在DPRAM读数据控制电路的控制下输出数据用于驱动LED点阵屏扫描显示电路。
该模块的仿真波形如下图:
(2)、DPRAM读数据控制电路
DPRAM读数据控制电路在外部时钟信号的作用下,产生0到255共256个数作为DPRAM的地址,在DPRAM读数据时钟到来的时候使得DPRAM输出对应地址的数据。
此外,DPRAM读数据控制电路还要产生像素同步信号和行同步信号,实现LED点阵屏扫描电路的时序。
产生的时序要求是:
在外部时钟的作用下产生DPRAMD的地址,接着像素同步时钟出现一个上升沿,16个像素同步时钟后,产生一个行同步信号,在该行同步信号作用下行扫描信号从第一行顺序扫到最后一行,这样就完成了一个周期的扫描。
该模块的仿真波形如下图:
(3)、七段数码管
七段数码管动态扫描电路,接收外部送来的显示数据,通过动态扫描的方式在两个数码管上显示出来。
该模块的仿真波形如下图:
(4)、按键去抖电路
按键去抖电路用于消除按键动作中产生的高频抖动,防止产生误动作,提高按键的稳定性,和可靠性。
该模块的仿真波形如下图:
(5)、时钟信号产生电路
整个系统中使用到了几个不同频率的时钟信号,通过时钟信号产生电路进行不同频率的分频产生所需的时钟信号。
该模块的仿真波形如下图:
(6)、LED点阵屏扫描电路的设计
LED显示系统有两种基本的显示控制方式,即静态显示和动态显示。
对于静态显示方式,每一个像素都需要一套驱动电路,因而这种方式没有扫描过程,显示控制简单,亮度很好。
但是,采用静态显示方式将大大增加驱动电路的复杂程度,这不仅使系统成本很高,而且增加了生产、安装、调试以及日常维护工作的难度,故障率也较高。
对于动态扫描显示,由于采用多路复用显示方式,每路显示的时间大为减少,这不仅使LED显示亮度受到一定程度的影响,而且增加了显示控制的复杂性和现实的稳定性。
本系统采用动态扫描控制显示方式。
a、显示屏的列驱动
列驱动采用带输出锁存的8Bit移位寄存器74LS595。
本系统采的LED点阵是RG双色的,所以送入点阵的列驱动信号是RG两组。
以红灯为例,两片74LS595级联用作红灯列驱动。
每16个时钟控制器传送的两个字节的数据移位到两片595中,16个列驱动信号都移位到两片595中后,控制器给出一个STB信号的上升沿,使一行数据锁存输出到LED屏。
LED对应的列驱动数据为1时,被其驱动的LED不能被点亮;对应的列驱动数据为0时,被其驱动的点被点亮。
绿灯的点亮控制和红灯一样,需要用到另外一套相同的595级联电路。
但具体点亮哪一个点,则由行驱动来指定。
因此行驱动用来进行扫描控制,任一瞬时16行中只有1行被选通,换句话说一行中每一个点被点亮的时间只有不到1/16的时间,因为传送数据和控制也需要时间。
本系统采用的LED点阵是RG双色灯,具体哪个灯则由FPGA传递的参数决定。
需要注意的是,红灯数据在送入LED点阵前要加电阻限流。
b、显示屏的行驱动
为方便控制,行信号采用四位控制16行,行扫描信号的最高位用于选择要译码的三八译码器。
行扫描信号最高位为0时,三八译码器U7工作,译码后的信号作为前八行的行选择信号;行扫描信号的最高位为1时,三八译码器U14工作,译码后的信号作为后八行的行选择信号。
行选择信号在送入LED点阵前,要先送入专用的电源控制芯片APM4953,APM4953的输出作为点阵的行驱动信号。
更大的屏由多套这样的电路拼接而成,每一部分的工作原理是一致的。
这里仅以此电路来讨论其工作的原理。
c、具体扫描过程
扫描过程:
首先是FPGA通过接口送来第一行要显示的2个字节的红色灯信号R和2个字节的绿灯信号G,两个字节的红灯数据分别锁存于U1和U6中,两个字节的绿灯数据分别锁存于U10和U15中。
随后送出行扫描信号,行扫描信号经三八译码器译码后为IH0-IH15,IH0-IH15经过专用的电源控制芯片APM4953,成为LED点阵的行驱动信号TH0-TH15。
第一次送来的扫描信号应使TH0为1,其余为0。
这意味着只有第1行被选通,第1行的16个点,32个LED灯按4片595的输出数据点亮或熄灭相应的LED灯,而其余15列由于不被选通将全部不发光。
为防止数据串显,经过一段时间的延时后,要再送出一组绿灯均为1的数据,即熄灭所有的灯,至此第1行扫描显示完毕。
随后依次进行第2行的扫描显示。
同样,先送第2行的16个红色LED灯的显示数据分别锁存于595
(1)和595
(2)中,第2行的16个绿色LED灯的显示数据分别锁存于595(3)和595(4)中,再送扫描信号SEL,且只使TH1为1,并延时显示,最后熄灭所有的灯。
这样逐列进行扫描显示,当最后一列扫描完后,FPGA可进行适当的数据加工处理,接着又进行下一扫描周期的工作。
必须指出,扫描周期应小于或等于20ms以克服图像的闪烁现象,但也不能太高,要考虑595工作的频率范围。
电路如下图:
六、软件系统的设计及实现
1、系统的主程序设计
(1)、算法描述
运动:
根据用户输入按键进行柔体传动。
吃到食物:
置没有食物的标志,蛇长大一个点阵。
放新食物:
判断食物标志,如果没有食物,就要放食物,判断放的食物是否和蛇身重叠,重叠了要重放。
死亡处理:
判断是否撞中自己或撞墙。
游戏具体的流程是:
蛇向一个固定方向进行柔体传动,每个运动时钟到达要做的工作有
a、判断食物标志,没有食物了就放一个,放的时候判断,不能和蛇身重叠。
b、得到用户按键值,根据键值设置方向标识,并判断是否撞死了,没撞死和是否吃到自己,再判断是否吃到东西了,没有吃到,就等下一个运动时钟;吃了,就增长一点。
置一个没有食物的标志。
然后等待下一个时刻的来临。
(2)、流程图
2、源程序
(见附录)
七、心得体会
本次电子综合设计从9月6日开始,到9月30日结束,为将近一个月。
整个设计工作的安排是:
前期,接受电子综合设计任务,阅读、收集相关资料,学习NiosII嵌入式设计方法。
进行简单的包含NiosII嵌入式CPU的SOPC系统验证性试验,熟悉定时器的使用,PIO口的操作,以及中断的实现操作。
学习LED点阵显示屏的动态扫描显示原理,并据此确定所需的元件,做好准备工作。
中期,研究贪吃蛇游戏的实现方法,根据要求的功能,和现有的资源确定总体设计方案。
研究软件算法和硬件电路的具体实现,绘制LED点阵屏动态扫描电路,完成布局、布线,紧接着进行硬件电路的焊接制作。
后期,对硬件电路进行测试,软件设计调试。
这个阶段中,对硬件的测试很重要,必须保证所设计的硬件平台的每一个部分都能正确无误地工作,这样才能调试所设计到的软件。
这次电子综合设计检验了我们对这三年所学知识掌握程度,同时也是一个学习新知识的过程。
通过这次电子综合设计,我们对几种中规模集成电路芯片有了更多的了解,能根据我们的要求正确地使用这几种芯片;在硬件电路的设计制作方面,我们的流程和方法更加的规范化,在制作硬件电路的过程中积累了一些经验,也从中总结了一些教训。
比如说,在硬件电路的布局上,应该考虑到布线的问题,应该围绕着LED点阵显示屏来展开,尽量使得布局后布线尽量地简洁,布线的数量应该尽量的少。
布线时,尽量走90度的直角,减少电磁干扰现象。
在SOPC系统的构建过程中,我们对其设计流程从陌生变得熟悉了。
能够在FPGA上构建简单的SOPC系统。
也感受到了这种设计理念的魅力,感受到了这种技术的生机和力量。
本次电子综合设计中存在的问题是,硬件设计制作的时间太长,这使得软件调试的时间很紧张,以至于有些提高功能在最后都没有时间去实现,这也是设计作品质量不高的原因。
八、参考文献
1、SOPC嵌入式系统基础教北京航空航天大学出版社周立功
2、程序设计技术重庆大学出版社熊壮
3、EDA技术使用教程科学出版社潘松
4、现代数字系统实验及设计重庆大学出版社何伟
九、附录
1、元件清单
序号
名称
数量
1
74LS245
1片
2
SN74HC138D
3片
3
74LS595
4片
4
APM4953
8片
5
10K电阻
6只
6
LED8*8_1588RG
4块
7
20欧电阻
16只
8
按键
8个
9
IDE40排线
1条
2、系统设计电路
3、实物效果图
(1)、开机画面
(2)按开始键开始游戏
(3)、按方向键控制蛇的移动