收藏 分销(赏)

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

上传人:可**** 文档编号:3157642 上传时间:2024-06-21 格式:DOCX 页数:34 大小:892.12KB
下载 相关 举报
北邮数电实验--打地鼠游戏的设计与实现实验报告.docx_第1页
第1页 / 共34页
北邮数电实验--打地鼠游戏的设计与实现实验报告.docx_第2页
第2页 / 共34页
北邮数电实验--打地鼠游戏的设计与实现实验报告.docx_第3页
第3页 / 共34页
北邮数电实验--打地鼠游戏的设计与实现实验报告.docx_第4页
第4页 / 共34页
北邮数电实验--打地鼠游戏的设计与实现实验报告.docx_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、数字电路与逻辑设计实验(下)实验报告课题名称:打地鼠游戏的设计与实现学院:电子工程学院班级:2013211202姓名:学号:目录一设计课题及任务要求41.课题名称:打地鼠游戏的设计及实现4二系统设计41.设计思路:采用自顶向下的设计原则。42.整体分析:43.整体设计框图:4三分模块设计51.分频模块设计51)需求分析:52)模块代码:53)模块仿真波形52.倒计时模块:61)功能分析:62)模块代码:63)模块仿真73计分模块91)功能分析:。92)模块代码:93)模块仿真104数码管控制模块121)功能分析:122)模块代码:125.控制模块131)功能分析:132)模块代码133)模块仿

2、真136.随机地鼠生成模块141)功能分析:142)模块代码143)模块仿真:157点阵显示模块161)功能分析:162)点阵显示原理:原理图:163)模块代码:174)模块仿真188.键盘模块201)功能分析:202)原理分析203)模块代码:204)模块仿真229.总体模块24 1)元件实例连接分析.24 2)RTL VIEWS.25 3)部分代码26 四功能说明及资源利用情况301.功能说明:302.资源利用情况303总工程30五故障及问题分析311.问题分析:312.解决办法31六总结和结论32一 设计课题及任务要求1. 课题名称:打地鼠游戏的设计及实现2. 任务要求:1) 设计“打地

3、鼠”游戏,采用8X8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有十六个洞穴。2) 洞穴每次随机出现一个地鼠,每个地鼠最长保持时间为2秒,2秒后随机出现下一个地鼠,以4x4键盘的按键代表锤子,16个洞穴对应16个锤子,一旦锤子在2秒内击中地鼠,则地鼠消失,数码管计分器加1分,若锤子没有击中地鼠,则两秒后地鼠消失,用两个数码管显示游戏成绩,成绩到达10分时,游戏结束,点阵显示“V”。3) 用两个数码管对整个游戏进行倒计时,当游戏超过59秒而成绩未达到10分时,游戏失败,点阵显示“X”。4) 按复位键重新开始游戏,并开始倒计时。二系统设计1.设计思路

4、:采用自顶向下的设计原则。 首先对游戏的状态进行判断,整个游戏共应该有四种状态,重置状态,游戏状态,游戏成功状态,游戏失败状态。然后由这四种状态对其他模块进行控制。所以控制模块置于整体框图的中心,然后再考虑这四个状态分别由什么输入控制。重置状态:当拨动开关置高电平时,整个游戏进行重置,此时计分数码管应该有计分的初始显示,即00分,点阵显示重置画面,而计时的数码管置数60准备开始倒计时,当拨动开关置低电平时,游戏正式开始,转入游戏状态。游戏状态:此时计分数码管计分,倒计时数码管进行倒计时,点阵显示游戏界面,即6x6的绿色边界以及一个随机出现的红色地鼠。若在倒计时结束之前,计分数码管显示10分,则

5、转入游戏成功状态,若倒计时结束时,尚未达到十分,则转入游戏失败状态。游戏成功状态:此时倒计时数码管停止计时,计分数码管显示10分,点阵显示绿色“V”。游戏失败状态:此时倒计时数码管和计分数码管不再继续工作,而点阵显示红色“X”。2.整体分析:综上分析以及结合实际,得出整个工程大致需要的模块为:分频模块、倒计时模块、计分模块、数码管显示模块、点阵显示模块、状态控制模块、随机地鼠生成模块、键盘输出模块。3.整体设计框图:分频模块点阵显示模块键盘模块 数码管显示模块倒计时模块随机地鼠模块状态控制模块计分模块三分模块设计1.分频模块设计1)需求分析:整个工程共需要四个频率,地鼠出现的频率为2秒一个,即

6、需要一个0.5Hz的频率,而倒计时一秒减小一个十进制数,所以需要一个1HZ的频率,数码管的扫频和点阵的扫频为1000Hz,键盘防抖模块的扫频为100Hz,所以我采用级联分频的方式,将实验室25MHz的频率先通过25000倍分频分为1000Hz,再将1000Hz频率十分频分为100Hz,再将100Hz一百分频为1Hz,再讲1Hz频率分为0.5Hz。2)模块代码:3)模块仿真波形为减少仿真时长,仿真时将分频系数依次调为2,3,4,实现分频依次为3分频,4分频,5分频。仿真波形如图所示,可由仿真波形看出分频模块实现分频功能。2.倒计时模块:1)功能分析:倒计时模块由状态控制模块控制。重置状态时,进行

7、置数60,游戏状态时,进行减计数,输出分为高位和低位,由上升沿出发,每个上升沿,个位数减一,个位数减至0时,个位数变成9,十位数减一。然后高位和低位进行七段数码管译码输出,设立一个计时结束标识,以反馈控制状态,当个位十位都为0时,倒计时结束,flag=1,否则,flag=0。2)模块代码:entity counter is -实体定义 port(clk:in std_logic; c_state:in std_logic_vector(1 downto 0); nixie_1:out std_logic_vector(7 downto 0);-高位译码输出 nixie_2:out std_lo

8、gic_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;-个位信号begincounting: -倒计时进程process(clk)beginif(c_state=00) then重置状态置数60count_d=6;count_o=0;gameover=0;-flag置0

9、elsif(c_state=01) thenif(clkevent and clk=1) then if(count_d=0 and count_o=0) thengameover=1;elsif(count_o=0) then地位为0,高位减一,低位变9count_d=count_d-1;count_o=9;else count_o=count_o-1;end if;end if;end if;end process;nixie_present: -译码输出进程process(count_d,count_o) begin if(c_state=00) then 重置状态译码显示全灭nixie

10、_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_2nixie_2nixie_2nixie_2nixie_2nixie_2nixie_2link_out_scan_nixie=101111;out_nixielink_out_scan_nixie=110111;out_n

11、ixielink_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)功能分析:该模块主要实现状态转换状态,由之前的分析可以看出整体工程的点阵显示模块,计分模块和倒计时模块均受状态的控制,而状态的判断又由计分模块和倒计时模块的反馈输出共同控制。计分/倒计时Reset=11/0 or 1/10/10/0 状态编号00101101状

12、态重置游戏成功游戏失败游戏进行状态2)模块代码3)模块仿真 由仿真波形可以看出当reset=1时,state输出为00;当reset=0时,由计时反馈和计分反馈决定状态的转换 计时为1,计分为0时,state输出为11,代表游戏失败。计时为1,计分为1时,state输出为10,代表游戏成功。计时为0,计分为0时,state输出为01,代表游戏进行中。计时为0,计分为1时,state输出为10,代表游戏成功。由该模块的仿真波形可以看出,该模块实现状态控制功能。6.随机地鼠生成模块1)功能分析:该模块需要满足最多两秒内产生一个地鼠,当地鼠被击中时,被击中的地鼠消失,在新的地方生成新的地鼠,所以此处

13、设置一个信号new,将得分信号与2秒的时钟信号进行异或,然后通过new信号的上升沿生成新的随机序列,随机序列为7 downto 0的一组向量,由倒数两位随机决定地鼠坐标的行输出,由倒数三四位决定地鼠列坐标的输出。需要实现的效果是得分后,即地鼠被击中后,便产生一个新的地鼠,而地鼠未被击中时,上升沿由2秒时钟信号触发,即两秒生成一个新的地鼠。同样,该模块同样受到状态的控制。当重置状态时,初始序列设为10011010。游戏进行状态时,则根据上述判断产生新的地鼠。2)模块代码 entity r_series_generator is port (r_state:in std_logic_vector(

14、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_series_generator; architecture behavioral of r_series_generator is signal r_series:std_logic_vector(7 downto 0); -随机

15、序列signal mice_time:std_logic; -2秒的时钟信号signal trick:std_logic; -判断是否被击中的信号 beginmouse_time:process(clk) -将1秒的时钟信号分频为2秒的时钟信号beginif(clkevent and clk=1) thenif(mice_time=1) thenmice_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 ; -设立该信号对

16、击中进行判断series_generate: -生成随机序列process(trick) begin if(r_state=00) then -游戏一旦被重置,随机序列进行初始 r_series=10011010; elsif(r_state=01) then -游戏状态,由得分信号的上升沿触发新的地鼠 if(trickevent and trick=1) then -由标识的上升沿进行触发 r_seriesrow_outrow_outrow_outrow_outrow_outcolumn_outcolumn_outcolumn_outcolumn_outcolumn_outlink_out_

17、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;out_scan_nixiewclk,-分频模块连接map clk_1kh=link_clk_1kh,-将分频模块端口输出赋给信号 clk_1hh=link_

18、clk_1hh,-以便信号带着值在各个模块之间进行传递 clk_1oh=link_clk_1oh);u_control: control port map(ctr_time_counter=link_time_over,-控制模块连接mapctr_point_counter=link_point_over,-计分模块游戏结束标识接入控制模块reset=reset_or_start,-复位控制输入state=link_state);-输出赋给信号,以控制其他模块u_r_series_generator: r_series_generator port map(-随机地鼠生成模块map r_sta

19、te=link_state,-状态输入接状态控制模块状态输出 clk=link_clk_1oh,-分频输入接分频模块输出 catch=link_onepoint,-得分脉冲输入接得分脉冲信号 row_out=link_r_row,-将输出行坐标赋值给行坐标输出信号 column_out=link_r_column);-将输出列坐标赋值给列输出信号u_counter: counter port map(clk=link_clk_1oh,-倒计时模块连接map c_state=link_state,-状态输入接状态信号 nixie_1=nixie_tube_1,-倒计时高位信号 nixie_2=n

20、ixie_tube_2,-倒计时低位信号 gameover=link_time_over);-输出接时间结束标识u_screen: screen port map(s_state=link_state,-点阵显示模块连接map clk=link_clk_1kh,-输入接1000Hz分频信号 r_row=link_r_row,-输入接地鼠行坐标信号 r_column=link_r_column,-输入接地鼠列坐标信号 column_red=outr_pos_columns,-输出赋给点阵列红色输出信号-接实验板的点阵列控制端口 column_green=outg_pos_columns,-输出赋

21、给点阵的绿色列输出信号 row_scanning=out_pos_rows);-行扫描赋给点阵的行输出信号,接实验板点阵行控制端口u_point_counter: point_counter port map(j_catch=link_onepoint,-计分模块连接map p_state=link_state,-状态输入接状态信号 point_out=link_points,-计分输出赋给计分信号,用于计分显示模块输入 gameover=link_point_over);-输出游戏结束标识赋给满十分信号u_judgment: judgment port map(r_row=link_r_row,-判断模块连接map r_column=link_r_column,-输入接地鼠行坐标信号 in_row=link_in_row,-输入接地鼠列坐标信号

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 实验设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服