掷骰子游戏电路的设计与实现实验报告.docx

上传人:b****1 文档编号:27449 上传时间:2022-10-01 格式:DOCX 页数:26 大小:419.62KB
下载 相关 举报
掷骰子游戏电路的设计与实现实验报告.docx_第1页
第1页 / 共26页
掷骰子游戏电路的设计与实现实验报告.docx_第2页
第2页 / 共26页
掷骰子游戏电路的设计与实现实验报告.docx_第3页
第3页 / 共26页
掷骰子游戏电路的设计与实现实验报告.docx_第4页
第4页 / 共26页
掷骰子游戏电路的设计与实现实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

掷骰子游戏电路的设计与实现实验报告.docx

《掷骰子游戏电路的设计与实现实验报告.docx》由会员分享,可在线阅读,更多相关《掷骰子游戏电路的设计与实现实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

掷骰子游戏电路的设计与实现实验报告.docx

掷骰子游戏电路的设计与实现实验报告

数字电路与逻辑设计实验

题目:

掷骰子游戏电路的设计与实现

学号:

进考

班级:

学院:

信息与通信工程学院

日期:

2014.11.10

 

一、设计课题的任务要求

设计并实现一个掷骰子游戏电路。

基本要求:

1、电路可供甲乙二人游戏,游戏者甲使用的按键为BTN0,游戏者乙使用的按键为BTN1。

2、每按一次按键,代表掷一次骰子,可随机得到1~6围的两个数字。

3、甲乙按键产生的随机数字分别用数码管DISP0-DISP1、DISP2-DISP3显示,并用DISP7显示比赛局数,比赛结束用8×8点阵显示获胜方,并伴有声音效果。

4、具体游戏规则如下:

(1)第一局比赛,甲乙依次各按一次按键,按键所得两数之和为7或11者胜;若无人取胜,则进行第二局比赛;

(2)第二局比赛,甲乙每人各按一次按键,按键所得二数之和与第一局比赛相同者获胜,若无人获胜,则进行第三局比赛,重复进行步骤

(2),直到出现胜者为止。

(3)游戏局数最多进行六局。

在第六局比赛时,若重复进行步骤

(2)仍未出现胜者,以按键所得两数之和最大者为获胜方。

 

提高要求:

1、增加多人游戏的功能,数码管可分时记录显示每个游戏者的骰子点数。

2、点阵显示增加游戏开机动画、结束动画,并伴有乐曲播放。

3、自拟其它功能。

二、系统设计(包括设计思路、总体框图、分块设计)

1、整体设计思路

将整个游戏电路分为时钟分频模块、随机数产生模块、数码管显示模块、判断控制模块、点阵显示模块等五个模块。

其中,时钟分频模块用于产生适合其他模块使用的时钟频率;随机数产生模块接收来自按键的信号,产生1-6的随机数,其中按键带有防抖功能;数码管显示产生的随机数和局数;判断控制模块用于判断胜负,并控制点阵显示;点阵显示模块用于显示胜利的一方。

 

2、系统框图

 

3、分块设计

时钟分频模块

采用多级分频的方法分别产生点阵扫描需要的1MHz的clk_dian频率、数码管扫描的10KHz的clk_shu频率、产生第一位随机数的2KHz的clk_x频率、产生第二位随机数的3.3kHz的clk_y频率和用于防抖的20hz的clk_dou频率。

随机数产生模块

随机数产生模块用于产生随机数和局数计数。

reset用于使局数归零,重新开始游戏。

btn0用于作为产生甲方随机数的信号,btn1用于作为产生乙方随机数的信号。

clk_x和clk_y是用来产生两位随机数的时钟信号。

clk_dou为防抖时钟。

qout1-2是甲随机数输出信号,qout3-4是乙随机数输出信号,qout5是局数信号。

数码管显示模块

数码管显示模块用于显示产生的随机数和局数。

clk_shu接收10KHz的时钟频率。

qin1-5分别接收随机数产生模块的qout1-5信号。

cat[5..0]和g[6..0]控制数码管的位选和段选信号。

控制判断模块

控制判断模块用于判断胜负并控制点阵显示。

clk_dou为防抖时钟频率,btn1为乙方按完按键的信号,jia1-2和yi1-2为甲乙方的随机数,ju为比赛局数。

V是胜负结果,用于控制点阵显示。

点阵显示模块

点阵显示模块用于显示胜利的一方。

clkin接1MHz的时钟频率,v是胜负结果。

beep是蜂鸣器输出信号,当有一方胜利的时候就会输出高电平信号;row和col分别是点阵的行输入和列输入。

三、仿真波形及波形分析

分频模块

由于分频比例太高,仿真到1s需要花费大量时间,故只仿真到20ms,可观察其中的clk_x和clk_y信号。

随机数模块

如图所示,当btn0被按下,经过防抖测试之后,产生随机数1和4,btn1被按下,经过防抖测试之后,产生随机数3和6,reset拨上之后局数归零,重新开始(圆角方形所示)。

数码管显示模块

如图所示,圆圈为位选输出信号,其中cat4数码管没有使用。

方框为段选输出信号,以输出1和5为例,显示正确,其中的毛刺可以忽略,不影响显示效果。

判断控制模块

如图,仅以第一局为例,设置甲方为5+2=7,乙方为1+1=2,如方框所示;btn1下降沿触发比较,v的结果为01,即甲方获胜,如圆圈所示,仿真结果正确。

点阵显示模块

如图,以显示甲为例,输入为v=01,行输出和列输出显示结果为汉字甲,蜂鸣器输出beep=1,符合预设结果。

四、源程序

分频器模块fenpinqi.vhd

libraryieee;

useieee.std_logic_1164.all;

entityfenpinqiis

port(clkin:

instd_logic;--时钟信号输入

clk_dian,clk_shu,clk_x,clk_y,clk_dou:

outstd_logic);--时钟信号输出

endfenpinqi;

architectureaoffenpinqiis

signaltmp1:

integerrange0to24;

signaltmp2:

integerrange0to49;

signaltmp3:

integerrange0to4;

signaltmp4:

integerrange0to149;

signaltmp5:

integerrange0to499;

signalclktmp1:

std_logic;

signalclktmp2:

std_logic;

signalclktmp3:

std_logic;

signalclktmp4:

std_logic;

signalclktmp5:

std_logic;

begin

p1:

process(clkin)---分频到1MHz

begin

ifclkin'eventandclkin='1'then

iftmp1=24then

tmp1<=0;

clktmp1<=notclktmp1;

else

tmp1<=tmp1+1;

endif;

endif;

endprocessp1;

p2:

process(clktmp1)---二级分频,分频到10kHz

begin

ifclktmp1'eventandclktmp1='1'then

iftmp2=49then

tmp2<=0;

clktmp2<=notclktmp2;

else

tmp2<=tmp2+1;

endif;

endif;

endprocessp2;

p3:

process(clktmp2)---分频到1kHz

begin

ifclktmp2'eventandclktmp2='1'then

iftmp3=4then

tmp3<=0;

clktmp3<=notclktmp3;

else

tmp3<=tmp3+1;

endif;

endif;

endprocessp3;

p4:

process(clktmp1)--分频到3.333kHz

begin

ifclktmp1'eventandclktmp1='1'then

iftmp4=149then

tmp4<=0;

clktmp4<=notclktmp4;

else

tmp4<=tmp4+1;

endif;

endif;

endprocessp4;

p5:

process(clktmp2)—分频到20hz

begin

ifclktmp2'eventandclktmp2='1'then

iftmp5=499then

tmp5<=0;

clktmp5<=notclktmp5;

else

tmp5<=tmp5+1;

endif;

endif;

endprocessp5;

clk_dian<=clktmp1;--点阵扫描频率

clk_shu<=clktmp2;--数码管扫描频率

clk_x<=clktmp3;--产生第一位随机数频率

clk_y<=clktmp4;--第二伪随机数频率

clk_dou<=clktmp5;--防抖扫描频率

enda;

2、随机数模块suijishu3.vhd

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitysuijishu3is

port(

reset:

instd_logic;--复位信号

btn0:

instd_logic;--甲按键信号

btn1:

instd_logic;--乙按键信号

clk_x:

instd_logic;--第一位随机数频率

clk_y:

instd_logic;--第二位随机数频率

clk_dou:

instd_logic;--防抖频率

qout1:

outstd_logic_vector(3downto0);--甲第一位随机数输出

qout2:

outstd_logic_vector(3downto0);--甲第二位随机数输出

qout3:

outstd_logic_vector(3downto0);--乙第一位随机数输出

qout4:

outstd_logic_vector(3downto0);--乙第二位随机数输出

qout5:

outstd_logic_vector(3downto0));--局数输出

endsuijishu3;

architectureaofsuijishu3is

signalq5,q6,q7,q8:

std_logic;

signalq1,q2,q3,q4:

std_logic;

signalx:

integerrange0to100;

signaly:

integerrange100to200;

signalxx:

integerrange0to6;

signalyy:

integerrange0to6;

signalxx1:

integerrange0to6;

signalyy1:

integerrange0to6;

signalju:

integerrange0to6;

begin

p1:

process(clk_x,clk_y)

begin

ifclk_x'eventandclk_x='1'then--利用clk_x从0到100计数

ifx=100then

x<=0;

else

x<=x+1;

endif;

endif;

ifclk_y'eventandclk_y='1'then--利用clk_x从100到200计数

ify=200then

y<=100;

else

y<=y+1;

endif;

endif;

endprocessp1;

p2:

process(btn0,clk_dou)--btn0键防抖

begin

ifclk_dou'eventandclk_dou='1'then

q3<=q2;

q2<=q1;

q1<=btn0;

q4<=q1andq2andq3;--经过三个防抖

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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