数字电路与逻辑设计综合实验报告.docx

上传人:b****7 文档编号:15685225 上传时间:2023-07-06 格式:DOCX 页数:59 大小:2.23MB
下载 相关 举报
数字电路与逻辑设计综合实验报告.docx_第1页
第1页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第2页
第2页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第3页
第3页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第4页
第4页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第5页
第5页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第6页
第6页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第7页
第7页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第8页
第8页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第9页
第9页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第10页
第10页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第11页
第11页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第12页
第12页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第13页
第13页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第14页
第14页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第15页
第15页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第16页
第16页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第17页
第17页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第18页
第18页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第19页
第19页 / 共59页
数字电路与逻辑设计综合实验报告.docx_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字电路与逻辑设计综合实验报告.docx

《数字电路与逻辑设计综合实验报告.docx》由会员分享,可在线阅读,更多相关《数字电路与逻辑设计综合实验报告.docx(59页珍藏版)》请在冰点文库上搜索。

数字电路与逻辑设计综合实验报告.docx

数字电路与逻辑设计综合实验报告

 

数字电路与逻辑设计实验报告

打地鼠游戏

 

学院:

信息与通信工程学院

班级:

姓名:

学号:

班内序号:

 

【实验任务及要求】

一.基本要求:

1.设计一个挑战反应速度的“打地鼠”游戏,采用用8×8双色点阵显示游戏界面,其中游戏边界采用绿色LED显示,随机出现的地鼠采用红色LED显示,游戏有16个洞穴,如图1所示。

2.游戏洞穴每次随机出现一个地鼠,每个地鼠的最长保持时间为2秒,2秒后随机出

现下一个地鼠。

以4×4键盘的按键代表锤子,16个洞穴与16个按键一一对应,一

旦锤子在2秒内击中地鼠,地鼠消失,数码管计分器分数加1分;若锤子一直没有

击中地鼠,2秒后该地鼠消失。

用两个数码管显示游戏成绩,当游戏成绩达到10分

时游戏结束,点阵显示字符“V”。

3.用两个数码管对整个游戏进行倒计时,当游戏时间超过59秒而成绩未达到10分时,

游戏失败,点阵显示字符“X”。

4.按复位键重新开始游戏,并开始倒计时。

二、提高要求:

增加游戏难关,在边界内每次随机出现两个地鼠,两个地鼠的最长保持时间均为2

秒,2秒后随机出现下两个地鼠,锤子击中一个地鼠加1分,当游戏成绩达到20分

而且游戏时间未超过59秒时,游戏结束,显示字符“V”,否则显示字符“X”。

三、自拟功能:

1.游戏暂停功能,按暂停键游戏计分和时间均暂定,解除暂停后游戏继续,倒计时继续。

2.打中地鼠有蜂鸣器鸣响,提示。

【游戏说明】

本实验利用开发板模拟打地鼠游戏,总体上实现了60秒倒计时,点阵出点,及时按下对应按键后后用数码管显示计分,并用点阵显示游戏结果。

1.拨动复位拨码开关,点阵显示绿色6*6边框,倒计时开始,4*4点阵开始随机出现出点。

2.未击中与出点坐标相对应的按键,点停留2s后出现下一个位置随机的点;若被打中,蜂鸣器鸣响,点消失数码管显示计分加1,出现下一个位置随机的点。

3.60s倒计时内分数达到10,游戏成功,点阵显示绿色V;60s内分数未达到,游戏失败,点阵显示红色X。

4.拨动暂停开关,游戏暂停,再次拨动开关,游戏继续,倒计时继续。

【系统设计】

1.设计思路

打地鼠游戏的设计与实现主要可分为游戏控制和游戏显示两个部分,核心部分是4*4矩阵键盘与点阵随机出现点对应,判断是否按下对应按键,并对正确操作计分。

点阵显示游戏界面,出现位置随机的表示“地鼠”的点,随机以伪随机的方法实现,以及根据计分和计时的综合判断显示游戏成功或者失败的最终结果。

行扫描的原理实现点阵的显示,用数组row,col输出确定8*8点阵的各个点位置,并且以colg,colr输出绿色,红色点以区别游戏界面和地鼠。

七段数码管在输出的选位信号cat控制下同时显示得分和倒计时,当判断点阵出点位置与按下按键对应成功,success信号触发加一,触发蜂鸣器鸣响。

得分累加到10,stop1置1点阵显示游戏成功界面,倒计时到00,stop2置1点阵显示游戏失败界面。

拨动暂停拨码开关,将分频器模块输出的时钟信号,即为其他模块的输入时钟置0,实现游戏暂停。

二.系统总体框图

1、系统硬件结构框图

 

2、总体框架图

3、模块划分图

 

4、模块间信息传递

5、ASM图

 

6、MDS图

7.其他

4*4矩阵键盘原理图

 

开发平台实验板

(1)EPM1270T144C5器件

(2)144引脚

(3)最大延迟时间5ns

 

【分模块设计实现】

3.1.1文件名:

super.bdf--功能:

顶层模块

Super:

项目名称;

Clk:

实验板内部晶振时钟;

Clear:

复位信号;

Btn[4..0]:

矩阵键盘分别对应的按键的输入;

A[6..0]:

数码管显示数字控制信号;

Cat[5..0]:

数码管选通信号;

Hang_out[7..0]:

控制点阵每一行的显示内容;

Lie_out[7..0]:

控制点阵进行“行扫描”;

Beep:

控制蜂鸣器发声信号;

super.bdf

3.1.2文件名:

super.vhd

在顶层模块中,我将分模块以component的形式进行声明,并利用portmap地址映射将相关联的接口参数映射在一起。

libraryIEEE;

useIEEE.STD_LOGIC_1164.ALL;

useIEEE.STD_LOGIC_ARITH.ALL;

useIEEE.STD_LOGIC_UNSIGNED.ALL;

entitysuperis

port(

clk_top:

instd_logic;

clear_top:

instd_logic;

reset_top:

instd_logic;

keyin:

instd_logic_vector(3downto0);--按键输入信号

keyout:

outstd_logic_vector(3downto0);

row_top:

outstd_logic_vector(7downto0);--点阵行输出信号

colr_top:

outstd_logic_vector(7downto0);--点阵列输出信号

colg_top:

outstd_logic_vector(7downto0);

beep_top:

outstd_logic;--蜂鸣器发声信号

figure_top:

outstd_logic_vector(6downto0);--数码管数值显示信号

cats_top:

outstd_logic_vector(5downto0);--数码管接地信号

endsuper;

architectureaofsuperis

componentfenpinis

port(clk,clear:

instd_logic;--输入的50MHz时钟

clk_out1:

outstd_logic;--输出的时钟1:

1kHz

clk_out2:

outstd_logic;--输出的时钟2:

500Hz

clk_out3:

outstd_logic);--输出的时钟3:

1Hz

endcomponent;

componentjishiis

port(clk_1s,reset:

instd_logic;--reset为游戏复位键,clk为--1秒钟标准时钟

th,tl:

outstd_logic_vector(3downto0);--分别为时间高位和低位

stop:

outstd_logic);--游戏时间为零时产生的结束信号

endcomponent;

componentjifenis

port(reset:

instd_logic;

addgrade:

instd_logic;

gradeshi:

outstd_logic_vector(3downto0);

gradege:

outstd_logic_vector(3downto0);

beep:

outstd_logic;

fenstop:

outstd_logic);

endcomponent;

componentjianpanis

port(clk:

instd_logic;--扫描时钟频率不宜过高,一般在1KHz以下

num:

inintegerrange1to16;

kincol:

instd_logic_vector(3downto0);--读入列码

scanrow:

outstd_logic_vector(3downto0);--输出行码,扫描信号

success:

outstd_logic);

endcomponent;

componentshumaguanis

port(num1:

instd_logic_vector(3downto0);--shiwei

num2:

instd_logic_vector(3downto0);--gewei

grade1:

instd_logic_vector(3downto0);--shiwei

grade2:

instd_logic_vector(3downto0);--gewei

clktube:

instd_logic;

tubesout:

outstd_logic_vector(6downto0);

catsout:

outstd_logic_vector(5downto0));

endcomponent;

componentdishuis

port(clk_dianzhen:

instd_logic;--点阵扫描时钟1kHz

rst:

instd_logic;--点阵复位

clickon:

instd_logic;--按键成功

stop1:

instd_logic;--计时停止

stop2:

instd_logic;--计分停止

colr:

outstd_logic_vector(7downto0);

colg:

outstd_logic_vector(7downto0);

row:

outstd_logic_vector(7downto0);

keynum:

outintegerrange1to16);--地鼠点阵的位置编号,输出与键盘一同判断

endcomponent;

signalclk_top1:

std_logic;

signalclk_top2:

std_logic;

signalclk_top3:

std_logic;

signalth_top:

std_logic_vector(3downto0);

signaltl_top:

std_logic_vector(3downto0);

signalstop_time_top:

std_logic;

signaladd_top:

std_logic;

signalgradeshi_top:

std_logic_vector(3downto0);

signalgradege_top:

std_logic_vector(3downto0);

signalstop_fen_top:

std_logic;

signalnum_top:

integerrange1to16;

signalsuccess_top:

std_logic;

begin

u1:

fenpinport

map(

clk=>clk_top,clear=>clear_top,clk_out1=>clk_top1,clk_out2=>clk_top2,clk_out3=>clk_top3);

u2:

jishiport

map(

clk_1s=>clk_top3,reset=>reset_top,th=>th_top,tl=>tl_top,stop=>stop_time_top);

u3:

jifenport

map(

reset=>reset_top,addgrade=>add_top,gradeshi=>gradeshi_top,gradege=>gradege_top,beep=>beep_top,fenstop=>stop_fen_top);

u4:

jianpanport

map(

clk=>clk_top1,num=>num_top,keycol=>keyin,scanrow=>keyout,success=>success_top);

u5:

shumaguanport

map(

num1=>th_top,num2=>tl_top,grade1=>gradeshi_top,grade2=>gradege_top,clktube=>clk_top2,tubesout=>figure_top,catsout=>cats_top);

u6:

dishuport

map(

clk_dianzhen=>clk_top1,rst=>reset_top,clickon=>success_top,stop1=>stop_time_top,stop2=>stop_fen_top,colr=>colr_top,colg=>colg_top,row=>row_top,keynum=>num_top);

enda;

 

3.1.3文件名:

super.vwf

能从方针中大致看出随机出现点,以及游戏边界的存在。

由于分频太大,顶层文件的方针难以看出具体功能,可由其他模块方针查看分析各个模块功能。

3.2.1文件名:

fenpin.bdf---功能:

分频

Clk:

50MHz系统时钟;

Clk_out1:

1Hz脉冲,用于控制每隔1s出现一个光点;

Clk_out2:

1kHz脉冲,用于扫描数码管,点阵以及矩阵键盘;

3.2.2文件名:

fenpin.vhd

libraryieee;

useieee.std_logic_1164.all;

entityfenpinis

port(

clk:

instd_logic;--50MHz

clk_time:

outstd_logic;--1hz

clk_scan:

outstd_logic;--1khz);

endfenpin;

architectureaoffenpinis

signaltime_count:

integerrange0to4999999;--计数信号

signalscan_count:

integerrange0to4999;

signalclk_time_tmp:

std_logic;

signalclk_button_tmp:

std_logic;

signalclk_scan_tmp:

std_logic;

signalclk_down_tmp:

std_logic;

begin

time:

process(clk)--1hz

begin

ifclk'eventandclk='1'then

iftime_count=4999999then

time_count<=0;

clk_time_tmp<=notclk_time_tmp;

else

time_count<=time_count+1;

endif;

endif;

endprocesstime;

scan:

process(clk)–1khz

begin

ifclk'eventandclk='1'then

ifscan_count=4999then

scan_count<=0;

clk_scan_tmp<=notclk_scan_tmp;

else

scan_count<=scan_count+1;

endif;

endif;

endprocessscan;

enda;

3.2.3文件名:

fenpin.vwf

上图中:

clkout的周期为clk的2倍,分频系数为2,分频脉冲稍有延时。

3.3.1文件名:

jishi.bdf---功能:

倒计时

Clk_1s:

1Hz的分频时钟;

reset:

复位信号,置1时自59s重新开始倒计时;

th[3..0]:

分数的十位;

t1[3..0]:

分数的个位;

stop:

计时到0,游戏规定时间结束;

3.3.2文件名:

jishi.vhd

libraryieee;

useIEEE.std_logic_1164.all;

entityjishiis

port(clk_time:

instd_logic;--1s

clear:

instd_logic;

time_units:

outintegerrange0to9;--倒计时的十位

time_tens:

outintegerrange0to9);--倒计时的个位

endjishi;

architectureaofjishiis

signalp_temp:

std_logic_vector(5downto0);

begin

process(clk_time,clear)

begin

if(clear='1')thenp_temp<="111110";

elsifclk_time'eventandclk_time='1'then

casep_tempis

when"111100"=>p_temp<="111011";time_tens<=6;time_units<=0;

when"111011"=>p_temp<="111010";time_tens<=5;time_units<=9;

when"111010"=>p_temp<="111001";time_tens<=5;time_units<=8;

when"111001"=>p_temp<="111000";time_tens<=5;time_units<=7;

when"111000"=>p_temp<="110111";time_tens<=5;time_units<=6;

when"110111"=>p_temp<="110110";time_tens<=5;time_units<=5;

when"110110"=>p_temp<="110101";time_tens<=5;time_units<=4;

when"110101"=>p_temp<="110100";time_tens<=5;time_units<=3;

when"110100"=>p_temp<="110011";time_tens<=5;time_units<=2;

when"110011"=>p_temp<="110010";time_tens<=5;time_units<=1;

when"110010"=>p_temp<="110001";time_tens<=5;time_units<=0;

when"110001"=>p_temp<="110000";time_tens<=4;time_units<=9;

when"110000"=>p_temp<="101111";time_tens<=4;time_units<=8;

when"101111"=>p_temp<="101110";time_tens<=4;time_units<=7;

when"101110"=>p_temp<="101101";time_tens<=4;time_units<=6;

when"101101"=>p_temp<="101100";time_tens<=4;time_units<=5;

when"101100"=>p_temp<="101011";time_tens<=4;time_units<=4;

when"101011"=>p_temp<="101010";time_tens<=4;time_units<=3;

when"101010"=>p_temp<="101001";time_tens<=4;time_units<=2;

when"101001"=>p_temp<="101000";time_tens<=4;time_units<=1;

when"101000"=>p_temp<="100111";time_tens<=4;time_units<=0;

when"100111"=>p_temp<="100110";time_tens<=3;time_units<=9;

when"100110"=>p_temp<="100101";time_tens<=3;time_units<=8;

when"100101"=>p_temp<="100100";time_tens<=3;time_units<=7;

when"100100"=>p_temp<="100011";time_tens<=3;time_units<=6;

when"100011"=>p_temp<="100010";time_tens<=3;time_units<=5;

when"100010"=>p_temp<="100001";time_tens<=3;time_units<=4;

when"100001"=>p_temp<="100000";time_tens<=3;time_units<=3;

when"100000"=>p_temp<="011111";time_tens<=3;time_units<=2;

when"011111"=>p_temp<="011110";time_tens<=3;time_units<=1;

when"011110"=>p_temp<="011101";time_tens<=3;time_units<=0;

when"011101"=>p_temp<="011100";time_tens<=2;time_units<=9;

when"011100"=>p_temp<="011011";time_tens<=2;time_units<=8;

when"011011"=>p_temp<="011010";time_tens<=2;time_units<=7;

when"011010"=>p_temp<="011001";time_tens<=2;time_units<=6;

when"011001"=>p_temp<="011000";time_tens<=2;time_units<=5;

when"011000"=>p_temp<="010111";time_tens<=2;time_units<=4;

when"010111"=>p_temp<="010110";time_tens<=2;time_units<=3;

when"010110"=>p_temp<="010101";time_tens<=2;time_units<=2;

when"010101"=>p_temp<="010100";time_tens<=2;time_units<=1;

when"010100"=>p_temp<="010011";time_tens<=2;time_units<=0;

when"010011"=

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2