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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数字电路与逻辑设计综合课题实验报告北京邮电大学信息与通信工程学院一、设计课题的任务要求题目三掷骰子游戏的电路的设计与实现基本要求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、自拟其它功能。二、系统设计设计思路首先根据实验的基本要求,可以知道掷骰子游戏至少有四种状态,分别是游戏状态(S0)、甲胜状态(S1)、乙胜状态(S2)和平局状态(S3),其中游戏状态可能到达其余三种状态中任意一种。若是到达平局状态,就返回游戏状态,游戏继续;而一旦到达甲胜或者乙胜状态,游戏过程结束。游戏状态中,由两个按键作为输入,每个按键控制两位数码管,共有四位数码管分别显示四个1~6的随机数,还有一位数码管显示当前局数。离开游戏状态后,点阵显示甲胜、乙胜或平局,而且有胜者的状态中,蜂鸣器发声。掷骰子游戏电路设计的结构图如下:但我们还要在上述基本思想下注意几个问题:1.由于按键输入不稳定,数字变化太快,所以需加入按键防抖模块。2.数码管、点阵、蜂鸣器都需要特殊的分频,因此还需要多级的分频器。3.局数会影响控制器的逻辑判断,因此在循环判断时,要将第一局,第六局与第二到五局分开考虑。4.第一局的甲、乙两随机数之和需要单独记录,好跟后面产生的随机数的和比较。5.该实验的一大难点在于随机数的产生,随机数发生器需要单独拿出来研究因此,该实验程序大致分为:随机数发生器、多级分频器、存储器、数码管显示译码、点阵显示、蜂鸣器控制、控制器和防抖模块。分块设计1.随机数发生器由于VHDL语言不能直接调用随机数,因此需要通过代码实现伪随机数的生成。查阅资料发现,生成伪随机数的方法一般有两种,一种是应用m序列发生器,将一段既定的人为书写的随机数列顺序输出,还有一种是通过时钟控制顺序计数,应用按键时刻的随机性输出随机数。经各方面比较,我选择了后者。两随机数中,低位的是按照时钟脉冲从一至六顺序输出计数,逢六进一位到高位,而高位的同理,从而使两随机数建立联系,实现一个按键随机按下,同时得出两随机数。由于时钟变化很快,两随机数之间的时间差可忽略不计。2.多级分频器已知时钟的频率是50MHz,而输入到数码管和点阵的频率是1k~5kHz,输入到蜂鸣器的频率则希望控制在100Hz以下。因此需要一个多级分频器,第一级分到100kHz,第二级再分到5kHz给数码管,1kHz给点阵,第三级从1kHz分到2Hz给蜂鸣器。3.存储器由于后几局的两个甲乙各自随机数之和要跟第一局的作比较,所以需要存储器来记录第一局产生的四个随机数。4.数码管显示译码5.点阵显示6.蜂鸣器控制7.控制器8.防抖模块由于防抖模块需要加入到所有按键输入,因此单独拿到主程序外。加入防抖模块后,每次有按键输入,即电平发生改变,都能持续一个时钟脉冲,从而确保每次按键都能被控制器接收。此次实验由按键输入的信号有甲(a),乙(b)和clear。总体框图掷骰子游戏电路的逻辑流程图如下:开始甲乙分别按键,各生成两个1~6的随机数,由数码管显示,局数计数器显示1甲的两随机数之和是否为7或11,而乙不是乙的两随机数之和是否为7或11,而甲不是否是否是甲乙分别按键,各生成两个1~6的随机数,由数码管显示,局数计数器显示+1甲的两随机数之和是否与第一局相同,而乙不是乙的两随机数之和是否与第一局相同,而甲不是否否是是此局是否为第六局是比较甲乙两随机数之和的大小甲大于乙乙大于甲否否平局是是甲胜乙胜否结束掷骰子游戏的状态转移图如下:三、仿真波形及波形分析该实验的难点在于甲乙掷骰子时分别产生两个随机数,因此在实验开始之初,就对产生随机数的模块进行仿真。仿真波形见下图:四、源程序总程序libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitys2012210709isport(clk:instd_logic;a_in,b_in,clear_in,switch_open:instd_logic;led:outstd_logic_vector(6downto0);light:outstd_logic_vector(5downto0);row,colr,colg:outstd_logic_vector(7downto0);beep:outstd_logic);ends2012210709;architectureyouxiofs2012210709issignala,b,clear:std_logic;signalwinner:integerrange0to2;signaltmpal,tmpah,tmpbl,tmpbh:integerrange1to6;--计数器模值为6signaljushu:integerrange0to6:=0;signalnum0,num1,num2,num3,num5:std_logic_vector(2downto0);--取得随机数signaltmp0,tmp1,tmp2,tmp3:integerrange1to6;--记录随机数signaltmpnum0,tmpnum1,tmpnum2,tmpnum3:integerrange1to6;--记录第一局的随机数signaldianzhen:integerrange0to7;signaltmpfp:integerrange0to249;--/100,000signaltmpled:integerrange0to9;--/5000signaltmpdianzhen:integerrange0to49;--/1000signaltmpfeng:integerrange0to249;--/2signalclkfp,clkled,clkdianzhen,clkfeng:std_logic;componentfangdouis--防抖程序(见总程序结束后)port(clk_in:instd_logic;ai,bi,ci:instd_logic;ao,bo,clearo:outstd_logic);endcomponent;beginf0:fangdouportmap(clk_in=clk,ai=a_in,bi=b_in,ci=clear_in,ao=a,bo=b,clearo=clear);p1:process(clk)--输出两个1~6的随机数beginifclk'eventandclk='1'thenifclear='1'thentmpal=1;tmpah=1;elsiftmpal=6thentmpal=1;tmpah=tmpah+1;elsiftmpah=6thentmpah=1;elsiftmpbl=6thentmpbl=1;tmpbh=tmpbh+1;elsiftmpbh=6thentmpbh=6;elsetmpal=tmpal+1;tmpbl=tmpbl+1;endif;endif;endprocessp1;p2:process(clear,clk)beginifclear='1'thentmpfp=0;elsifclk'eventandclk='1'theniftmpfp=249thentmpfp=0;clkfp=notclkfp;elsetmpfp=tmpfp+1;endif;endif;endprocessp2;p3:process(clear,clkfp)beginifclear='1'thentmpdianzhen=0;elsifclkfp'eventandclkfp='1'theniftmpdianzhen=49thentmpdianzhen=0;clkdianzhen=notclkdianzhen;elsetmpdianzhen=tmpdianzhen+1;endif;endif;endprocessp3;p4:process(clkdianzhen)beginifclkdianzhen'eventandclkdianzhen='1'thenifdianzhen=7thendianzhen=0;elsedianzhen=dianzhen+1;endif;endif;endprocessp4;p9:process(a,b)beginnum5=conv_std_logic_vector(jushu,3);--num5记录数ifa'eventanda='1'then--num0,num1,num2,num3分别记录4个随机数tmp0=tmpal;tmp1=tmpah;num0=conv_std_logic_vector(tmpal,3);num1=conv_std_logic_vector(tmpah,3);endif;ifb'eventandb='1'thentmp2=tmpbl;tmp3=tmpbh;num2=conv_std_logic_vector(tmpbl,3);num3=conv_std_logic_vector(tmpbh,3);jushu=jushu+1;ifjushu=1thentmpnum0=tmp0;tmpnum1=tmp1;tmpnum2=tmp2;tmpnum3=tmp3;if(tmp0+tmp1=7ortmp0+tmp1=11)and(tmp2+tmp3/=7ortmp2+tmp3/=11)thenwinner=0;elsif(tmp2+tmp3=7ortmp2+tmp3=11)and(tmp0+tmp1/=7ortmp0+tmp1/=11)thenwinner=1;elsejushu=jushu+1;endif;elsifjushu=6thenif(tmp0+tmp1)(tmp2+tmp3)thenwinner=0;elsif(tmp0+tmp1)(tmp2+tmp3)thenwinner=1;elsewinner=2;endif;elseif(tmp0+tmp1)=(tmpnum0+tmpnum1)and(tmp2+tmp3)/=(tmpnum2+tmpnum3)thenwinner=0;elsif(tmp2+tmp3)=(tmpnum2+tmpnum3)and(tmp0+tmp1)/=(tmpnum0+tmpnum1)thenwinner=1;elsejushu=jushu+1;endif;endif;endif;endprocessp9;p10:process(clear,clk)--数码管显示beginifclear='1'thentmpled=0;elsifclkfp'eventandclkfp='1'theniftmpled=9thentmpled=0;clkled=notclkled;elsetmpled=tmpled+1;endif;endif;endprocessp10;p11:process(num0,num1,num2,num3,num5)beginlight=111110

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功