掷骰子游戏电路的设计与实现实验报告文档格式.docx
- 文档编号:12956021
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:26
- 大小:419.62KB
掷骰子游戏电路的设计与实现实验报告文档格式.docx
《掷骰子游戏电路的设计与实现实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《掷骰子游戏电路的设计与实现实验报告文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
(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:
signalclktmp3:
signalclktmp4:
signalclktmp5:
begin
p1:
process(clkin)---分频到1MHz
begin
ifclkin'
eventandclkin='
1'
then
iftmp1=24then
tmp1<
=0;
clktmp1<
=notclktmp1;
else
=tmp1+1;
endif;
endprocessp1;
p2:
process(clktmp1)---二级分频,分频到10kHz
ifclktmp1'
eventandclktmp1='
iftmp2=49then
tmp2<
clktmp2<
=notclktmp2;
=tmp2+1;
endprocessp2;
p3:
process(clktmp2)---分频到1kHz
ifclktmp2'
eventandclktmp2='
iftmp3=4then
tmp3<
clktmp3<
=notclktmp3;
=tmp3+1;
endprocessp3;
p4:
process(clktmp1)--分频到3.333kHz
iftmp4=149then
tmp4<
clktmp4<
=notclktmp4;
=tmp4+1;
endprocessp4;
p5:
process(clktmp2)—分频到20hz
iftmp5=499then
tmp5<
clktmp5<
=notclktmp5;
=tmp5+1;
endprocessp5;
clk_dian<
=clktmp1;
--点阵扫描频率
clk_shu<
=clktmp2;
--数码管扫描频率
clk_x<
=clktmp3;
--产生第一位随机数频率
clk_y<
=clktmp4;
--第二伪随机数频率
clk_dou<
=clktmp5;
--防抖扫描频率
enda;
2、随机数模块suijishu3.vhd
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitysuijishu3is
port(
reset:
--复位信号
btn0:
--甲按键信号
btn1:
--乙按键信号
clk_x:
--第一位随机数频率
clk_y:
--第二位随机数频率
clk_dou:
--防抖频率
qout1:
outstd_logic_vector(3downto0);
--甲第一位随机数输出
qout2:
--甲第二位随机数输出
qout3:
--乙第一位随机数输出
qout4:
--乙第二位随机数输出
qout5:
outstd_logic_vector(3downto0));
--局数输出
endsuijishu3;
architectureaofsuijishu3is
signalq5,q6,q7,q8:
signalq1,q2,q3,q4:
signalx:
integerrange0to100;
signaly:
integerrange100to200;
signalxx:
integerrange0to6;
signalyy:
signalxx1:
signalyy1:
signalju:
begin
p1:
process(clk_x,clk_y)
ifclk_x'
eventandclk_x='
then--利用clk_x从0到100计数
ifx=100then
x<
=x+1;
ifclk_y'
eventandclk_y='
then--利用clk_x从100到200计数
ify=200then
y<
=100;
=y+1;
endprocessp1;
process(btn0,clk_dou)--btn0键防抖
begin
ifclk_dou'
eventandclk_dou='
q3<
=q2;
q2<
=q1;
q1<
=btn0;
q4<
=q1andq2andq3;
--经过三个防抖
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 骰子 游戏 电路 设计 实现 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)