最新基于VHDL课程设计乒乓球游戏.docx

上传人:b****4 文档编号:3878538 上传时间:2023-05-06 格式:DOCX 页数:35 大小:2.07MB
下载 相关 举报
最新基于VHDL课程设计乒乓球游戏.docx_第1页
第1页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第2页
第2页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第3页
第3页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第4页
第4页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第5页
第5页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第6页
第6页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第7页
第7页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第8页
第8页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第9页
第9页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第10页
第10页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第11页
第11页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第12页
第12页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第13页
第13页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第14页
第14页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第15页
第15页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第16页
第16页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第17页
第17页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第18页
第18页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第19页
第19页 / 共35页
最新基于VHDL课程设计乒乓球游戏.docx_第20页
第20页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

最新基于VHDL课程设计乒乓球游戏.docx

《最新基于VHDL课程设计乒乓球游戏.docx》由会员分享,可在线阅读,更多相关《最新基于VHDL课程设计乒乓球游戏.docx(35页珍藏版)》请在冰点文库上搜索。

最新基于VHDL课程设计乒乓球游戏.docx

最新基于VHDL课程设计乒乓球游戏

A、以太网B、快速以太网

7.从数据表RSGL和RSGZ两个表中,查询出“编号”字段值相同的记录的全部信息,则实现此功能的SQL命令为____。

B.视图和查询文件的扩展名都是.QPR

B.S表中年龄大于60岁的记录被加上删除标记

14.查询设计器的排序依据选项卡的作用相当于SELECT命令中的___________短语。

6.VisualFoxPro是一种关系数据库管理系统,所谓关系是指________。

A..DBFB..QPRC...SCXD..TXT

26、子网掩码中“1”代表(B)。

C.选择了一个空闲的工作区D.显示出错信息

B.视图和查询文件的扩展名都是.QPR

 

课程设计

 

名称乒乓球游戏程序

姓名

专业班级

 

基于FPGA的乒乓球游戏程序的设计

摘要

VHDL是高速集成电路硬件描述语言,目前已成为许多设计自动化工具普遍采用的标准化硬件描述语言.VHDL语言功能性强、覆盖面广、灵活性高,具有很好的实用。

本文设计一个基于VHDL的乒乓游戏机模拟乒乓球比赛。

用VHDL编程模拟乒乓球比赛,电路模块由分频、状态机等部分组成,对各部分编写VHDL算法,进行编译及程序下载。

通过验证,乒乓游戏机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分,还能根据接球快慢改变球运行的速度。

实现乒乓游戏机的功能。

关键词:

乒乓游戏机、VHDL、状态机

 

第一部分绪论

1.1课题设计背景

1.1.1FPGA简介

FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

1.1.2硬件描述语言VHDL

VHDL的英文全名是VHSICHardwareDescriptionLanguage(VHSIC硬件描述语言)。

VHSIC是VeryHighSpeedIntegratedCircuit的缩写,是20世纪80年代在美国国防部的资助下始创的,并最终导致了VHDL语言的出现。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

 

1.1.3QuartusⅡ简介

AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

AlteraQuartusII(3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。

  Quartus IIdesign是最高级和复杂的,用于system-on-a-programmable-chip(SOPC)的设计环境。

QuartusIIdesign提供完善的timingclosure和LogicLock?

基于块的设计流程。

QuartusIIdesign是唯逐一个包括以timingclosure和基于块的设计流为基本特征的programmablelogicdevice(PLD)的软件。

QuartusII设计软件改进了性能、提升了功能性、解决了潜伏的设计延迟等,在产业领域率先提供FPGA与mask-programmeddevices开发的同一工作流程。

1.2课题主要内容

随着可编程逻辑电路和EDA技术的发展,在逻辑电路设计和嵌入式系统设计方面,以CPLD/FPGA为代表的可编程逻辑器件已经逐步代替了传统的标准逻辑器件;本次论文的乒乓球游戏所有的程序可以集成在一个FPGA开发芯片上面,不用在用其他功能的分立逻辑元件,达到集成度高、响应快、功耗低的特点。

本次论文主要是基于FPGA的乒乓球游戏的设计,模拟乒乓球比赛的基本过程和规则,自动裁判和记分,比局为7局,每局11分。

而本次论文采用模块化设计,主要分为两大模块:

时钟分频模块、状态机控制模块。

第二部分系统设计

2.1整体设计图

图1乒乓球游戏程序BDF图

 

2.2设计思路

1.控制模块状态图

图2乒乓球游戏程序控制模块状态图

 

2.总体思路

SW0开关(EN)控制功能使能与比赛清零。

SW0关闭(EN=0),显示学号后六位,打开时允许运行,比分比局清零。

利用状态机,设初始状态处于start状态,key3为复位键,按下key3可以回到start状态。

通过各种请求信号实现状态的相互转换,进而实现发球和乒乓球左右移动、击球的相互转换,并在球未击中、提前击中、发球失败时显示相应比分、比局情况。

通过设计control的反馈控制频率方式,利用不同键击球的快慢控制球运行的速度。

并在整个游戏结束时有一个end标记与比分比局切换显示。

2.3具体功能对应等

1.乒乓球控制模块

控制乒乓球的运行状态的转换,比分、比局的显示。

反馈信号信号的设置和输出,为分频模块提供指令信号,控制球运行的速度。

图3乒乓球运行控制模块BDF

2.时钟分频模块

为状态机产生3种不同的时钟信号。

图4时钟分频模块BDF

第三部分模块设计

3.1控制模块

3.1.1引脚功能

表1控制模块的引脚功能表

定义类型

外设

引脚

功能

instd_logic

EN

SW0

关闭显示学号后6位并对比分清零,打开则开始游戏

CLK

分频模块送入3种不同频率的速度

RST

KEY3

按一次重新开始新的一球

HIT[17..13]

SW17~SW13

选手甲接发球开关

HIT[5..2]

SW5~SW2

选手乙接发球开关

HIT[12..6]

SW12~SW6

禁止触球区

out

stdlogic

HEX7

HEX7

选手甲获胜局数

HEX6

HEX6

选手乙获胜局数

HEX5

HEX5

显示无意义

HEX4

HEX4

显示无意义

HEX3

HEX3

选手甲获胜比分

HEX2

HEX2

选手甲获胜比分

HEX1

HEX1

选手乙获胜比分

HEX0

HEX0

选手乙获胜比分

CONTROL[1..0]

输出反馈给分频模块

LIGHT[17..2]

LEDR17~LEDR2

乒乓球位置显示

3.1.2核心代码及解释

模块主要分状态转换,状态译码,LED灯的译码,和辅助变量temp,辅助判断信号control的计数进程。

利用temp判断是否分出胜负即游戏是否结束,结束之后显示闪烁辅助标志End并且清零比分。

利用control判断接球快慢,反馈到分频器,分频器根据接球快慢控制球的运行速度,共快中慢三种速度,分别为50Hz,10Hz,5.556Hz。

为方便检查结果,SW1直接控制速度开关,共快慢两种速度,分别为50Hz,5.556Hz。

1.中间变量的初始化:

SIGNALST,NST:

STATE:

=start;

SIGNALreg:

STD_LOGIC_VECTOR(17DOWNTO2);--灯的内部变量

SIGNALBIFEN1,BIFEN2:

integerrange0to11;--选手甲乙的比分记录变量

SIGNALBIJUONE,BIJUTWO:

integerrange0to4;--选手甲乙的比局记录变量

SIGNALTEMP:

integerrange0to1;--比局数的内部计数变量

SIGNALBIJU1,BIJU2:

STD_LOGIC_VECTOR(6DOWNTO0);--选手甲乙的比局译码输出变量

SIGNALBIFENOUT11,BIFENOUT12,BIFENOUT21,BIFENOUT22:

STD_LOGIC_VECTOR(6DOWNTO0);--选手甲乙的比分译码输出变量

SIGNALREG_1:

STD_LOGIC_VECTOR(6DOWNTO0);--数码管的内部变量

SIGNALREG_5:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALREG_3:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALREG_8:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALREG_4:

STD_LOGIC_VECTOR(6DOWNTO0);

SIGNALREG_2:

STD_LOGIC_VECTOR(6DOWNTO0);

2.主控组合进程:

通过判断球的位置信号及开关键信号执行相应的状态转换。

EN=1时游戏开始,进入状态start,temp开始计数,进入状态wait1检测发球选手并点亮相应的球所代表的LED,之后进入状态send,之后选择进入状态,movatoright或movetoleft,球开始向对方选手移动,当球到达可接球区域时,若对方及时击打并及时关闭开关,则进入状态movetoleft或movatoright球向回移动,如此反复。

若发球方或接球方未及时关闭开关,则视为击打失败,返回状态start,对方加一分。

每局为11分制,共设七局。

每结束一局temp就会相应加1,当temp加到5,即分出胜负之后显示闪烁辅助标志End。

以选手甲发球为例:

(1)进入状态start,统计比分及比局。

(2)进入状态send,判断选手甲(假设甲为左边一方)是否发球,若发球则进入状态wait1,否则停留在状态start。

(3)进入状态wait1,判断选手甲发球端球代表的灯REG17是否亮起,若是则进入状态movetoright,反之返回状态start。

(4)进入状态movetoright,灯右移,并判断是否有无关按键按下(SW17~SW14),若无则继续右移,反之返回状态start并且对方得一分。

当球移至REG6~REG2,进入选手乙可接球区域:

1当球移至REG6时选手乙及时击打相应开关SW6,则进入状态movetoleft,并调整球运行速度为快。

若提前击打或未及时关闭开关,则击球失败并且对方得一分,进入状态start。

REG5条件下类似。

2当球移至REG4时选手乙及时击打开关SW4,则进入状态movetoleft,并调整球运行速度为中。

若提前击打或未及时关闭开关,则击球失败并且对方得一分,进入状态start。

REG4,REG3条件下类似。

(5)进入状态movetoleft,灯左移,并判断是否有无关按键按下(SW2~SW5),若无则继续右移,反之返回状态start并且对方得一分。

当球移至REG17~REG13,进入选手甲可接球区域:

1当球移至REG13时选手乙及时击打相应开关SW6,则进入状态movetoright,并调整球运行速度为快。

若提前击打或未及时关闭开关,则击球失败并且对方得一分,进入状态start。

REG14条件下类似。

2当球移至REG15时选手乙及时击打开关SW4,则进入状态movetoright,并调整球运行速度为中。

若提前击打或未及时关闭开关,则击球失败并且对方得一分,进入状态start。

REG16,REG17条件下类似。

附movetoright代码:

WHENmovetoright=>REG<='0'®(17DOWNTO3);--右移状态

CASEREGIS

WHEN"1000000000000000"=>NST<=movetoright;

WHEN"0100000000000000"=>

IFHIT="0000000000000000"THEN--开关及时关上

NST<=movetoright;

ELSE

BIFEN2<=BIFEN2+1;NST<=start;--若未及时关上,对方加分

ENDIF;

WHEN"0010000000000000"=>NST<=movetoright;

WHEN"0001000000000000"=>

IFHIT="0000000000000000"THEN

NST<=movetoright;

ELSE

BIFEN2<=BIFEN2+1;NST<=start;

ENDIF;

WHEN"0000100000000000"=>NST<=movetoright;

WHEN"0000010000000000"=>NST<=movetoright;

WHEN"0000001000000000"=>NST<=movetoright;

WHEN"0000000100000000"=>NST<=movetoright;

WHEN"0000000010000000"=>NST<=movetoright;

WHEN"0000000001000000"=>NST<=movetoright;

WHEN"0000000000100000"=>NST<=movetoright;

WHEN"0000000000010000"=>

IFHIT="0000000000010000"THENCONTROL<="01";NST<=movetoleft;

ELSIFHIT(5)='1'THEN

BIFEN1<=BIFEN1+1;

NST<=start;

ENDIF;

WHEN"0000000000001000"=>

IFHIT(4)='1'THEN

BIFEN1<=BIFEN1+1;

NST<=start;

ELSIFHIT="0000000000001000"THENCONTROL<="01";NST<=movetoleft;

ENDIF;

WHEN"0000000000000100"=>

IFHIT(3)='1'THEN

BIFEN1<=BIFEN1+1;

NST<=start;

ELSIFHIT="0000000000000100"THENCONTROL<="10";NST<=movetoleft;

ENDIF;

WHEN"0000000000000010"=>

IFHIT

(2)='1'THEN

BIFEN1<=BIFEN1+1;

NST<=start;

ELSIFHIT="0000000000000010"THENCONTROL<="10";NST<=movetoleft;

ENDIF;

WHEN"0000000000000001"=>

IFHIT="0000000000000001"THENCONTROL<="10";NST<=movetoleft;

ELSEBIFEN1<=BIFEN1+1;

NST<=start;

ENDIF;

WHENOTHERS=>NST<=start;

ENDCASE;

3.主控时序进程:

控制游戏使能及状态转换,具有异步清零功能。

附代码:

PROCESS(EN,RST,CLK)

BEGIN

IFEN='1'THEN

IFRST='0'THENST<=start;

ELSIFCLK'EVENTandCLK='1'THENST<=NST;

ENDIF;

ENDIF;

ENDPROCESS;

4.译码进程:

EN=0时显示学号;EN=1时将选手甲、乙的比分及比局变量译码转为七段数码管显示。

并且当TEMP=0时,在数码管上显示游戏结束标志End。

代码见附录。

3.1.3RTL图

图5控制模块RTL图

3.2分频模块

3.2.1引脚功能

表2分频模块引脚功能表

FD

定义类型

外设

引脚

功能

instd_logic

CLK

 

内部50MHz时钟

EN

KEY3

总使能开关

SW1

SW1

频率直接选择信号

CONTROL

速度控制频率选择信号

outstd_logic

CLKOUT

 

提供频率给GAME

3.2.2核心代码及解释

1.核心代码

PROCESS(CLK,EN)

VARIABLEtemp1:

integerrange999999downto0:

=0;--50Hz

VARIABLEtemp2:

integerrange4999999downto0:

=0;--10Hz

VARIABLEtemp3:

integerrange8999999downto0:

=0;--5.556Hz

BEGIN

IFEN='1'THEN

ifCLK'EVENTANDCLK='1'THEN

IFtemp1=999999THEN

temp1:

=0;Q1<=NOTQ1;

ELSE

temp1:

=temp1+1;

ENDif;

IFtemp2=4999999THEN

temp2:

=0;Q2<=NOTQ2;

ELSE

temp2:

=temp2+1;

ENDif;

IFtemp3=8999999THEN

temp3:

=0;Q3<=NOTQ3;

ELSE

temp3:

=temp3+1;

ENDif;

endif;

ELSE

temp1:

=0;Q1<='0';

temp2:

=0;Q2<='0';

temp3:

=0;Q3<='0';

ENDIF;

CASECONTROLIS

WHEN"00"=>

IFSW1='1'THEN

CLKOUT<=Q1;

ELSIFSW1='0'THEN

CLKOUT<=Q3;

ENDIF;

WHEN"01"=>CLKOUT<=Q2;

WHEN"10"=>CLKOUT<=Q3;

WHENOTHERS=>CLKOUT<=Q1;

ENDCASE;

ENDPROCESS;

2.解释

该模块将内部时钟的50MHz信号,变为50Hz,10Hz,5.556Hz。

内部变量分别为Q1、Q2、Q3,将根据GAME模块反馈的CONTROL选择输出到CLKOUT。

初始条件下可直接通过SW1控制Q1、Q3输出到CLKOUT。

3.2.3RTL图

图6分频模块RTL图

第四部分操作配图

1、EN=0,显示学号

图7显示学号153835、153842

2、EN=1,初始状态,甲和乙比局和比分均为0。

图8初始状态

3、EN=1,甲发球,SW17亮。

图9

4、EN=1,右移状态。

图10

5、EN=1,乙接球失败,乙发球情况。

图11

6、甲乙比局2:

1,比分2:

5情况显示如下。

图17

7、游戏结束辅助显示如下。

图12

第五部分结论

4.1遇到的问题和改进

问题1:

在比赛结束时,比分比局迅速清零,无法使比分比局按我们的意志在某时刻清零。

解决办法:

增设辅助信号,当比赛结束时,使数码管在结束标志与比局之间切换显示,最后由人为的控制使能开关清零。

问题2:

无法按照在不同键接球改变球运行的速度。

解决办法:

设一个反馈控制信号,将不同键接球信息反馈回分频模块里从而控制速度。

4.2工作分配比例

邢可馨:

分频模块,按键击球以及比赛记分译码代码的设计与开发(55%)

陈声琴:

速度控制处理、状态机代码的设计与开发(45%)

第六部分附录

一、分频模块代码:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.all;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYFDIS

PORT(

EN:

INSTD_LOGIC;

CLK:

INSTD_LOGIC;

CLKOUT:

OUTSTD_LOGIC;

SW1:

INSTD_LOGIC;

CONTROL:

INSTD_LOGIC_VECTOR(1DOWNTO0)

);

ENDFD;

ARCHITECTUREbehavOFFDIS

signalQ1:

STD_LOGIC;

signalQ2:

STD_LOGIC;

signalQ3:

STD_LOGIC;

BEGIN

PROCESS(CLK,EN)

VARIABLEtemp1:

integerrange999999downto0:

=0;------最快使比赛结束的速度

VARIABLEtemp2:

integerrange4999999downto0:

=0;------接球加速后的速度

VARIABLEtemp3:

integerrange8999999downto0:

=0;-------正常发球速度

BEGIN

IFEN='1'THEN

ifCLK'EVENTANDCLK='1'THEN

IFtemp1=999999THEN

temp1:

=0;Q1<=NOTQ1;

ELSE

temp1:

=temp1+1;

ENDif;

IFtemp2=4999999THEN

temp2:

=0;Q2<=NOTQ2;

ELSE

temp2:

=temp2+1;

ENDif;

IFtemp3=8999999THEN

temp3:

=0;Q3<=NOTQ3;

ELSE

temp3:

=temp3+1;

ENDif;

endif;

ELSE

temp1:

=0;Q1<='0';

temp2:

=0;Q2<='0';

temp3:

=0;Q3<='0';

ENDIF;

CASECONTROLIS------使用反馈信号控制速度

WHEN"00"=>

IFSW1='1'THEN

CLKOUT<=

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2