猜数字vhdl设计Word文档格式.docx

上传人:b****5 文档编号:17911071 上传时间:2022-12-12 格式:DOCX 页数:65 大小:318.97KB
下载 相关 举报
猜数字vhdl设计Word文档格式.docx_第1页
第1页 / 共65页
猜数字vhdl设计Word文档格式.docx_第2页
第2页 / 共65页
猜数字vhdl设计Word文档格式.docx_第3页
第3页 / 共65页
猜数字vhdl设计Word文档格式.docx_第4页
第4页 / 共65页
猜数字vhdl设计Word文档格式.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

猜数字vhdl设计Word文档格式.docx

《猜数字vhdl设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《猜数字vhdl设计Word文档格式.docx(65页珍藏版)》请在冰豆网上搜索。

猜数字vhdl设计Word文档格式.docx

5、若到点阵全灭时(64s结束)仍未猜出正确数字,游戏失败,点阵显示“囧”。

6、设置游戏机开关。

【实验所用仪器及元器件】

1.计算机

2.数字系统与逻辑设计实验开发板

【实验软件】

QuartusⅡ

【资源利用】

二、程序设计

1、程序流程图

2、逻辑框图

键盘模块

3、MDS图

rs=’1’

三、程序分析

1、引脚注释

clk——时钟

st——游戏开始

scan_out[3..0]——键盘的行扫描输出信号

key_row[3..0]——键盘的列输入信号

ms1——输入确认键

ms2——猜数字

rs——复位

bee_out——蜂鸣器输出

ld_out——状态指示灯

seg_out——数码管显示

cat_out——数码管排列显示

led_row_out——点阵行显示

led_col_out——点阵列显示

2、键盘数字

data0<

="

1111110"

;

--0

data1<

0110000"

--1

data2<

1101101"

--2

data3<

1111001"

--3

data4<

0110011"

--4

data5<

1011011"

--5

data6<

1011111"

--6

data7<

1110000"

--7

data8<

1111111"

--8

data9<

1111011"

--9

3、状态设置程序

设置程序状态

当st=1时,游戏开始

当ms=1时,确认输入数字,可以猜数字

当ms=1时,将输入猜测的数字与原始数字做对比,计算A,B

当rs=1时,程序复位清零

P1:

PROCESS(st,ms1,ms2,rs,tm,done,state,clk_tm)

VARIABLEcount_anyway:

INTEGERRANGE0TO2:

=0;

BEGIN

next_state<

=state;

IFrs='

1'

THENnext_state<

=idle;

--复位键,程序复位清零

ELSE

CASEstateIS

WHENidle=>

IFst='

=s1;

--游戏开始

ELSEnext_state<

ENDIF;

WHENs1=>

IFms1='

THEN—确认输入数字

next_state<

=s2;

ELSEnext_state<

WHENs2=>

IFms2='

THEN---开始猜数字

=s3;

ELSIFtm='

THEN

=over;

WHENs3=>

IFdone='

THEN–判断完成,数字对比结束

ENDIF;

WHENover=>

--游戏开始,初始化

ELSIFtf='

0'

THEN

IFtm='

next_state<

ELSEnext_state<

ENDIF;

WHENOTHERS=>

next_state<

--其他,程序置0

ENDCASE;

ENDIF;

ENDPROCESSp1;

4、分频器

将50MHz的时钟频率分成1KHz

P2:

PROCESS(clk)--fenping

VARIABLEcount3:

INTEGER:

VARIABLEcount4:

IFclk'

eventANDclk='

IFcount4=24999THEN

clk_scan<

=NOTclk_scan;

count4:

IFcount3=24999999THEN

clk_tm<

=NOTclk_tm;

count3:

ELSEcount3:

=count3+1;

ELSEcount3:

=count4+1;

ENDIF;

ENDPROCESSp2;

5、点阵计数

64s倒计时,在点阵显示,判断当tf=1时,led赋值为2,显示2号点阵,即为笑脸,游戏通过,当计时结束,count_clear=1,led赋值4,tm,赋值0,显示为空,当bee=1时,蜂鸣器响,提示猜测错误

P3:

PROCESS(clk_tm,count_clear,tf,bee)--countdown

IFtf='

led<

=2;

ELSIFcount_clear='

count_down<

led<

=4;

tm<

='

ELSIFbee='

=3;

ELSIFstate=s2THEN

IFclk_tm'

eventANDclk_tm='

IFcount_down=64THEN

tm<

count_down<

=1;

ELSEcount_down<

=count_down+1;

ELSENULL;

ENDPROCESSp3;

6、数码管显示

State为idle,,游戏初始化,数码管置零

State为s1,显示输入要猜测的数字

State为s2、s3、over,显示输入猜测数字

P4:

PROCESS(clk_scan)--displayseg

IFclk_scan'

eventANDclk_scan='

CASEstateIS

WHENidle=>

CASEcatIS

WHEN"

111110"

=>

cat<

011111"

seg<

0000000"

101111"

110111"

111011"

111101"

WHENOTHERS=>

ENDCASE;

WHENs1=>

=x1;

=x2;

=x3;

=x4;

WHENs2=>

=seg_a;

=seg_b;

=y1;

=y2;

=y3;

=y4;

WHENs3=>

WHENover=>

WHENOTHERS=>

NULL;

ENDCASE;

cat_out<

=cat;

seg_out<

=seg;

ENDPROCESSp4;

7、键盘扫描

P5:

PROCESS(clk_scan)--scan

CASEscanIS

WHEN"

1110"

scan<

0111"

1011"

1101"

scan_out<

=scan;

ENDPROCESSp5;

8、数字传输

将判断所得A、B显示在数码管上

P6:

PROCESS(num_a,num_b)--transnumtoseg

CASEnum_aIS

WHEN0=>

seg_a<

=data0;

WHEN1=>

=data1;

WHEN2=>

=data2;

WHEN3=>

=data3;

WHEN4=>

=data4;

CASEnum_bIS

seg_b<

ENDPROCESSp6;

9、输入判断

当state=idle时,初始化;

当state=s1时,从键盘输入初始数字,并将键盘数字分别赋值给x1,x2,x3,x4,即为要猜数字;

当state=s2时,蜂鸣器初始化,键盘输入猜测数字,并将键盘数字赋值给y1,y2,y3,y4,即为猜测数字;

当state=s3时,判断:

将x1分别于y1,y2,y3,y4对比,若x1=y1,则A加1,若x1=x2或x3或x4,则B加1,

将x2分别于y1,y2,y3,y4对比,若x2=y2,则A加1,若x1=x1或x3或x4,则B加1,

将x3分别于y1,y2,y3,y4对比,若x3=y3,则A加1,若x1=x1或x2或x4,则B加1,

将x4分别于y1,y2,y3,y4对比,若x4=y4,则A加1,若x1=x1或x2或x3,则B加1,

p7:

PROCESS(clk_scan)--keyin

VARIABLEcount1:

INTEGERRANGE0TO3:

VARIABLEcount2:

VARIABLEcount5:

INTEGERRANGE0TO4:

VARIABLEcount6:

VARIABLEcount11:

INTEGER:

BEGIN

x1<

x2<

x3<

x4<

y1<

y2<

y3<

y4<

num_a<

num_b<

tf<

key1<

key2<

count1:

count2:

count5:

count6:

done<

count_clear<

bee<

CASEkey_rowIS

CASEscanIS

WHEN"

WHENOTHERS=>

NULL;

ENDCASE;

=data7;

=data5;

=data6;

=data8;

=data9;

CASEcount1IS

WHEN0=>

IFkey1/=x4THEN

x1<

=key1;

count1:

ELSENULL;

ENDIF;

WHEN1=>

IFkey1/=x1THEN

x2<

WHEN2=>

IFkey1/=x2THEN

x3<

WHEN3=>

IFkey1/=x3THEN

x4<

bee<

CASEcount2IS

IFkey2/=y4THEN

y1<

=key2;

IFkey2/=y1THEN

y2<

IFkey2/=y2THEN

y3<

IFkey2/=y3THEN

y4<

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

当前位置:首页 > 小学教育 > 数学

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

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