乒 乓 球 游 戏 机 设 计.docx
《乒 乓 球 游 戏 机 设 计.docx》由会员分享,可在线阅读,更多相关《乒 乓 球 游 戏 机 设 计.docx(25页珍藏版)》请在冰豆网上搜索。
乒乓球游戏机设计
ShaanxiUniversityofTechnology
通信工程专业课程设计Ⅱ
题目乒乓球游戏机设计
学生姓名贾潇洒学号**********
所在院(系)陕西理工学院电信工程系
专业班级通信工程专业072班
指导教师郑争兵
完成地点陕西理工学院电信工程系实验室
2010年3月19日
通信工程专业课程设计Ⅱ任务书
院(系)电信工程系专业班级通信工程专业072班学生姓名贾潇洒
一、课程设计Ⅱ题目乒乓球游戏机设计
二、课程设计Ⅱ工作自2010年3月1日起至2010年3月19日止
三、课程设计Ⅱ进行地点:
电信工程系实验室
四、课程设计Ⅱ的内容要求:
[1]本课程设计的目的
本次课程设计为计算机类综合课程设计,通过计算机这个平台使我们将所学习的理论知识应用到实践中的一次尝试,同时也是对计算机辅助软件Max-pulsII的进一步熟悉。
[2]本课程设计的内容
采用EDA技术---可采用VHDL或原理图输入法,设计一个乒乓球游戏电路,进行声光模拟,结果应有仿真波形、流程图、并下载在EDA开发板上,测试验证无误。
[3]本课程设计要实现的功能
用8个(或更多个)发光二极管排成一条直线代表乒乓球台,中间两个发光二极管兼做乒乓球网,两边各有两个开关控制双方的发球和接球,并能自动完成裁判、记分等功能。
[4]课程设计时间安排:
3月1日-3月3日,熟悉内容,方案论证;
3月4日-3月10日,编写程序、运行及仿真;
3月11日-3月12日,下载并验证其功能;
3月16日,验收课程设计;
3月16日-3月19日,撰写、修改、提交课程设计报告。
指导教师系(教研室)通信工程教研室
接受任务开始执行日期2010年3月1日学生签名
乒乓球游戏机设计
贾潇洒
(陕西理工学院电信工程系通信072班,陕西汉中723003)
指导教师:
郑争兵
[摘要]本课程设计制作了一个乒乓球游戏机,此乒乓球游戏机能够正确判断与显示乒乓球的位置,并能自动裁判和记分。
设计过程中对乒乓球游戏机程序进行了编译运行、仿真下载,从而实现一个完整的乒乓球游戏机。
[关键词]乒乓球游戏机;实现;VHDL;MAX+PLUSⅡ;
[中图分类号]TN702
[文献标志码]A
DesignofTableTennisGamecircuit
JiaXiaosa
(ShaanxiInstituteofTechnologyTelecomEngineeringCommunication072class,ShaanxiHanzhong723003)
Instructor:
ZhengZhengbing
[Abstract]ThecoursedesignproducedaTableTennisGamecircuit.ThedesignoftheTableTennisGamecircuitcouldjudgeanddisplaythepositionofTableTennis,andcouldjudgeandrecordpointsautomatically.Inthedesignprocesshascarriedonthetranslationmovement,simulationdownloadingtothepingpongmechanicalgamesprocedure,thusrealizedcompletepingpongmechanicalgames.
Keywords:
TableTennisGamecircuit;VHDL;MAX+PLUSⅡ;processsimulation;
1.绪论
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
现代电子技术的核心是EDA(ElectronicDesignAutomation)技术。
EDA就是技术依赖于功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL(HardwareDescriptionLanguage)为系统逻辑描述手段完成的设计文件,自动的完成逻辑编译、逻辑化简、逻辑分割、逻辑综合、结构综合(布线布局),以及逻辑优化和仿真测试,甚至实现既定的电子线路系统功能。
EDA技术使得设计着的工作仅限于利用软件的方式,即利用硬件描述语言和EDA软件来完成对系统硬件功能的实现。
本课程设计正是利用EDA技术和MAXPULSII这个软件平台实现了乒乓球游戏的功能,乒乓球游戏电路是有A、B双方参赛,由裁判控制发“球”的三人乒乓球游戏机;它能完成自动裁判和自动计分并带有数字显示的模拟游戏机。
它具有构造简单、成本低、易操作,安全性强、无污染等特点。
1.1课题背景
1.1.1EDA技术的发展
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可行性,减轻了设计者的劳动强度。
电子设计技术的核心就是EDA技术,EDA技术已有30年的发展历程,大致可分为三个阶段。
70年代为计算机辅助设计(CAD)阶段,人们开始用进行IC版图编辑、PCB布局布线,取代了手工操作。
80年代为计算机辅助工程(CAE)阶段。
与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。
CAE的主要功能是:
原理图输入、逻辑仿真、电路分析、自动布局布线、PCB后分析。
90年代为电子系统设计自动化(EDA)阶段。
1.1.2硬件描述语言——VHDL
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,于1983年由美国国防部(DOD)发起创建,由IEEE(TheInstituteofElectricalandElectronicsEngineers)进一步发展并在1987年作为“IEEE标准1076”(IEEEStd1076)发布。
从此,VHDL成为硬件描述语言的业界标准之一。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的应用,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域已成为事实上的通用硬件描述语言。
专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL语言具有很强的电路描述和建模能力,能再多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。
它主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
。
VHDL是一种独立于实现技术的语言,它不受某一特定工艺的束缚,允许设计者在其使用范围内选择工艺和方法。
为了适应未来的数字硬件技术,VHDL还提供了将新技术引入现有设计的潜力。
VHDL语言的最大特点是描述能力极强,覆盖了逻辑设计的诸多领域和层次,并支持众多的硬件模型。
具体而言,VHDL较其他的硬件描述语言有如下优越之处:
(1)支持从系统级到门级电路的描述,同时也支持多层次的混合描述;描述形式可以是结构描述,也可以是行为描述,或者二者兼而有之。
(2)既支持自底向上(bottom-up)的设计,也支持自顶向下(top-down)的设计;既支持模块化设计,也支持层次化设计;支持大规模设计的分解和设计重用。
(3)既支持同步电路,也支持异步电路;既支持同步方式,也支持异步方式。
(4)支持传输延迟,也支持惯性延迟,可以更准确地建立复杂的电路硬件模型。
(5)数据类型丰富,既支持预定义的数据类型,又支持自定义的数据类型;VHDL是强类型语言,设计电路安全性好。
(6)支持过程与函数的概念,有助于设计者组织描述,对行为功能进一步分类。
(7)提供了将独立的工艺集中于一个设计包的方法,便于作为标准的设计文档保存,也便于设计资源的重用。
(8)VHDL语言的类属提供了向设计实体传送环境信息的能力。
(9)VHDL语言的断言语句可用来描述设计本身的约束信息,支持设计直接在描述中书写错误条件和特殊约束,不仅便于模拟调试,而且为综合化简提供了重要信息。
1.2复杂可编程逻辑器件简介
CPLD(ComplexProgrammableLogicDevice)复杂可编程逻辑器件,是从PAL和GAL器件发展出来的器件,相对而言规模大,结构复杂,属于大规模集成电路范围。
是一种用户根据各自需要而自行构造逻辑功能的数字集成电路。
其基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆将代码传送到目标芯片中,实现设计的数字系统。
CPLD主要是由可编程逻辑宏单元(MC,MacroCell)围绕中心的可编程互连矩阵单元组成。
其中MC结构较复杂,并具有复杂的I/O单元互连结构,可由用户根据需要生成特定的电路结构,完成一定的功能。
由于CPLD内部采用固定长度的金属线进行各逻辑块的互连,所以设计的逻辑电路具有时间可预测性,避免了分段式互连结构时序不完全预测的缺点。
历史上,可编程逻辑器件经历了从PROM(ProgrammableReadOlnyMemory)、PLA(ProgrammableLogicArrary)、PAL(ProgrammableArraryLogic)、可重复编程的GAL(GenericArraryLogic),到采用大规模集成电路技术EPLD,直至CPLD和FPGA的发展过程,在结构、工艺、集成度、功能、速度和灵活性方面都有很大的改进和提高。
它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产(一般在10,000件以下)之中。
几乎所有应用中小规模通用数字集成电路的场合均可应用CPLD器件。
CPLD器件已成为电子产品不可缺少的组成部分,它的设计和应用成为电子工程师必备的一种技能。
1.3MAX+plusII简介
MAX+pulsII是Altera提供的FPGA/CPLD开发集成环境,Altera是世界最大的可编程逻辑器件供应商之一。
MAX+pulsII界面友好,使用便捷,被誉为业界最易用易学的EDA软件。
MAX+plusII的设计过程由设计输入、项目编译、功能、时序仿真(项目校验)、编程/配置(项目编程)几部分组成。
其中常用的设计输入的方法有:
通过MAX+plusII图形编辑器,创建图形文件(.gdf);通过MAX+pluslI文本编辑器,使用VHDL语言,创建文本设计文件(.tdf);使用VHDL语言,创建文本文件(.vhd);使用VerilogHDL语言,创建文本文件(.v)。
MAX+plusII提供了原理图输入、文本输入(采用硬件描述语言)和波形输入等多种输入手段,并可以任意组合使用。
利用该工具所配备的编辑、编译、仿真、综合、芯片编程等功能,可将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如FPGA芯片),做成ASIC芯片。
用户首先对所做项目进行设计,明确设计目的、设计要求;然后利用原理图输入方式或文本输入方式进行设计输入;输入完成后,进行编译,若编译过程中发现错误,则检查设计输入,修改错误,直至没有错误发生;编译完成后,就可以进行仿真,检查设计是否达到设计要求,否则的话,还需重新检查设计输入;仿真结果达到要求后,就可以进行烧录,把设计程序下载到目的芯片中;最后把芯片放到实际系统中进行验证、测试。
MAX十PLUSII编器可以在PC机及各种工作站平台上运行,这使MAX十PLUSII成为工业界中唯一与平台和结构无关的可编程逻辑设计环境。
可编程逻辑器件和EDA技术给今天的硬件系统设计者提供了强有力的工具,使得电子系统的设计方法发生了质的变化。
现在,只要拥有一台计算机、一套相应的EDA软件和空白的可编程逻辑器件芯片,在实验室里就可以完成数字系统的设计和生产。
2.方案论证
2.1课题设计原理及内容
本文设计的是一个乒乓球游戏机的状态机。
利用VHDL,不需要按照传统的设计方法进行烦琐的状态分配、绘制状态、化简状态方程等,就可以简单地根据MDS图直接对状态机进行描述。
该设计可以实现的功能如下:
该设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
(1)用8个(或更多个)LED排成一条直线,以中点为界,两人乒乓游戏机是用8个发光二极管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动,在游戏机的两侧各设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。
(2)当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。
当甲方按动乒乓球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方方向依次点亮,代表乒乓球的移动。
当球过网后按照设计者规定的球位乙方就可以击球。
若乙方提前击球或者未击到球,则甲方得分。
然后重新发球进行比赛。
(3)设置自动记分电路,甲、乙双方各用7段译码管进行记分显示,每计满11分为1局,记分牌清零,重新开始新一局比赛。
2.2课题设计方案
根据设计要求,有以下两种方案可供选择
方案一:
采用原理图和文本输入两种方法
用8个发光二极管代表乒乓球台,中间两个发光二极管兼作乒乓球网,用点亮的发光二极管按一定的方向移动来表示球的运动。
在游戏机的两侧各设置两个开关,一个是发球开关(s1a,s1b),另一个是击球开关(s2a,s2b)。
甲乙两人按乒乓球比赛的规则来操作开关。
当甲方按动发球开关时s1a,靠近甲方的第一盏灯先亮,然后发光二极管由甲向乙依次点亮,代表乒乓球在移动。
当球过网后,按设计者规定的球位乙方就可以击球。
若乙方提前或没有击着球,则判乙方失分,甲方记分牌自动加分。
然后重新发球,比赛继续进行。
比赛一直进行到一方记分到11分,该局结束,记分牌清零,可以进行新的一轮比赛。
根据乒乓球游戏机的功能要求,,可以分成四个模块来实现,其中模块cornal为整个程序的核心,他实现了整个系统的全部逻辑功能;模块ch41在数码管的片选信号变化时,送出相应的数据,在这里由于乒乓比赛有双方A和B,因为满分为11分,故数码管的片选信号可以用000,001,100,101,来表征。
模块ch41a在数码管的片选信号变化时,送出相应的数据。
模块sel产生数码管的片选信号;
当sel模块产生为100时,送出d0,接cornal模块的AL。
当sel模块产生的为101时,送出d1,接cornal模块的AH。
当sel模块产生的为000时,送出d2,接cornal模块的BL。
当sel模块产生的为001时,送出d3,接cornal模块的BH。
模块disp是7段译码器。
各模块连接电路如下图所示
方案二:
采用文本输入的方法
用八个VHDL文件模拟一个乒乓球游戏电路的完整设计。
其中,tennis模块是顶层设计,在MAX+plusII中可设其为工程文件;ball是模拟乒乓球行进路径的发光管亮灯控制模块;在游戏中,以一排发光管交替发光指示乒乓球的行进路径,其行进的速度可由输入的时钟信号clk控制;board是乒乓板接球控制模块,即当发光管亮到最后一个的瞬间,若检测到若检测到对应的表示球拍的键信号,立即将“球”反向运行,如果此时没有接到键信号,将给出出错鸣叫,同是为对方记1分,并将记分显示出来;cou4和cou10分别是失球计数器的高低位技术模块;是乒乓球行进方向控制模块,主要由发球键控制;sound是失球提示发生模块。
2.3方案选择
对以上两种方案进行分析,方案二由于完全采用文本输入法设计,模块较多,程序及各部分内部结构相对复杂,不易于设计,如果设计不当,将导致测频结果精确度降低,在程序运行仿真阶段也会由于结构复杂而易出现错误。
方案一采用了文本和原理图两种输入方法进行设计,由于程序模块精简,各模块分工明确,设计起来思路比较清晰,原理图输入法使乒乓球游戏机的结构更加直观,能很好的模拟实际的乒乓球游戏,结构简单,功能齐全,让人一目了然。
综合以上原因,从实现难易,误差大小以及最终结果等各方面考虑,选择方案一来完成该实验。
根据方案一中乒乓球游戏电路的设计原理,本次方案运用VHDL编程实现数字显示,LED显示,计分电路以及7段数码管显示,完成实验。
3.乒乓球游戏机电路设计过程
3.1设计规划
根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数等于11时获胜,游戏结束,我们把设计流程规定如图3-1所示。
甲乙
否否
N
N
YY
YY
图3-1乒乓球游戏机设计流程
状态机设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第八盏灯亮状态”,“球向乙移动状态”,“球向甲移动状态”,“允许甲击球状态”,“允许乙击球状态”。
这是该程序中起决定作用的七个状态。
开始的时候处于“等待发球状态”,若甲发球则状态转移到“第一盏灯亮状态”,若乙发球则转移到“第八盏灯亮状态”,具体说明以甲球为例。
若发球后乙没有提前击球----规定球过网就可以球,那么状态机从“第一盏灯亮状态”转移到“球向乙移动状态”。
若在“球向乙移动状态”乙仍然没有提前击球,状态就转移到“允许乙击球状态”,在此状态下,如果乙击球了,那么状态就转移到“球向甲移动状态”。
在“第一盏灯亮状态”,“球向乙移动状态”中,如果乙击球了,就算提前击球,这样甲得分,状态转移到“等待发球状态”等待发球,“球向甲移动状态”之后的过程和前面的过程只不过是甲乙角色的调换而已。
状态转移规则都是一样的。
图3.2乒乓球游戏机原理图
3.2各模块原理及程序
该乒乓球游戏电路的设计主要包括的模块与内容有:
乒乓球游戏电路实体的设计,游戏电路编程的实现,记分译码器的设计以及构造体的设计。
控制模块cornal分为两个进程,第一个进程实现逻辑功能,第二个进程实现整数的记分转换为十进制,便于译码显示。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcornalIS
PORT(clr,af,aj,bf,bj,clk:
INSTD_LOGIC;
shift:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
ah,al,bh,bl:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
awin,bwin:
OUTSTD_LOGIC);
ENDcornal;
ARCHITECTUREbehaveOFcornalIS
SIGNALamark,bmark:
INTEGER;
BEGIN
PROCESS(clr,clk)
VARIABLEa,b:
STD_LOGIC;
VARIABLEshe:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFclr='0'THEN
a:
='0';
b:
='0';
she:
="00000000";
amark<=0;
bmark<=0;
ELSIFclk'EVENTANDclk='1'THEN
IFa='0'ANDb='0'ANDaf='0'THEN
a:
='1';
she:
="10000000";
ELSIFa='0'ANDb='0'ANDbf='0'THEN
b:
='1';
she:
="00000001";
ELSIFa='1'ANDb='0'THEN
IFshe>8THEN
IFbj='0'THEN
amark<=amark+1;
a:
='0';
b:
='0';
she:
="00000000";
ELSE
she:
='0'&she(7DOWNTO1);
ENDIF;
ELSIFshe=0THEN
amark<=amark+1;
a:
='0';
b:
='0';
ELSE
IFbj='0'THEN
a:
='0';
b:
='1';
ELSE
she:
='0'&she(7DOWNTO1);
ENDIF;
ENDIF;
ELSIFa='0'ANDb='1'THEN
IFshe<16ANDshe/=0THEN
IFaj='0'THEN
bmark<=bmark+1;
a:
='0';
b:
='0';
she:
="00000000";
ELSE
she:
=she(6DOWNTO0)&'0';
ENDIF;
ELSIFshe=0THEN
bmark<=bmark+1;
a:
='0';
b:
='0';
ELSE
IFaj='0'THEN
a:
='1';
b:
='0';
ELSE
she:
=she(6DOWNTO0)&'0';
ENDIF;
ENDIF;
ENDIF;
ENDIF;
shift<=she;
ENDPROCESS;
PROCESS(clk,clr,amark,bmark)
VARIABLEaha,ala,bha,bla:
STD_LOGIC_VECTOR(3DOWN