EDA小游戏范本模板.docx

上传人:b****4 文档编号:24740430 上传时间:2023-06-01 格式:DOCX 页数:27 大小:1.95MB
下载 相关 举报
EDA小游戏范本模板.docx_第1页
第1页 / 共27页
EDA小游戏范本模板.docx_第2页
第2页 / 共27页
EDA小游戏范本模板.docx_第3页
第3页 / 共27页
EDA小游戏范本模板.docx_第4页
第4页 / 共27页
EDA小游戏范本模板.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

EDA小游戏范本模板.docx

《EDA小游戏范本模板.docx》由会员分享,可在线阅读,更多相关《EDA小游戏范本模板.docx(27页珍藏版)》请在冰豆网上搜索。

EDA小游戏范本模板.docx

EDA小游戏范本模板

 

 

EDA技术课程设计报告

 

设计名称:

EDA课程设计

设计题目:

经典数字游戏—-过河

专业:

电子信息工程专业

班级:

0

学生姓名

学号:

指导老师

题目:

基于FPGA的经典数字游戏——过河的设计

摘要:

基于FPGA的洗衣机控制器设计,主要通过使用VerilogHDL语言,在Quartus2上完成电路设计以及程序开发模拟,实现经典的猫狗鼠过河游戏。

本设计硬件主要5个按键10个LED灯以及2个数码管;软件设计时采用有限状态机来实现,设置了十个状态,由玩家输入的按键值来决定状态之间的转换。

全部程序由控制器模块,分频模块,按键去抖模块,控制模块,十进制转换模块组成,顶层模块使用原理图实现,底层由VerilogHDL语句实现。

在编程之后还进行了功能仿真,给出了仿真的结果以及仿真图。

并对本次设计的完成情况进行了系统性的总结。

关键字:

FPGA,Quartus2,VerilogHDL语言,过河,状态机

一、系统设计······················································3

1设计要求·····················································3

2总体设计方案·················································3

(1)设计思路············································3

(2)系统组成············································3

二、单元硬件电路设计··············································4

1键盘去抖模块··················································4

2显示模块·····················································4

3状态控制模块·················································4

三、软件设计······················································4

1状态控制模块程序设计··········································5

2按键去抖程序设计·············································5

3时钟分频模块程序设计··········································6

4十进制转换模块程序设计·········································6

四、系统仿真测试··················································6

1洗衣机模块仿真··············································6

2控制模块仿真················································6

3按键去抖模块仿真·············································7

4分频模块仿真·················································7

五、编译下载调试·················································8

六、总结··························································12

附录:

附录一电路原理图··················································13

附录二管脚定义·················································13

附录三程序代码··················································14

 

一、系统设计

1、设计要求

一个人将一只狗、一只猫和一只老鼠渡过河的经典游戏用模块实现;

游戏要求:

独木舟1次只能装载人和1只动物,且猫狗、猫鼠不能友好相处,设计过河方案,将三只动物安全渡过河,则游戏胜利结束。

1、用LED以适当的方式表示各种动物、河和独木舟以及过河的动作;

2、以数码管显示完成游戏所经历的过河次数;

3、调置复位键,当游戏失败后,以LED显示或数码管显示E等方式来表示此时程序挂起,俺复位键课重新开始新一轮游戏。

2、总体设计方案

1、设计思路

本课程设计需要使用VerilogHDL语言编程,实现经典的猫狗鼠过河游戏。

设计时采用有限状态机来实现本游戏。

本设计硬件主要有5个按键10个LED灯以及2个数码管;5个按键用来玩家输入以及复位按键,10个LED分别用来显示河对岸状态与进行过河状态以及输赢的情况;2个数码管用来显示玩家所经历的过河次数。

题目要求设计一个过河游戏电路,实现游戏实现状态的控制。

1。

状态控制模块基本实现要求功能,包括LED输出、数码管显示次数。

2.分频模块实现从高频向低频转换,供控制模块等使用

3.按键去抖模块,实现对按键的去抖功能。

4。

状态控制模块控制各种状态间转换

5.十进制转换模块,因为实验箱自带显示译码,所以省掉数码管模块。

6。

定义管脚,最终能在试验箱上显示结果

2、系统组成

过河游戏电路主要由状态控制模块,时钟分频模块,按键去抖模块,计数模块,十进制转换模块组成。

如图1—1所示

图1-1

二、单元硬件电路设计

1、按键去抖模块

设有5个按键:

一个复位键,四个过河状态控制的按键,表示正在过河的才做过程.

2、显示模块

设有10个LED灯,2个数码管。

LED灯中分两部分,LED0-LED3中四个表示河对岸的状态,一个表示是否错误,一个表示是否游戏成功;LED8-LED11中四个表示另一岸的状态(guohezhuangtai?

)。

2个数码管显示游戏所用步数。

3、状态控制模块

模块是以一片altera公司的Cyclone2系列FPGA为主体,配合一些外围电路实现的。

Cyclone2系列FPGA采用全铜层、低K值、1.2伏SRAM工艺设计,裸片尺寸被尽可能最小的优化.采用300毫米晶圆,以TSMC成功的90nm工艺技术为基础,CycloneII器件提供了4,608到68,416个逻辑单元(LE),并具有一整套最佳的功能,包括嵌入式18比特x18比特乘法器、专用外部存储器接口电路、4kbit嵌入式存储器块、锁相环(PLL)和高速差分I/O能力。

 

三、软件设计

采用Quartus2作为开发工具对可编程逻辑器件FPGA的编程,底层由VerilogHDL语句实现,顶层使用原理图实现.软件设计由状态控制模块,时钟分频模块,按键去抖模块,十进制转换模块四部分组成,由于输入时钟为50MHZ,因此使用分频模块输出50HZ的方波,给控制模块提供信号,控制模块输出的计数输入给数码管显示译码模块,按键消抖模块的作用是为了消除按键抖动而设立的。

1、主控制模块程序设计

状态控制模块采用有限状态机实现对过河游戏状态的控制。

具体如下

S状态表示河对岸的各状态,共十一个状态,包括一个错状态,K表示按键所给条件,表示正在过河的各种情况.我们采用led灯来表示过河的状态.如当renhe猫在河对岸,我们记为(1010),猫在河对岸时我们记为(0010),同理一共有10个允许出现的状态,还包括一个错误的状态。

状态有:

S0=(0000)S1=(1010)S2=(0010)S4=(1110)

S5=(0100)S6=(0001)S7=(1101)S8=(0101)

S9=(1111)S10错误状态

同状态一样设置

K1=(1000)表示人单独运动,K2=(1100)表示人和狗一起运动,K3=(1010)表示人和猫一起运动,K4=(1001)表示人和鼠一起运动.

当输出最终为(1111)是游戏一胜利而告终.

状态转换示意图如3-1下

图3-1

2、按键去抖程序设计

在进行独立按键或者矩阵式按键的设计的时候,我们在按下键盘的时候其实并不只是按下去有一个抖动的过程,就连松手的过程也有抖动,然而这个抖动通常被人们所忽略,从而导致输入数据的错误和乱码,因此我们必须对按键进行按键的消抖处理。

FPGA的VerilogHDL语言是硬件描述语言,主要运用了状态机和延时的消抖方式。

3、时钟分频模块程序设计

该模块通过输入的clock信号(50MHZ)分频后得到50HZ供给控制模块,通过两个1000分频输出50HZ的时钟信号,提供给其余各个模块.

4、十进制转换模块程序设计

该模块主要是为了实现将系统中二进制数转换为十进制数分别显示在数码管中表示游戏行走的步数,由于数码管系统自行译码为4为位二进制数,从而使得一个数码管显示十六进制数。

 

四、系统仿真测试

1.状态控制模块仿真如下图4—1

out_n表示按键的次数,ledout表示4个led输出的状态,最开始7个按键顺利完成游戏,ledout输出15即(1111),outdata表示胜利,此时输出为1。

按下复位键后状态清零,游戏重新开始,当按下key2是游戏失败outdata2表示游戏失败输出1。

图4-1

 

2。

十进制模块仿真如图4—2

图4—2

输入24,十位是nsouta输出2,各位osoutb输出4。

3.时钟分频模块仿真如图4—3

图4—3

(由于分频数较大,所以输入信号显得过于密集)

输入时钟信号的频率为输出信号的100倍。

4。

按键去抖模块仿真如图4-4

图4-4

通过计数使得按键带到一定时间后输出一个周期的脉冲。

 

五、编译下载调试

1.初始状态

图5-1

左边两排led灯,上面一排表示河对岸,初始状态为s0(0000),下面的是此案状态值正好与对岸相反(1111)。

右上角两个显示为00的数码管表示游戏进行的步数即按键的次数。

F1是复位键,F2是表人单独运动的键,F3表示人和狗运动,F4表示人和猫运动,F5表示人和鼠一起运动。

2.游戏运行中

图5-2

游戏正在顺利进行,尚未出错,已运行3步

3.游戏失败

图5—3

游戏失败,上面一排的第7个led灯亮,表示游戏失败。

4。

游戏成功

图5-4

上面一排led前四个全亮表示人狗猫鼠已经到达河对岸,下面的全灭,第一排最右边的led灯亮表示游戏成功,数码管显示7步完成游戏

 

附录

附录一:

顶层文件图如图

附录二:

管脚定义

Nodename

direction

location

group

I/Obank

Vrefgroup

I/Ostandard

Crruentstrength(24mA)

clk

Input

PIN_P25

6

B6_N0

3。

3

24mA

key1

Input

PIN_AA10

8

B8_N1

3.3

24mA

key2

Input

PIN_AB10

8

B8_N1

3.3

24mA

key3

Input

PIN_AE6

8

B8_N1

3。

3

24mA

key4

Input

PIN_V22

6

B6_N1

3。

3

24mA

ledout[0]

Output

PIN_AE8

Ledout[3。

0]

8

B8_N0

3。

3

24mA

ledout[1]

Output

PIN_W12

Ledout[3。

0]

8

B8_N0

3.3

24mA

ledout[2]

Output

PIN_W11

Ledout[3。

0]

8

B8_N0

3。

3

24mA

ledout[3]

Output

PIN_AC10

Ledout[3.。

0]

8

B8_N0

3.3

24mA

nsouta[0]

Output

PIN_AD21

Nsouta[3。

.0]

7

B7_N0

3。

3

24mA

nsouta[1]

Output

PIN_AF22

Nsouta[3。

.0]

7

B7_N0

3.3

24mA

nsouta[2]

Output

PIN_AE22

Nsouta[3。

.0]

7

B7_N0

3。

3

24mA

nsouta[3]

Output

PIN_V18

Nsouta[3..0]

7

B7_N0

3。

3

24mA

nsoutb[0]

Output

PIN_AB21

Nsoutb[3..0]

7

B7_N0

3.3

24mA

nsoutb[1]

Output

PIN_AD23

Nsoutb[3。

.0]

7

B7_N0

3。

3

24mA

nsoutb[2]

Output

PIN_AD22

Nsoutb[3。

.0]

7

B7_N0

3.3

24mA

nsoutb[3]

Output

PIN_AC21

Nsoutb[3..0]

7

B7_N0

3.3

24mA

outdata

Output

PIN_AA11

8

B8_N1

3.3

24mA

outdata2

Output

PIN_AF7

8

B8_N1

3。

3

24mA

rst

Input

PIN_Y11

8

B8_N1

3。

3

24mA

show1[0]

Output

PIN_U21

Show1[3。

.0]

6

B6_N0

3.3

24mA

show1[1]

Output

PIN_U20

Show1[3..0]

6

B6_N0

3.3

24mA

show1[2]

Output

PIN_T19

Show1[3..0]

6

B6_N0

3。

3

24mA

show1[3]

Output

PIN_R19

Show1[3。

0]

6

B6_N0

3.3

24mA

附录三:

程序代码

1.按键去抖代码

moduleanjian(clk,keyin,keyout);

inputclk;

inputkeyin;

outputkeyout;

reg[3:

0]count;

regkeyout;

always@(posedgeclk)

begin

if(keyin==1)

begin

count〈=count+1'b1;

if((count〉=2)&&(count〈3))keyout〈=1;

elsekeyout〈=0;

end

else

begin

keyout<=0;

count〈=0;

end

end

endmodule

2.千分频代码

modulef1000(clockin,clockout);

inputclockin;

outputclockout;

regclockout;

reg[9:

0]count;

always@(posedgeclockin)

begin

if(count==499)

begin

clockout=~clockout;

count〈=0;

end

else

count<=count+1’b1;

end

endmodule

3.十进制转换代码

modulejz10(clock,datain,nsouta,nsoutb);

inputclock;

input[7:

0]datain;

output[3:

0]nsouta,nsoutb;

reg[3:

0]a;

reg[3:

0]nsouta,nsoutb;

always@(posedgeclock)

begin

nsoutb<=datain%10;

nsouta〈=datain/10;

end

endmodule

4.主控制程序代码

moduleguohe_con(clk,rst,key1,key2,key3,key4,ledout,out_n,outdata,outdata2,show1);

inputclk;

inputrst;

inputkey1,key2,key3,key4;//输入

output[7:

0]out_n;//完成游戏所经历的过河次数

output[3:

0]ledout;//表示人狗猫鼠的状

output[3:

0]show1;//显示变量

outputoutdata;//游戏成功outdata〈=1

outputoutdata2;//游戏失败outdata2<=1

reg[10:

0]state;

reg[7:

0]out_n;

reg[7:

0]count;

reg[3:

0]ledout;

reg[3:

0]show1;

regoutdata;

regoutdata2;

parameters0=11'b00000000001,//0000

s1=11'b00000000010,//1010

s2=11'b00000000100,//0010

s3=11'b00000001000,//1110

s4=11'b00000010000,//1011

s5=11’b00000100000,//0100

s6=11'b00001000000,//0001

s7=11'b00010000000,//1101

s8=11’b00100000000,//0101

s9=11'b01000000000,//1111

s10=11’b10000000000;//error

always@(posedgeclk)

if(rst)

begin

count〈=0;

out_n〈=count;

state〈=s0;

ledout〈=4’b0000;

outdata<=0;

outdata2<=0;

show1<=4’b0000;

end

else

case(state)

s0:

begin

out_n<=count;

ledout〈=4'b0000;

if(key3==1)

begin

show1〈=4’b1010;

state〈=s1;//0000to1010

count〈=count+1;

end

elseif(key1^^key2^^key4)

begin

state〈=s10;//error

count〈=count+1;

end

elsestate〈=s0;

end

s1:

begin

out_n<=count;

ledout<=4'b1010;

if(key1==1)

begin

show1〈=4’b1000;

count〈=count+1;

state<=s2;//1010to0010

end

elseif(key3)

begin

show1<=4’b1010;//renhemaohui;gaicheng

state<=s0;//1010to0000

count<=count+1;

end

elseif(key2^^key4)

begin

state〈=s10;//error

count〈=count+1;

end

elsestate〈=s1;//error

end

s2:

begin

ledout<=4’b0010;

out_n〈=count;

if(key2==1)

begin

show1<=4’b1100;

state〈=s3;//0010to1110

count<=count+1;

end

elseif(key1==1)

begin

show1<=4'b1000;

state<=s1;//0010to1010

count〈=count+1;

end

elseif(key4==1)

begin

show1〈=4’b1001;

state〈=s4;//0010to1011

count<=count+1;

end

elseif(key3==1)

begin

show1〈=4’b1010;

state<=s10;//error

count〈=count+1;

end

elsestate〈=s2;

end

s3:

begin

out_n<=count;

ledout<=4'b1110;

if(key2==1)

begin

show1<=4’b1100;

state<=s2;//1110to0010

count〈=count+1;

end

elseif(key3==1)

begin

show1〈=4’b1010;

state〈=s5;//1110to0100

count〈=count+1;

end

elseif(key1^^key4)

begin

state〈=s10;//error

count<=count+1;

end

elsestate〈=s3;

end

s4:

begin

out_n〈=count;

ledout<=4'b1011;

if(key3==1)

begin

show1<=4'b1010;

state〈=s6;//1011to0001

count<=count+1;

out_n<=count;

end

elseif(key4==1)

begin

show1<=4'b1001;

state<=s2;//1011to0010

count<=count+1;

out_n〈=count;

end

elseif(key1^^key2)

begin

state〈=s10;//error

count〈=count+1;

out_n〈=count;

end

elsestate<=s4;

end

s5:

begin

out_n〈=count;

ledout〈=4'b0100;

if(key4==1)

begin

show1<=4’b1001;

state<=s7;//0100to1101

count〈=count

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

当前位置:首页 > 幼儿教育 > 唐诗宋词

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

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