猜数字vhdl设计数字电路实验报告_第1页
猜数字vhdl设计数字电路实验报告_第2页
猜数字vhdl设计数字电路实验报告_第3页
猜数字vhdl设计数字电路实验报告_第4页
猜数字vhdl设计数字电路实验报告_第5页
免费预览已结束,剩余75页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路实验报告猜数字学院:班级:姓名: 学号:实验组号:一.实验要求【基本要求】1、 游戏规则:通常由两个人玩,一方出数字,另一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜的人知道。2、 数字设置:通过4*4键盘进行4位数字输入,在数码管(DISP0DISP3)上显示当前所输入的数字。通过设置确定键(BTN1键)进行锁定,此时数码管上的数值消失,同时用点阵开始倒计时,即:初始状态点阵全亮,然后从右下角开始,由右到左、由下到上逐点逐排依次熄灭,间隔时间为1s,共计64s。3、 猜数字:可以通过4*4键盘进行4位数字输入进行猜数字,且每输入一位数字在数码管(DISP0DISP3)上显

2、示当前所输入的数字,按确定键(BTN2键)进行确认,此时要根据输入的这组数字给出几A几B,其中:l A前面的数字表示位置正确的数的个数,用DISP5显示l B前的数字表示数字正确而位置不对的数的个数,用DISP4显示l 如正确答案为 2134,而猜的人猜 5314,则是 1A2B,其中有一个4的位置对了,记为1A,而1和3这三个数字对了,而位置没对,因此记为 2B,合起来就是 1A2Bl 接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。4、 若数字正确则显示猜数字成功,点阵显示“”笑脸;若输入数字错误系统仍然处于猜数字状态,点阵显示“X”,并用蜂鸣器或led闪烁报警。5、

3、 若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。6、 设置游戏机开关。【实验所用仪器及元器件】 1.计算机 2.数字系统与逻辑设计实验开发板【实验软件】Quartus 【资源利用】二、 程序设计1、 程序流程图开始初始化开始游戏?设置数字猜测猜数字,点阵倒计时确认数字?A?B计时结束?正确?重新开始?结束是否是否否显示笑脸是是显示囧否否是2、 逻辑框图蜂鸣器模块点阵模块数码管模块分频模块状态机CLK键盘模块3、 MDS图Idle初始化S1设置数字S3?A?BS2猜数字Over结束st=1rs=1rs=1reset=1ms1=1ms2=1done=1tm=1tf=0tm

4、=0st=1rs=1三、程序分析1、 引脚注释clk时钟st游戏开始scan_out3.0键盘的行扫描输出信号key_row3.0键盘的列输入信号ms1输入确认键ms2猜数字rs 复位bee_out蜂鸣器输出ld_out状态指示灯seg_out 数码管显示cat_out数码管排列显示led_row_out点阵行显示led_col_out点阵列显示2、 键盘数字data0=1111110;-0data1=0110000;-1data2=1101101;-2data3=1111001;-3data4=0110011;-4data5=1011011;-5data6=1011111;-6data7=1

5、110000;-7data8=1111111;-8data9=1111011;-93、 状态设置程序设置程序状态当st=1时,游戏开始当ms=1时,确认输入数字,可以猜数字当ms=1时,将输入猜测的数字与原始数字做对比,计算A,B当rs=1时,程序复位清零P1:PROCESS(st,ms1,ms2,rs,tm,done,state,clk_tm) VARIABLE count_anyway:INTEGER RANGE 0 TO 2:=0; BEGINnext_state=state;IF rs=1 THEN next_state IF st=1 THEN next_state=s1;-游戏开始

6、 ELSE next_state IF ms1=1 THEN确认输入数字next_state=s2; ELSE next_state IF ms2=1 THEN -开始猜数字next_state=s3; ELSIF tm=1 THENnext_state=over;ELSE next_stateIF done=1 THEN 判断完成,数字对比结束next_state=over; ELSE next_stateIF st=1 THEN next_state=idle;-游戏开始,初始化ELSIF tf=0 THEN IF tm=0 THENnext_state=s2;ELSE next_stat

7、e=over;END IF;ELSE next_statenext_state=idle;-其他,程序置0END CASE;END IF;END PROCESS p1;4、 分频器将50MHz的时钟频率分成1KHzP2:PROCESS(clk) -fenpingVARIABLE count3:INTEGER:=0;VARIABLE count4:INTEGER:=0;BEGINIF clkevent AND clk=1 THENIF count4=24999 THENclk_scan=NOT clk_scan; count4:=0;IF count3=24999999 THEN clk_tm=

8、NOT clk_tm; count3:=0;ELSE count3:=count3+1;END IF;ELSE count3:=count3+1; count4:=count4+1;END IF;END IF;END PROCESS p2;5、 点阵计数64s倒计时,在点阵显示,判断当tf=1时,led赋值为2,显示2号点阵,即为笑脸,游戏通过,当计时结束,count_clear=1,led赋值4,tm,赋值0,显示为空,当bee=1时,蜂鸣器响,提示猜测错误P3:PROCESS(clk_tm,count_clear,tf,bee) -count downBEGINIF tf=1 THENle

9、d=2;ELSIF count_clear=1 THENcount_down=0; led=4; tm=0;ELSIF bee=1 THENled=3;ELSIF state=s2 THENIF clk_tmevent AND clk_tm=1 THENIF count_down=64 THEN tm=1; count_down=0; led=1; ELSE count_down=count_down+1; ledCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=11

10、1101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE

11、 cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segCASE cat ISWHEN 111110 = cat=011111;seg cat=101111;seg cat=110111;seg cat=111011;seg cat=111101;seg cat=111110;seg cat=011111;segNULL;END CASE;cat_out=cat; seg_out scan scan s

12、can scan scan=0111;END CASE;scan_out seg_a seg_a seg_a seg_a seg_a seg_a seg_b seg_b seg_b seg_b seg_b seg_bx1=0000000; x2=0000000; x3=0000000; x4=0000000;y1=0000000; y2=0000000; y3=0000000; y4=0000000; num_a=0; num_b=0; tf=0; key1=0000000; key2=0000000;count1:=0; count2:=0; count5:=0; count6:=0; do

13、ne=0;count_clear=1; beecount_clearCASE scan IS WHEN 0111 = key1 key1 key1 key1 NULL;END CASE;WHEN 1011 =CASE scan IS WHEN 0111 = key1 key1 key1 key1 NULL;END CASE;WHEN 1101 =CASE scan IS WHEN 1011 = key1 key1 NULL;END CASE;WHEN OTHERS = NULL;END CASE;CASE count1 ISWHEN 0 = IF key1 /= x4 THEN x1IF ke

14、y1 /= x1 THEN x2 IF key1 /= x2 THEN x3 IF key1 /= x3 THEN x4 NULL;END CASE;WHEN s2 =beeCASE scan IS WHEN 0111 = key2 key2 key2 key2 NULL;END CASE;WHEN 1011 =CASE scan IS WHEN 0111 = key2 key2 key2 key2 NULL;END CASE;WHEN 1101 =CASE scan IS WHEN 1011 = key2 key2 NULL;END CASE;WHEN OTHERS = NULL;END C

15、ASE;CASE count2 ISWHEN 0 = IF key2 /= y4 THEN y1IF key2 /= y1 THEN y2 IF key2 /= y2 THEN y3 IF key2 /= y3 THEN y4 NULL;END CASE;WHEN s3=count5:=0; count6:=0;IF x1=y1 THEN count5:=count5+1;ELSIF x1=y2 THEN count6:=count6+1;ELSIF x1=y3 THEN count6:=count6+1;ELSIF x1=y4 THEN count6:=count6+1;ELSE NULL;

16、END IF;IF x2=y2 THEN count5:=count5+1;ELSIF x2=y1 THEN count6:=count6+1;ELSIF x2=y3 THEN count6:=count6+1;ELSIF x2=y4 THEN count6:=count6+1;ELSE NULL;END IF;IF x3=y3 THEN count5:=count5+1;ELSIF x3=y1 THEN count6:=count6+1;ELSIF x3=y2 THEN count6:=count6+1;ELSIF x3=y4 THEN count6:=count6+1;ELSE NULL;

17、END IF;IF x4=y4 THEN count5:=count5+1;ELSIF x4=y1 THEN count6:=count6+1;ELSIF x4=y2 THEN count6:=count6+1;ELSIF x4=y3 THEN count6:=count6+1;ELSE NULL;END IF;IF count5=4 THEN tf=1; bee=0;ELSE tf=0; bee=1;END IF;num_a=count5; num_b=count6; If count11=1000 THENdonedone=0; count5:=0; count6:=0; count2:=

18、0;IF tf=0 THEN key2=0000000;y1=0000000; y2=0000000; y3=0000000; y4 NULL;END CASE;END IF;END PROCESS p7;10、 状态指示灯P8:PROCESS(clk_scan)BEGINIF clk_scanevent AND clk_scan=1 THENCASE state ISWHEN idle = ld_outld_outld_outld_out ld_outld_out=0000;-系统故障END CASE;state led_row=01111111;led_col led_row=101111

19、11;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=111101

20、11;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=111111

21、10;led_col led_row=01111111;led_col led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=0

22、1111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_

23、row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col

24、 led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCASE led_row ISWHEN 10111111 = led_row=01111111;led_col led_row=10111111;led_col led_row=11011111;led_col led_row=11101111;led_col led_row=11110111;led_col led_row=11111011;led_col led_row=11111101;led_col led_row=11111110;led_col led_row=01111111;led_colCA

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论