ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:829.90KB ,
资源ID:11034714      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11034714.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北邮数电实验打地鼠游戏的设计与实现实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北邮数电实验打地鼠游戏的设计与实现实验报告.docx

1、北邮数电实验打地鼠游戏的设计与实现实验报告数字电路与逻辑设计实验(下)实验报告课题名称:打地鼠游戏的设计与实现学院:电子工程学院班级:2013211202姓名:学号:一 设计课题及任务要求1. 课题名称:打地鼠游戏的设计及实现2. 任务要求:1) 设计“打地鼠”游戏,采用8X8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有十六个洞穴。2) 洞穴每次随机出现一个地鼠,每个地鼠最长保持时间为2秒,2秒后随机出现下一个地鼠,以4x4键盘的按键代表锤子,16个洞穴对应16个锤子,一旦锤子在2秒内击中地鼠,则地鼠消失,数码管计分器加1分,若锤子没有击中地鼠

2、,则两秒后地鼠消失,用两个数码管显示游戏成绩,成绩到达10分时,游戏结束,点阵显示“V”。3) 用两个数码管对整个游戏进行倒计时,当游戏超过59秒而成绩未达到10分时,游戏失败,点阵显示“X”。4) 按复位键重新开始游戏,并开始倒计时。二系统设计1.设计思路:采用自顶向下的设计原则。 首先对游戏的状态进行判断,整个游戏共应该有四种状态,重置状态,游戏状态,游戏成功状态,游戏失败状态。然后由这四种状态对其他模块进行控制。所以控制模块置于整体框图的中心,然后再考虑这四个状态分别由什么输入控制。重置状态:当拨动开关置高电平时,整个游戏进行重置,此时计分数码管应该有计分的初始显示,即00分,点阵显示重

3、置画面,而计时的数码管置数60准备开始倒计时,当拨动开关置低电平时,游戏正式开始,转入游戏状态。游戏状态:此时计分数码管计分,倒计时数码管进行倒计时,点阵显示游戏界面,即6x6的绿色边界以及一个随机出现的红色地鼠。若在倒计时结束之前,计分数码管显示10分,则转入游戏成功状态,若倒计时结束时,尚未达到十分,则转入游戏失败状态。游戏成功状态:此时倒计时数码管停止计时,计分数码管显示10分,点阵显示绿色“V”。游戏失败状态:此时倒计时数码管和计分数码管不再继续工作,而点阵显示红色“X”。2.整体分析:综上分析以及结合实际,得出整个工程大致需要的模块为:分频模块、倒计时模块、计分模块、数码管显示模块、

4、点阵显示模块、状态控制模块、随机地鼠生成模块、键盘输出模块。3.整体设计框图: 三分模块设计1.分频模块设计1)需求分析:整个工程共需要四个频率,地鼠出现的频率为2秒一个,即需要一个0.5Hz的频率,而倒计时一秒减小一个十进制数,所以需要一个1HZ的频率,数码管的扫频和点阵的扫频为1000Hz,键盘防抖模块的扫频为100Hz,所以我采用级联分频的方式,将实验室25MHz的频率先通过25000倍分频分为1000Hz,再将1000Hz频率十分频分为100Hz,再将100Hz一百分频为1Hz,再讲1Hz频率分为0.5Hz。2)模块代码:3)模块仿真波形为减少仿真时长,仿真时将分频系数依次调为2,3,

5、4,实现分频依次为3分频,4分频,5分频。仿真波形如图所示,可由仿真波形看出分频模块实现分频功能。2.倒计时模块:1)功能分析:倒计时模块由状态控制模块控制。重置状态时,进行置数60,游戏状态时,进行减计数,输出分为高位和低位,由上升沿出发,每个上升沿,个位数减一,个位数减至0时,个位数变成9,十位数减一。然后高位和低位进行七段数码管译码输出,设立一个计时结束标识,以反馈控制状态,当个位十位都为0时,倒计时结束,flag=1,否则,flag=0。2)模块代码:entity counter is -实体定义 port(clk:in std_logic; c_state:in std_logic_

6、vector(1 downto 0); nixie_1:out std_logic_vector(7 downto 0);-高位译码输出 nixie_2:out std_logic_vector(7 downto 0);-地位译码输出 gameover:out std_logic -计时结束flag );end counter;architecture counter_1 of counter issignal count_d:integer range 0 to 6;-十位信号signal count_o:integer range 0 to 9;-个位信号begin counting: -

7、倒计时进程 process(clk) begin if(c_state=00) then重置状态置数60 count_d=6; count_o=0; gameover=0;-flag置0 elsif(c_state=01) then if(clkevent and clk=1) then if(count_d=0 and count_o=0) then gameover=1; elsif(count_o=0) then地位为0,高位减一,低位变9 count_d=count_d-1; count_o=9; else count_o=count_o-1; end if; end if; end

8、if; end process; nixie_present: -译码输出进程 process(count_d,count_o) begin if(c_state=00) then 重置状态译码显示全灭 nixie_1=00000000; nixie_2=00000000; elsif(c_state=10 or c_state=11) then游戏结束八段全亮 nixie_1=11111111; nixie_2nixie_1nixie_1nixie_1nixie_1nixie_1nixie_1nixie_1nixie_1nixie_2nixie_2nixie_2nixie_2nixie_2n

9、ixie_2nixie_2nixie_2nixie_2nixie_2nixie_2link_out_scan_nixie=101111;out_nixielink_out_scan_nixie=110111;out_nixielink_out_scan_nixie=111011;out_nixielink_out_scan_nixie=011111;out_nixielink_out_scan_nixie=011111;out_nixie=out_point_nixie_1; end case; end if; end process;5.控制模块1)功能分析:该模块主要实现状态转换状态,由之

10、前的分析可以看出整体工程的点阵显示模块,计分模块和倒计时模块均受状态的控制,而状态的判断又由计分模块和倒计时模块的反馈输出共同控制。计分/倒计时Reset=11/0 or 1/10/10/0 状态编号00101101状态重置游戏成功游戏失败游戏进行状态2)模块代码3)模块仿真 由仿真波形可以看出当reset=1时,state输出为00;当reset=0时,由计时反馈和计分反馈决定状态的转换 计时为1,计分为0时,state输出为11,代表游戏失败。计时为1,计分为1时,state输出为10,代表游戏成功。计时为0,计分为0时,state输出为01,代表游戏进行中。计时为0,计分为1时,stat

11、e输出为10,代表游戏成功。由该模块的仿真波形可以看出,该模块实现状态控制功能。6.随机地鼠生成模块1)功能分析:该模块需要满足最多两秒内产生一个地鼠,当地鼠被击中时,被击中的地鼠消失,在新的地方生成新的地鼠,所以此处设置一个信号new,将得分信号与2秒的时钟信号进行异或,然后通过new信号的上升沿生成新的随机序列,随机序列为7 downto 0的一组向量,由倒数两位随机决定地鼠坐标的行输出,由倒数三四位决定地鼠列坐标的输出。需要实现的效果是得分后,即地鼠被击中后,便产生一个新的地鼠,而地鼠未被击中时,上升沿由2秒时钟信号触发,即两秒生成一个新的地鼠。同样,该模块同样受到状态的控制。当重置状态

12、时,初始序列设为10011010。游戏进行状态时,则根据上述判断产生新的地鼠。2)模块代码 entity r_series_generator is port ( r_state:in std_logic_vector(1 downto 0); -状态控制 clk:in std_logic; -1秒的时钟信号输入 catch:in std_logic; -得分信号脉冲输入 row_out:out std_logic_vector(3 downto 0); -地鼠坐标行输出 column_out:out std_logic_vector(3 downto 0); -地鼠坐标列输出end r_se

13、ries_generator; architecture behavioral of r_series_generator is signal r_series:std_logic_vector(7 downto 0); -随机序列 signal mice_time:std_logic; -2秒的时钟信号 signal trick:std_logic; -判断是否被击中的信号 begin mouse_time: process(clk) -将1秒的时钟信号分频为2秒的时钟信号 begin if(clkevent and clk=1) then if(mice_time=1) then mice

14、_time=0; elsif(mice_time=0) then mice_time=1; else mice_time=0; end if; end if; end process; trick=mice_time xor catch ; -设立该信号对击中进行判断 series_generate: -生成随机序列 process(trick) begin if(r_state=00) then -游戏一旦被重置,随机序列进行初始 r_series=10011010; elsif(r_state=01) then -游戏状态,由得分信号的上升沿触发新的地鼠 if(trickevent and

15、 trick=1) then -由标识的上升沿进行触发 r_seriesrow_outrow_outrow_outrow_outrow_outcolumn_outcolumn_outcolumn_outcolumn_outcolumn_out=0000; end case; end process;end behavioral; 3)模块仿真:在重置状态下,随机序列初始化,此时行列输出值固定都0100游戏进行状态中,随机序列由输入时钟信号和捕捉信号异或后得到的信号触发,产生随机输出由仿真波形可以看到该模块的功能得以实现。7点阵显示模块1)功能分析: 同样,由整机的状态来设计各个状态下点阵的显示

16、界面重置状态,设计开机画面,开机时点阵显示笑脸。游戏进行状态,显示游戏画面,即绿色6X6边界,中间闪烁一个随机出现的地鼠。游戏成功状态,显示胜利画面,绿色字母“V”。游戏失败状态,显示失败画面,红色字母“X”。2)点阵显示原理:原理图:实验室使用的点阵为共阴点阵,当A行电平输入为0,B列电平输入为1时。对应的A行B列处的点被点亮,实验室使用的点阵为双色点阵,当输出的列为red时,点亮红色的点,当输出的列为green时,点亮绿色的点,当红绿同时输出,则显示橙色。由于要显示的画满并不只是几个行列不交叠的点,而是复杂的图案,所以选择行扫描的方式对点阵进行显示,行不断用高频信号进行逐行扫描(此处用1K

17、HZ),利用人眼的视觉暂留,只要周期足够小,看起来就像是一个稳定的图案。而且采用逐行扫描远比逐点扫描占用FPGA资源要少。3)模块代码:实体定义部分开机画面显示通过行扫描实现重置状态游戏进行界面显示游戏胜利状态显示游戏失败模块4)模块仿真重置状态。行输出显示为逐行扫描,列输出逐行对应一个输出向量组,组成一个笑脸图形。游戏状态,红色列输出由地鼠的随机坐标控制,逐行扫描,只有一个点亮,即红色的随机地鼠。实现随机地鼠的显示游戏状态,绿色列输出。在游戏状态下,通过逐行扫描,对应列输出6*6绿色边界。游戏成功状态,绿色列输出,显示“v”。游戏失败状态,红色列输出,显示“X”。由该模块的仿真可以看出,在各

18、个状态,模块实现对应功能。8.键盘模块1)功能分析:该模块由两个部分组成,其一为键盘消抖模块,其二为按键确定模块。2)原理分析键盘消抖:通常开关为机械开关,断开或闭合时,由于机械触点的弹性作用,在闭合和断开的瞬间有一连串的抖动,为了消除其带来的影响而进行消抖模块的设置。按键确定模块:为了实现判断按键的位置,以便进一步判断键盘坐标与地鼠坐标是否对应,以输出得分脉冲给计分模块。所以判断按键位置使一步非常重要的步骤,按键的确定和点阵的显示原理有着相似之处,均是逐行或逐列扫描,以确定具体坐标,此处我采用的是键盘列扫描,即通过时钟信号让列的低电平逐行变化,当有行坐标输入为低电平时,确定行与列的输出,假设

19、第一行电平为0,则规定行输出为1110,而列输出即为当时的扫描列坐标,通过这样的方式将按键按位置转换为一个二维数组输出。然后将确定的坐标输入到消抖模块中进行消抖,消抖后输出的坐标为最终按键坐标,输入判断得分模块与地鼠坐标进行比较。键盘扫描原理图:当行和列的电平均为0时,判断为该行该列的按键被按下,即可确定按键坐标。3)模块代码:判断模块消抖模块代码4)模块仿真消抖模块逐列扫描,列输出在行输入为1110时,即判断出是第4行被按下时,输出行坐标为0001,输出列坐标为当前的列坐标,取反输出是为了在得分判断模块与地鼠的坐标对应,因为地鼠坐标里面只有一个高电平,而键盘坐标却只有一个低电平,所以将键盘坐

20、标取反。在航输入为1111时,即没有任何一行的按键被按下时,列坐标输出显示1111,行坐标输出为0000(1111取反)。由仿真波形可以看出按键判断模块实现了该模块的需求。9.总体模块1)元件实例连接分析 写完各个模块之后,需要用信号来实现将各个模块连接在一起。各个模块在顶层文件中相互控制,通过反馈和加计数等方式实现整个工程的总体功能。我采用的是元件实例化的方式,让各个分模块在总工程里各司其职。内部用信号进行间接。具体逻辑为:分频模块的三个级联输出分别为1khz,100hz,1hz,将1khz接入点阵的扫描模块的输入,将100hz的输出接入键盘模块的扫描和防抖模块,将1hz的输出接入倒计时模块

21、和随机地鼠生成模块,再在随机地鼠模块内部进行一次分频,将1hz分为0.5hz。分频模块的输入为实验板的晶振输入。倒计时模块的输入接1Hz的分频和状态控制模块的输出,由状态模块的输出控制倒计时模块的工作。两个输出端为数码管显示输出和游戏结束标识,两个七段数码管显示输出接入顶层文件中的数码管显示模块,通过数码管显示,游戏结束标识输出接入状态控制模块,对状态模块进行反馈控制。计分模块的输入为得分脉冲输入和状态输入,得分脉冲由判断模块输出,即打中就输出高电平形成脉冲在得分模块进行累加。计分模块的输出为累加的分数输出和游戏结束标识,得分输出模块输入进得分显示模块译码转换为七段数码管输出,再输入到顶层文件的数码管扫描模块进行输出。计分模块的另一输出为游戏结束标识,输入到游戏状态控制模块对状态进行反馈控制。数码管控制模块,数码管控制模块置于顶层文件内部,负责将得分和计时通过扫描和视觉暂留的效果同时显示在四只数码管上。控制模块的输出只有一个端口,是一个1downto0的向量组,代表四种不同的状态,分别输入进随机地鼠生成模块,点阵显示模块,倒计时模块,计分模块,通过四种状态分别控制上述模块进行工作。而控制模块的输入为复位键输入和计时模块输出的倒计时结束标识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1