数字电路与逻辑设计综合实验报告.docx
- 文档编号:15685225
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:59
- 大小:2.23MB
数字电路与逻辑设计综合实验报告.docx
《数字电路与逻辑设计综合实验报告.docx》由会员分享,可在线阅读,更多相关《数字电路与逻辑设计综合实验报告.docx(59页珍藏版)》请在冰点文库上搜索。
数字电路与逻辑设计综合实验报告
数字电路与逻辑设计实验报告
打地鼠游戏
学院:
信息与通信工程学院
班级:
姓名:
学号:
班内序号:
【实验任务及要求】
一.基本要求:
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"=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 逻辑设计 综合 实验 报告