




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书 题目:乒乓球游戏电路设计(双打) 姓 名: 院 系: 专业班级: 学 号: 指导教师: 成 绩: 时间: 2014 年 6 月 9日至 2014 年 6 月 13 日 课 程 设 计 任 务 书 题 目 乒乓球游戏电路设计(双打) 专业、班级 学号 37-42 姓名 主要内容、基本要求、主要参考资料等: 根据乒乓球双打的规则,利用硬件编程语言VHDL或者Verilog-HDL实现乒乓球游戏电路的设计。首先给出状态机的设计,然后据此给出完成控制电路所需要的设计模块;给出硬件编程语言的实现,并进行仿真;给出下载电路的设计,设计为2种下载方法,其中一种必须为JTAG;时设计者报告不允许雷同。参考资料:1、潘松、黄继业EDA技术及其应用(第四版)科学出版社 20092、数字信号处理的教材完 成 期 限: 指导教师签名: 课程负责人签名: 年 月 日目录摘要I1.总体设计思想11.1基本原理11. 2设计框图12.设计步骤和调试过程32.1 总体设计电路32.2 模块设计和相应模块程序32.2.1 乒乓球游戏机实体的设计32.2.2 状态机编程实现42.2.3 记分译码器的设计62.2.4 构造体的设计82.3 仿真及仿真结果分析102.4 实验调试结果12总结13参考资料14附录1510摘要 VHDL是甚高速集成电路硬件描述语言。目前,VHDL已成为许多设计自动化工具普遍采用的标准化硬件描述语言。VHDL语言功能性强,覆盖面广,灵活性高,具有很好的实用性。本文设计一个基于VHDL的乒乓游戏机,乒乓游戏机由状态机、记分器、译码显示器与按键去抖等部分所组成。通过对各部分编写VHDL程序,然后进行编译、仿真、逻辑综合、逻辑适配,最后进行编程下载,并且通过GW48型EDA实验箱的验证,实现乒乓游戏机的基本功能。关键词:VHDL;GW48;乒乓游戏机1乒乓球游戏电路设计1.总体设计思想1.1基本原理根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数大于21时获胜,游戏结束,我们把设计流程规定如图1.1所示。状态机设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第八盏灯亮状态”,“球向甲乙移动状态”,“ 球向丙丁移动状态”,“允许甲或乙击球状态”,“允许丙或丁击球状态”。这是该程序中起决定作用的七个状态。开始的时候处于“等待发球状态”,若甲或乙发球则状态转移到“第一盏灯亮状态”,若丙或丁发球则转移到“第八盏灯亮状态”,具体说明以甲球为例。若发球后丙或丁没有提前击球-规定球移动到对方第一个发光二极管时允许击球,那么状态机从“第一盏灯亮状态”转移到“球向丙丁移动状态”。若在“球向丙丁移动状态”丙或丁仍然没有提前击球,状态就转移到“允许丙或丁击球状态”,在此状态下,如果丙或丁击球了,那么状态就转移到“ 球向甲乙移动状态”。在“第一盏灯亮状态”, “球向丙丁移动状态”中,如果丙或丁击球了 ,就算提前击球,这样甲乙得分,状态转移到“等待发球状态”等待发球,“ 球向甲乙移动状态”之后的过程和前面的过程只不过是甲或乙和丙或丁角色的调换而已。状态转移规则都是一样的。图1.2给出了乒乓球游戏机的原理图。1.2设计框图根据需要设计出游戏流程图和乒乓球原理图:游戏开始 正确接发球? 甲或乙丙或丁 否 否丙丁方胜利甲乙方胜利甲乙方加分丙丁方加分大于21?大于21? N N Y Y游戏结束图1-1设计流程图等待发球 甲乙得分 丙丁得分 甲或乙发球 丙或丁发球第一盏灯亮第八盏灯亮 甲或乙击球 丙或丁击球球向甲乙移动动球向丙丁移动 甲或乙击球 丙或丁击球允许甲或乙发球允许丙或丁发球 甲乙没击球 丙丁没击球或者击球错误或者击球错误图1-2 乒乓球游戏机原理图 2.设计步骤和调试过程2.1 总体设计电路该乒乓球游戏机的设计主要包括的模块与内容有:乒乓球游戏机实体的设计,游戏机编程的实现,记分译码器的设计以及构造体的设计。直接对状态机进行描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELSE语句实现。以下我们就详细解析各个板快的设计与实现。2.2 模块设计和相应模块程序2.2.1 乒乓球游戏机实体的设计设计该乒乓球游戏机的输入与输出端口。首先考虑输入端口,一般应该设置一个异步置位端口reset,用于在系统不正常时回到初始状态:两个发球输入端serve1和serve2,逻辑1分别表示甲乙丙丁的发球;四个个击球输入端hit1,hit2,hit3和hit4逻辑1分别表示甲丙乙丁击球;一个开始游戏按钮startbutton,处于逻辑1表示可以游戏;还得有一个时钟输入端口clk。其次考虑输出端口,芯片应该有8个输出端口来控制8个发光二极管,输出逻辑1即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分,就得用到4个七段译码器,每方用到2个,可以表示0到21的数字,每个七段译码器需要芯片的7个输出端口来控制,总共28个输出端口。实体的设计如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; /引用必要的库函数和包集合entity pingponggame is -实体名为pingponggame port(reset:int std_logic;clk:int std_logic;startbutton:int std_logic; -开始游戏输入端口serve:in std_logic_vector(1 to 2); -发球输入端口hit1,hit2,hit3,hit4 a,b:int std_logic; -甲乙和丙丁的击球输入端口-控制8个发光二极管的输出端口Llight:out std_logic_vector(1 to 8); score11,score12,score21,score22:out std_logic_vector(1 to 7)); -4个用于控制4个7段译码器的输出端口end pingponggame;2.2.2 状态机编程实现 状态机设置了7个状态,分别是waitserve, light1on, ballmoveto2, Allow24hit,light8on,ballmoveto1,和allow13hit它们代表的具体数值依次是0到6。在波形模拟图中是用数值来表示状态的。下图是各状态相互转换的转换图: 在整个程序中,状态机起的是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,如记分部分,发光二极管部分。乒乓球游戏机中有两个计数器count1和count2,分别记忆甲乙和丙丁的得分,用发光二极管的轮流发光表示球的移动轨迹。状态机的进程如下: process(clk) -clk作为敏感信号触发进程begin -进程开始if reset=1 then -异步置位i=0;count100000;count2=00000;a=0;b=0;elsif clkevent and clk=1 then -当处于时钟inclock上升沿时 if count1=10101or count2=10101theni=0;count100000;count2=00000;elsif startbutton+0 theni=0;count100000;count2 -进程处于等待发球状态case serve iswhen 00”or”01”= i=1;state i=8;state i -进程处于第一盏灯亮状态i=2if (hit2=1) or (hit4=1 ) theni=0;count1=count1+1;state=waitserve; elsestate -进程处于第八盏灯亮状态i=7;if (hit1=1) or (hit3=1) theni=0;count2=count2+1;state=waitserve;elsestate -进程处于球向丙丁移动状态if (hit1=1) or ( hit3=1) theni=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=(allow1hit or allow3hit);else i -进程处于球向甲乙移动状态if (hit2=1) or (hit4=1) theni=0;ount1=count1+1;state=waitserve;elsif i=7 then i=8;state=(allow2hit or allow4hit);else i -进程处于允许甲或乙击球状态if (hit1=1) and (a=0)then i=2;state=ballmoveto2;a=1;elsif (hit3=1) and (a=1) then i=2;state=ballmoveto2;a=0;else count2=count2+1;i=0;state -进程处于允许丙或丁击球状态if (hit2 =1) and (a=0) then i=7;state=ballmoveto1;a=1;elsif (hit4=1) and (a=1) then i=2;state=ballmoveto2;a=0;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;2.2.3 记分译码器的设计七段译码器是在数学电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。记分译码器(mydecoder):由于记分需要显示出来,所以要使用七段译码器。而状态机中的记分是由5位二进制码来表示的,即count1和count2。以下程序就是实现从5位二进制码转换成七段译码显示。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsingned.all; entity mudecoder isport(binaryin:int std_logic_vector(1 to 5); -5位二进制码的输入端口bcdout1:out std_logic_vector(1 to 7); -七段译码器输出端口bcdout2:out std_logic_vector(1 to 7);end mydecoder;architecture m of mydecoder issignal tembinaryin:std_logic_vector(1 to 5);beginprocess(binaryin)begintembinaryinbcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=1111110;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=0110000;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2bcdout1=1101101;bcdout2d,count2=e,hit1=red1,hit2=green1,hit3=red2,hit4=green2,clk=clk1,startbutton=lopen,serve=fire,reset=reset1,light=Llight);u2 :mydecoder port map(binaryin=d,bcdout1=score11,bcdout2=score12);u3 :mydecoder port map(binaryin=e,bcdout1=score21,bcdout2=score22);end ;从构造体设计中可以看到,控制整个乒乓球游戏机运转的就是状态机进程,它队各个外围部分起控制作用。它是整个程序的核心,起到一个中心控制器的作用。而外围的部分,比如分数显示,球的轨迹,都是通过它传出的信号来控制。状态机中的i信号和count1,count2信号的变化同时就可以影响到外围的显示部分-发光二极管和七段译码器,从而表示出当时的乒乓球位置和双方分数情况。2.3 仿真及仿真结果分析编译完成后进行仿真波形图和原理图在仿真图中,看到serve数组为1,代表丙或丁发球。I从8开始依次递减计数,控制发光管亮暗light信号也随着i的数值变化,由light端口输出的高电平驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。可以看到,在甲或乙击球的时候没有击球,也就是hit1或hit3在state状态6的时候没有高电平1输入,则丙丁得分,count2由0变1,score22的值随之变化。从最后一行state值的变化,可以清楚分析状态转移。甲在state为状态6的时候击球了,在图上hit1在此时刻出现高电平,看到state转移到了状态2。当到了状态3丙或丁没有击球,所以甲乙得分了,count1由0变到1,而七段译码器随之改变。在图4.5中可以清楚地看到球的移动轨迹。在不允许甲乙击球的状态下,即state处在状态5时,hit1或hit3输入逻辑1,表示甲或乙击球了,所以丙丁得分。2.4 实验调试结果通过调试我们可以观察到,8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。设置自动记分电路,甲乙和丙丁双方各用2位数码管进行记分显示,每计满21分为1局。甲乙和丙丁双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球有效。 总结在课题设计中,通过使用Quartus这个完全集成化、易学易用的可编程逻辑设计环境,利用VHDL语言设计的乒乓球游戏机,较成功的完成了预期的效果,能够正确判断与显示乒乓球的位置,并能自动裁判和记分的装置。在具体设计过程中还需要改进的是控制系统的纠错功能。由于时间关系,系统功能实现不够完善,这些都需要不断的改进和补充。这次课程设计总的说来收获很大。在两位同学的帮助下才顺利完成此次课题。此外,也学会了使用Quartus软件。这次课程设计虽然短暂。但却是我独立自主的从设计电路到得出结论。书本上的内容第一次完完全全的综合运用。在设计过程中。遇到了书本中不曾学到的知识,经过请教老师和同学,以及查阅相关的资料,最终攻克。12参考资料1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 刘艳. EDA 技术在数字系统电路设计实验中的应用J. 实验室研究与探索,2002,21(3): 632643 徐颖.Protel 99 SE EDA技术及应用M.西安:机械工业出版社.20054 杨恒,卢飞成. FPGA/VHDL快速工程实践入门与提高M.北京航空航天大学出版社.20035甘历.VHDL应用与开发实践M.科学出版社.2006侯伯亨.VHDL硬件描述语言与数字逻辑电路设计M.西安:西安电子科技大学出版社,1999:27.7潭会生,张昌凡.EDA技术及应用M.西安:西安电子科技大学出版社,20048王振红.VHDL数字电路设计与应用实践教程M.北京:机械工业出版社,20051附录复合语句:use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ying isport(reset1,clk1:in std_logic;red1,red2,green1,green2:in std_logic; lopen:in std_logic; fire:in std_logic_vector(1 to 2);Llight:out std_logic_vector(1 to 8);score11,score12,score21,score22:out std_logic_vector(1 to 7);end ying;architecture game of ying iscomponent pingponggameport(clk,reset :in std_logic;startbutton,hit1,hit2,hit3,hit4:in std_logic;serve:in std_logic_vector( 1 to 2 );light:out std_logic_vector(1 to 8);count1,count2 : buffer std_logic_vector(1 to 5);end component ;component mydecoderport(binaryin : in std_logic_vector(1 to 5); -5位二进制码的输入端口bcdout1 : out std_logic_vector(1 to 7); -七段译码器输出端口bcdout2 : out std_logic_vector(1 to 7);end component;signal d,e:std_logic_vector(4 downto 0);beginu1:pingponggame port map(count1=d,count2=e,hit1=red1,hit2=green1,hit3=red2,hit4=green2,clk=clk1,startbutton=lopen,serve=fire,reset=reset1,light=Llight);u2 :mydecoder port map(binaryin=d,bcdout1=score11,bcdout2=score12);u3 :mydecoder port map(binaryin=e,bcdout1=score21,bcdout2=score22);end ;状态机:ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity pingponggame isport(clk,reset :in std_logic;startbutton,hit1,hit2,hit3,hit4:in std_logic;serve:in std_logic_vector( 1 to 2 );1count1,count2 : buffer std_logic_vector(1 to 5);light:out std_logic_vector(1 to 8);end pingponggame;architecture one of pingponggame istype pingponggame is (waitserve, light1on, ballmoveto2, allow24hit,light8on,ballmoveto1,allow13hit); signal state : pingponggame;signal a,b: integer range 0 to 1;signal i: integer range 0 to 8;begin process(reset,hit1,hit2,hit3,hit4,clk,a,b,i)begin -进程开始if reset=1 then -异步置位i=0;count1=00000;count2=00000;a=0;b=0; elsif clkevent and clk=1 then -当处于时钟inclock上升沿时 if count1=10101or count2=10101theni=0;count1=00000;count2=00000;elsif startbutton=0 theni=0;count1=00000;count2 -进程处于等待发球状态case serve iswhen (01) = i=1;state i=8;state i -进程处于第一盏灯亮状态i=2;if (hit2=1) or (hit4=1) theni=0;count1=count1+1;state=waitserve; elsestate -进程处于第八盏灯亮状态i=7;if (hit1=1) or (hit3=1) theni=0;count2=count2+1;state=waitserve;elsestate - if (hit1=1) or ( hit3=1) then i=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow13hit;else i - if (hit2=1) or (hit4=1) theni=0;count1=count1+1;state=waitserve;elsif i=7 then i=8;state=allow24hit;else i - if (hit1=1) or (hit3=1) then i=2;state=ballmoveto2;a=1;elsif (hit3=1) and (a=1) then i=2;state=ballmoveto2;a=0;else count2=count2+1;i=0;state - if (hit2 =1) and (b=0) then i=7;state=ballmoveto1;b=1;elsif (hit4=1) and (b=1) then i=2;state=ballmoveto2;b=0;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;light=10000000 when i=1 else 01000000 when i=2 else 00100000 when i=3 else00010000 when i=4 else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司级安全培训时长课件
- 《蘑菇家园》课件讲解课
- 《荷叶圆圆》课件顾志宏
- 临时供用电合同书范本6篇
- 护理职业人物访谈
- 看守所职能讲解
- 沟通在护理工作中的应用
- 2025年初级招采人员考试(招标采购专业实务)在线模拟题库及答案及答案(广东省)
- 农田买卖合同5篇
- 简易年终工作汇报
- 帮助卧床老年人使用便器排便课件
- 勿忘国耻教学课件
- 【高考英语精品专题】必修1 Unit 1 Life Choices-高考英语-一轮总复习备考方略课件PPT(新教材北师大版)
- 中国传媒大学-新媒体概论(刘行芳)-课件
- 医学放射卫生相关法律法规ppt培训课件
- 《中国音乐发展简史》PPT课件
- SLZ 549-2012 用水审计技术导则(试行)
- 颈内动脉动脉瘤临床路径(2010年版)
- 车用驱动电机原理与控制基础PPT课件(200页)
- 无砟轨道底座板首件施工总结(最新)
- 发酵工业清洁生产技术(共82页).ppt
评论
0/150
提交评论