欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    EDA技术课程设计乒乓球比赛游戏机 .doc

    • 资源ID:3037712       资源大小:104.50KB        全文页数:14页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    EDA技术课程设计乒乓球比赛游戏机 .doc

    东 北 石 油 大 学课 程 设 计课 程 EDA技术课程设计 题 目 乒乓球比赛游戏机 院 系 电子科学学院 专业班级 电子信息工程 学生姓名 学生学号 070901140438 指导教师 2011年 3 月11日东北石油大学课程设计任务书课程 EDA技术课程设计题目 乒乓球比赛游戏机专业 电子信息工程 姓名 学号 070901140438主要内容、基本要求、主要参考资料等主要内容:设计一个乒乓球游戏机,比赛由甲乙双方和裁判3人构成,能模拟比赛的基本过程和规则并能自动裁判和记分。基本要求:1、设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。2、用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。3、当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。4、设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。5、甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2011.3.11 指导教师 专业负责人 2011年 3月7日一、总体设计思想1.基本原理根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数大于21时获胜,游戏结束,我们把设计流程规定如图1.1所示。状态机设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第八盏灯亮状态”,“球向乙移动状态”,“ 球向甲移动状态”,“允许甲击球状态”,“允许乙击球状态”。这是该程序中起决定作用的七个状态。开始的时候处于“等待发球状态”,若甲发球则状态转移到“第一盏灯亮状态”,若乙发球则转移到“第八盏灯亮状态”,具体说明以甲球为例。若发球后乙没有提前击球-规定球移动到对方第一个发光二极管时允许击球,那么状态机从“第一盏灯亮状态”转移到“球向乙移动状态”。若在“球向乙移动状态”乙仍然没有提前击球,状态就转移到“允许乙击球状态”,在此状态下,如果乙击球了,那么状态就转移到“ 球向甲移动状态”。在“第一盏灯亮状态”, “球向乙移动状态”中,如果乙击球了 ,就算提前击球,这样甲得分,状态转移到“等待发球状态”等待发球,“ 球向甲移动状态”之后的过程和前面的过程只不过是甲乙角色的调换而已。状态转移规则都是一样的。图1.2给出了乒乓球游戏机的原理图。2.设计框图游戏开始正确接发球?大于21? 甲 乙 否 否大于21?乙方胜利甲方胜利甲方加分乙方加分 N N Y Y游戏结束图1.1设计流程图等待发球 甲得分 乙得分 甲发球 乙发球第一盏灯亮第八盏灯亮允许甲发球球向甲移动 乙击球 甲击球球向乙移动 乙击球 甲击球允许乙发球 乙没击球 甲没击球图1.2 乒乓球游戏机原理图二、设计步骤和调试过程1、总体设计电路该乒乓球游戏机的设计主要包括的模块与内容有:乒乓球游戏机实体的设计,游戏机编程的实现,记分译码器的设计以及构造体的设计。直接对状态机进行描述,所有的状态均可表达为CASE_WHEN结构中的一条CASE语句,而状态的转移则通过IF_THEN_ELSE语句实现。以下我们就详细解析各个板快的设计与实现。2、模块设计和相应模块程序(1)乒乓球游戏机实体的设计设计该乒乓球游戏机的输入与输出端口。首先考虑输入端口,一般应该设置一个异步置位端口reset,用于在系统不正常时回到初始状态:两个发球输入端serve1和serve2,逻辑1分别表示甲方和乙方的发球;两个击球输入端hit1和hit2,逻辑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:int std_logic; -甲和乙的击球输入端口-控制8个发光二极管的输出端口light:out std_logic_vector(1 to 8); score11,score12,score21,score22:out std_logic_vector(1 to 7)); -4个用于控制4个7段译码器的输出端口end pingponggame;(2)状态机编程实现 状态机设置了7个状态,分别是waitserve, light1on, ballmoveto2, Allow2hit,light8on,ballmoveto1,和allow1hit它们代表的具体数值依次是0到6。在波形模拟图中是用数值来表示状态的。 在整个程序中,状态机起的是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,如记分部分,发光二极管部分。乒乓球游戏机中有两个计数器count1和count2,分别记忆甲和乙的得分,用发光二极管的轮流发光表示球的移动轨迹。状态机的进程如下:process(clk) -clk作为敏感信号触发进程begin -进程开始if reset='1' then -异步置位i<=0;count1<"00000"count2<="00000"elsif clk'event and clk='1' then -当处于时钟inclock上升沿时 if count1="10101"or count2="10101"theni<=0;count1<"00000"count2<="00000"elsif startbutton+'0' theni<=0;count1<"00000"count2<="00000"else -以下case语句是程序中最关键的状态机部分case state iswhen waitserve=> -进程处于等待发球状态case serve iswhen "10'=> i<=1;state<=light1on;when "01'=> i<=8;state<=light8on;when "i1"=>i<=0;when others=> i<=0;end case;when light1on=> -进程处于第一盏灯亮状态i<=2if hit2='1' theni<=0;count1<=count1+1;state<=waitserve; elsestate<=ballmoveto2;end if;when light8on=> -进程处于第八盏灯亮状态i<=7;if hit='1' theni<=0;count2<=count2+1;state<=waitserve;elsestate<=ballmoveto1;end if; when ballmoveto1=> -进程处于球向乙移动状态if hit1='1' theni<=0;count2<=count2+1;state<=waitserve;elsif i=2 then i<=1;state<=allow1hit;else i<=i-1;end if;when ballmoveto2=> -进程处于球向乙移动状态if hit2='1'theni<=0;ount1<=count1+1;state<=waitserve;elsif i=7 then i<=8;state<=allow2hit;else i<=i+1;end if;when allow1hit=> -进程处于允许甲击球状态if hit1='1' then i<=2;state<=ballowto2;else count2<=count2+1;i<=0;state<=waitserve;end if;when allow2hit=> -进程处于允许乙击球状态if hit2='1'then i<=7;state<=ballmoveto1;else count1<=count1+1;i<=0;state<=waitserve;end if;end case;end if;end if;end process;(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)begintembinaryin<=binaryin;case tembinaryin is -把0到9的5位二进制码转换成七段译码when"00000"=>bcdout1<="1111110"bcdout2<="1111110"when"00001"=>bcdout1<="1111110"bcdout2<="0110000"when"00010"=>bcdout1<="1111110"bcdout2<="1101101"when"00011"=>bcdout1<="1111110"bcdout2<="1111001"when"00100"=>bcdout1<="1111110"bcdout2<="0110011"when"00101"=>bcdout1<="1111110"bcdout2<="1011011"when"00110"=>bcdout1<="1111110"bcdout2<="1011111"when"00111"=>bcdout1<="1111110"bcdout2<="1110000"when"01000"=>bcdout1<="1111110"bcdout2<="1111111"when"01001"=>bcdout1<="1111110"bcdout2<="1111011"-把10到19的5位二进制码转换成七段译码when"01010"=>bcdout1<="0110000"bcdout2<="1111110"when"01011"=>bcdout1<="0110000"bcdout2<="0110000"when"00000"=>bcdout1<="0110000"bcdout2<="1101101"when"01100"=>bcdout1<="0110000"bcdout2<="1111001"when"01101"=>bcdout1<="0110000"bcdout2<="0110011"when"01111"=>bcdout1<="0110000"bcdout2<="1011011"when"10000"=>bcdout1<="0110000"bcdout2<="1011111"when"10001"=>bcdout1<="0110000"bcdout2<="1110000"when"10010"=>bcdout1<="0110000"bcdout2<="1111111"when"10011"=>bcdout1<="0110000"bcdout2<="1111011" -把20到21的5位二进制码转换成七段译码when"10100"=>bcdout1<="1101101"bcdout2<="1111110"when"10101"=>bcdout1<="1101101"bcdout2<="0110000" -如果5位二进制码不在0到21范围内,那么两个七段译码器都显示0when others=>bcdout1<="1101101"bcdout2<="1111110"end case;end process;end m; 这个记分译马电路是针对乒乓球游戏机的特点进行的特别设计,采用的是全部列举的方法。(4)构造体的设计该构造体紧跟在实体设计之后,这样就完成了数字乒乓球游戏机的VHDL源程序编写。rchitecture game of pingponggame istype pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);-设置7个状态,为枚举数据类型,记为pingpong signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2:std_logic_vector(1 to 5):="00000" -内部计数器,是5位二进制变量component mydecoder isport(binaryin: in std_logic_vector(1 to 5);bcdout1:out std_logic_vector(1 to 7);bcdout2:out std_logic_vector(1 to 7););end component; -调用记分译码器beginprocess(clk) -状态机进程beginend process; -进程处i信号控制发光二极管的亮暗light<="10000000"when(i=1) else"01000000" when(i=2) else"00100000" when(i=3) else"00010000" when(i=4) else"00001000" when(i=5) else"00000100" when(i=6) else"00000010" when(i=7) else"00000001" when(i=8) else"00000000" -其他情况所有发光二极管都暗u0:mydecoder port map(count1,score11,score12); -用七段译码器显示甲的分数u1:mydecoder port map(count2,score21,score22); -用七段译码器显示乙的分数end game;从构造体设计中可以看到,控制整个乒乓球游戏机运转的就是状态机进程,它队各个外围部分起控制作用。它是整个程序的核心,起到一个中心控制器的作用。而外围的部分,比如分数显示,球的轨迹,都是通过它传出的信号来控制。状态机中的i信号和count1,count2信号的变化同时就可以影响到外围的显示部分-发光二极管和七段译码器,从而表示出当时的乒乓球位置和双方分数情况。3、仿真及仿真结果分析编译完成后进行仿真(如下图)在仿真图中,看到serve数组为1,代表乙发球。I从8开始依次递减计数,控制发光管亮暗light信号也随着i的数值变化,由light端口输出的高电平驱动芯片以外的发光二极管使之点亮,这样就可以通过发光二极管模拟乒乓球的运动轨迹。可以看到,在甲该击球的时候没有击球,也就是hit1在state状态6的时候没有高电平1输入,则乙得分,count2由0变1,score22的值随之变化。从最后一行state值的变化,可以清楚分析状态转移。甲在state为状态6的时候击球了,在图上hit1在此时刻出现高电平,看到state转移到了状态2。当到了状态3乙没有击球,所以甲得分了,count1由0变到1,而七段译码器随之改变。在图4.5中可以清楚地看到球的移动轨迹。在不允许甲击球的状态下,即state处在状态5时,hit1输入逻辑1,表示甲击球了,所以乙得分。4、实验调试结果通过调试我们可以观察到,8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球有效。三、结论及心得体会在课题设计中,通过使用Quartus这个完全集成化、易学易用的可编程逻辑设计环境,利用VHDL语言设计的乒乓球游戏机,较成功的完成了预期的效果,能够正确判断与显示乒乓球的位置,并能自动裁判和记分的装置。在具体设计过程中还需要改进的是控制系统的纠错功能。由于时间关系,系统功能实现不够完善,这些都需要不断的改进和补充。这次课程设计总的说来收获很大。在最初的设计过程中,一共整理出好几个方案。但在实际的过程中发现,设计的情况和实际中还是有些差异的,通过比较得出最优方案。此外,也学会了使用Quartus软件。这次课程设计虽然短暂。但却是我独立自主的从设计电路到得出结论。书本上的内容第一次完完全全的综合运用。在设计过程中。遇到了书本中不曾学到的知识,经过请教老师和同学,以及查阅相关的资料,最终攻克。参考资料1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 刘艳. EDA 技术在数字系统电路设计实验中的应用J. 实验室研究与探索,2002,21(3): 632643 徐颖.Protel 99 SE EDA技术及应用M.西安:机械工业出版社.2005 4 杨恒,卢飞成. FPGA/VHDL快速工程实践入门与提高M.北京航空航天大学出版社.20035甘历.VHDL应用与开发实践M.科学出版社.2003东北石油大学课程设计成绩评价表课程名称EDA技术课程设计题目名称乒乓球比赛游戏机学生姓名刘湘龙学号070901140438指导教师姓名职称序号评价项目指 标满分评分1工作量、工作态度和出勤率按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。202课程设计质量课程设计选题合理,计算过程简练准确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。453创新工作中有创新意识,对前人工作有一些改进或有一定应用价值。54答辩能正确回答指导教师所提出的问题。30总分评语:指导教师: 2011年 3 月 11 日

    注意事项

    本文(EDA技术课程设计乒乓球比赛游戏机 .doc)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开