1、湖南涉外经济学院 课程设计报告 课程名称:EDA技术与应用 报告题目:乒乓球比赛游戏机的设计 学生姓名: 所在学院: 专业班级: 学生学号: 指导教师: 2014年12月30日 课程设计任务书 报告题目 乒乓球比赛游戏机的设计 完成时间 2014. 12.30 学生姓名 专业班级 指导教师 职称 总体设计要求和技术要点 (1) 设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。 (2) 用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LE
2、D依此从左到右,或从右到左,其移动的速度应能调节。 (3) 当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。 (4) 一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。 (5) 设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。 (6) 甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。 (7) 按《湖南涉外经济学院课程设计管理办法》要求提交课程设计报告。 工作
3、内容及时间进度安排 第17周: 周1---周3 :立题、论证方案设计 周4---周5 :预答辩 第18周: 周1---周3 :仿真实验7 周4---周5 :验收答辩 课程设计成果 1.与设计内容对应的软件程序 2.课程设计总结报告 摘要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的16个LED表示乒乓球球台和乒乓球,用数码管模拟显示器,显示比赛局数比分和每局玩家得分的电路。电路并不复杂,整体分为两个模块:一,游戏主模块;二,计分显示模块。主模块完成用LED表示球和球台并对玩家是否击球、是否犯规做出判断,并且将两位玩家的游戏得分进行输出。计分显示模块完成对局数比分的运
4、算,显示局数比分和每局游戏玩家的得分。实现中采用Verilog HDL描述、ModelSim进行功能仿真、Quartus II 进行逻辑综合和适配下载,选用CycloneIII系列EP3C80F484C8型号的芯片上实现。在此过程中,完整地建立了测试平台,完成了功能和时序仿真,从而保证了设计的功能与时序的正确性。 关键词:Verilog HDL;FPGA;乒乓球游戏 目录 一、概述 1 二、设计的目的 1 三、总体设计思想 1 3.1 基本原理 1 3.2 设计框图 2 四、设计步骤和调试过程 2 4.1 总体
5、设计电路 2 4.2 乒乓球各模块的设计 3 4.2.1 控制模块的设计 3 4.2.2 送数据模块的设计 6 4.2.3 产生数码管片选信号模块的设计 7 4.2.4 7段译码器模块的设计 9 五、波形仿真与实验调试 10 5.1系统的波形仿真 10 5.2 实验调试结果 12 六、结论与心得 13 七、参考文献 14 一、概述 乒乓球运动是一项受大众非常喜爱的运动,它是一项集健身性,竞技性和娱乐性为一体的运动。乒乓球是一项非常受大众喜欢的运动,几十年来,乒乓球运动在中国迅速兴起,很重要的原因就是对客观条件要求不高,随时
6、随处就能玩起来。乒乓球运动越来越多地被作为增强智力、提高工作效率以及保健、医疗和康复的极佳手段而引起各方面的重视。如今,人们生活太忙碌,很多的人只能通过网络来玩乒乓球游戏,而乒乓球游戏机正好解决了人们的困扰。它简单易行,只要简简单单几个手指的操作就能达到同样娱乐跟锻炼的效果。 二、设计的目的 这次的设计主要是学习使用EDA集成设计软件MxplussII,电路描述,综合,模拟过程。掌握使用EDA工具设计乒乓游戏机的的设计思路和设计方法。体会使用EDA综合过程中电路设计方法和设计思路的不同。 三、总体设计思想 3.1 基本原理 用8个LED排成一条直线,以中点为界,两边各代
7、表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。 3.2 设计框图 图1 设计流程图
8、 图2 乒乓球游戏机原理图 四、设计步骤和调试过程 4.1 总体设计电路 用8个发光二极管代表乒乓球台,在游戏机的两侧设置两个开关,一个是发球开关,一个是击球开关,甲方按动发球开关时,靠近甲方的第一盏灯亮,然后发光二极管由甲向乙依次点亮,代表乒乓球在移动。当球过网后,乙方就可击球。若乙方提前击球或没击中球,则判乙方失分,甲方自动加分,重新发球比赛继续进行到一方记分到21分,该局结束,记分牌清零,可以开始新的一局比赛。 使用VHDL进行电路系统设计,利用PLD来实现控制器的硬件电路。 图3 乒乓游戏机的电路框图 4.2 乒乓球各模块的设计 4.2.1 控制模
9、块的设计 模块corna 分两个进程,第一个进程实现逻辑功能,第二个进程将整数的记分转换为十进制数,便于译码显示。Af,aj,bf,bj分别为a方发球键和接球键,b方发球键和接球键,shift表示球所在的位置。其vhdl程序描述如下: Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity cornal is Port(clr,af,aj,bf,bj,clk:in std_logic; Shift:out std_logic_vector(7 downto
10、 0); ah,al,bh,bl:out std_logic_vector(3 downto 0); awin,bwin:out std_logic); End cornal; Architecture bahave of cornal is Signal amark,bmark:integer; Begin Process(clr,clk) Variable a,b:std_logic; Variable she:std_logic_vector(7 downto 0); Begin If clr='0' then a:='0'
11、 b:='0'; she:="00000000" ; amark<=0; bmark<=0; elsif clk'event and clk='1' then if a='0' and b='0' and af='0' then --a方发球 a:='1'; she:="10000000"; elsif a='0' and b='0' and bf='0' then --b方发球 b:='1'; she:="00000001"; elsif a='1'and b='0' then --a方发球后 if she>8 th
12、en if bj='0' then --b方过网击球 amark<=amark+1; --a方加一分 a:='0'; b:='0'; she:="00000000"; else she:='0'&she(7 downto 1); --b方没有击球 end if; elsif she=0 then --球从b方出界 amark<=amark+1; --a方加一分 a:='0'; b:='0'; else
13、 if bj='0'then --b方正常击球 a:='0'; b:='0'; else she:=she(6 downto 0)&'0'; end if; end if; end if; end if; shift<=she; end process; process(clk,clr,amark,bmark) variable aha,ala,bha,bla:std_logic_vector(3 downto 0); variable tmp1,tmp2:integer; variable t1,t2:std_log
14、ic; begin if clr='0'then --清零 aha:="0000"; ala:="0000"; bha:="0000"; bla:="0000"; tmp1:=0; tmp2:=0; t1:='0'; t2:='0'; elsif clk'event and clk='1'then if aha="0001"and ala="0001" then --a方得分达到11分,则保持 aha:="0001"; ala:="0001";
15、 t1:='1'; elsif bha="0001"and bla="0001" then --b方得分达到11分,则保持 bha:="0001"; bla:="0001"; t2:='1'; elsif amark>tmp1 then if ala="1001" then ala:="0000"; aha:=aha+1; tmp1:=tmp1+1; else ala:=ala+1; tmp1:=tmp1+1; end if; elsif bmark>tmp2 then
16、 if bla="1001" then bla:="0000"; bha:=bha+1; tmp2:=tmp2+1; else bla:=bla+1; tmp2:=tmp2+1; end if; end if; end if; al<=ala; bl<=bla; ah<=aha; bh<=bha; awin<=t1; bwin<=t2; end process; end bahave; 4.2.2 送数据模块的设计 送数据模块ch41a的vhdl程序描述如下:
17、Library IEEE; Use IEEE.std_logic_1164.all; Entity ch41a is Port(sel:in std_logic_vector(2 downto 0); D0,d1,d2,d3:in std_logic_vector(3 downto 0); Q:out std_logic_vector(3 downto 0)); End ch41a; Architecture behave of ch41a is Begin Process(sel) Begin Case sel is
18、When"100"=>q<=d0; When"101"=>q<=d1; When"000"=>q<=d2; When others=>q<=d3; End case; End process; End behave; 4.2.3 产生数码管片选信号模块的设计 产生数码管片选信号模块sel的vhdl程序描述如下: Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Entity sel is Port(clk:
19、in std_logic; Sell:out std_logic_vector(2 downto 0)); End sel; Architecture behave of sel is Begin Process(clk) Variable tmp:std_logic_vector(2 downto 0); Begin if clk'event and clk='1' then If tmp="000" then Tmp:="001"; Elsif tmp="001"then Tmp:="10
20、0"; Elsif Tmp="100"then Tmp:="101"; Elsif tmp="101" then Tmp:="000"; End if; End if; Sell<=tmp; End process; End behave; 4.2.4 7段译码器模块的设计 7段译码器模块disp的vhdl的程序描述如下: Library ieee; Use ieee.std_logic_1164.all; Entity disp is Port(d:in std_logic_vector(3
21、 downto 0); Q:out std_logic_vector(6 downto 0)); End disp; Architecture behave of disp is Begin Process(d) Begin Case d is When"0000"=>q<="0111111"; When"0001"=>q<="0000110"; When"0010"=>q<="1011011"; When"0011"=>q<="1001111"; When"0100"=>q<="1100110"; When"0101"=>q
22、<="1101101"; When"0110"=>q<="1111101"; When"0111"=>q<="0100111"; When"1000"=>q<="1111111"; When others=>q<="1101111"; End case; End process; End behave; 五、波形仿真与实验调试 5.1系统的波形仿真 图4所示为A方发球,在恰当的时候B方接到球,当球回到A方时,A方又接到球,但B方再也没有接到球的仿真波形。 图4 乒乓球仿真波形一 图5所示为A方两次发球,B方没有接到球,A方得到2分的仿真波
23、形图。 图5乒乓球仿真波形二 图6所示为A方发球,B方提前击球的情况,此时,A方得一分。图中还显示了A方发球,B方在规定的时刻没有接到球的情况,此时,A方又得一分。 图6乒乓球仿真波形三 图7所示为A方得分增加到11分的情况,此时awin输出高电平,输出分数保持不变。当清零信号按下时,得分清为零,awin输出恢复低电平,又可以开始新的一局比赛。 图7乒乓球仿真波形四 5.2 实验调试结果 通过调试我们可以观察到,8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左
24、到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球有效。 表1 学生情况统计表 序号 姓名 性别 出生日期 学号 专业 联系电话
25、 备注 1 夏梓轩 男 1993.08.05 12430724815428 电子信息科学与工程 13237424108 2 潘宇 男 1994.06.20 12430621817051 电子信息科学与工程 15084834031 六、结论与心得 这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。
26、但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也能仿真正确了。最难的是引脚锁定与测试这一块,由于,我选的乒乓球游戏机的引脚很多,而且也比较复杂,其中老是将引脚弄错,终于锁定完了,编译也没有出错,当在硬件上测试的时候,发现结果并不像设定的那么好,比如在发球的时候,根本没有设置首先从哪边开始,然后在接发球的过程中很难接到,不过也有接到的时候,基本上达到了实验的要求。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不
27、够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。 七、参考文献 [1] 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005. [2] 甘历.VHDL应用与开发实践[M].科学出版社.2003 [3] 杨恒,卢飞成. FPGA/VHDL快速工程实践入门与提高[M].北京航空航天大学 出版社.2003 [4] 张亦华等主编,《数字逻辑设计实验技术与EDA工具》,北京邮电大学出版社,2003 [5] 朱正伟主编,《EDA技术及应用》,清华大学出版社,2005 [6]黄智伟等主编,《FPGA系统设计与实践》,电子工业出版社,2004 教师评语及设计成绩 教师评语: 课程设计成绩: 指导教师:(签名) 日期:年月日 19






