《乒乓球比赛游戏机设计.doc》由会员分享,可在线阅读,更多相关《乒乓球比赛游戏机设计.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、- -目 录1 引言11.1 设计背景11.2 VHDL简介11.3 Quartus简介32 乒乓球比赛游戏机的设计32.1 系统设计要求32.2 设计思路43 乒乓球比赛游戏机的实现63.1 乒乓球比赛游戏机的顶层原理图63.2 系统各功能模块的实现63.2.1 比赛控制模块63.2.2 记分模块73.2.3 数码管显示模块84 各个模块的仿真以及系统仿真、分析94.1 比赛控制模块仿真波形94.2 记分模块仿真波形图94.3 管脚锁定104.4 系统的波形仿真114.5 显示结果的几种情况145 总结155.1 设计制作过程中遇到的问题及解决方案155.2 本设计有以下几个可以改良的地方1
2、5参考文献16附录17游戏控制模块的VHDL程序17记分模块的VHDL程序19动态扫描模块的VHDL程序20译码器模块的VHDL程序21- - word.zl- -1 引言1.1 设计背景1.2 VHDL简介硬件描述语言已经有几十年的开展历史,并且在系统的仿真、验证和设计、综合等方面得到成功的应用。目前常用的硬件描述语言有VHDL、Verilog HDL、ABEL等234。VHDL那么起源于20世纪70年代末和80年代初,美国国防部提出的VHSIC方案,目标是为下一代集成电路的生产、实践阶段性的工艺极限和完成10万门级以上的电路设计而建立一种新的描述方法5。VHDL的英文全称为Very-Hig
3、h-Speed Integrated Circuit Hardware Description Language,是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。VHDL具有很多的优点使它能够被大多数人认可,被广泛应用在逻辑电路的设计方面,并且成为了标准化的硬件描述语言,其优点如下:(1)功能强大和设计灵活。一个简洁的使用VHDL语言编写的程序就可以描述一个复杂的逻辑电路,因为VHDL拥有强大的语言构造6。VHDL多层次的设计描述功能可以有效地控制设计的实现,支持设计库和可重复使用的元件生成,还支持多种设计方式,如层次化设计、模块化设计和同步、异步
4、和随机电路设计。(2)与具体器件无关。用VHDL设计硬件电路时不用先确定设计要用到哪种器件,也不用特别熟悉器件的部构造,这样可以使设计人员专注于进展系统设计。设计完成后,可以根据消耗的资源选择适宜的器件,而不造成资源的浪费。(3)很强的移植能力。VHDL由很多不同的工具支持,同一个设计的程序可以在包括综合工具、仿真工具、系统平台等工具中使用。(4)强大的硬件描述能力。VHDL可以描述系统级电路和门级电路,而且描述方式多样,可以采用行为描述、存放器传输描述或者构造描述,也可以用其混合描述方式。同时,VHDL可以准确地建立硬件电路模型,因为它支持惯性延迟和传输延迟。VHDL的数据类型很丰富,支持标
5、准定义的数据类型,当标准定义的数据类型不能满足用户的需求时,用户可以自己定义的所需要的数据类型,增加了设计的自由度。(5)语法规,易于共享。当把用VHDL编写的代码文件看作是程序时,它可以作为设计人员之间的交流容;当把它看作是文档时,可以作为签约双方的合同文本。VHDL易于共享的特点,使得大规模的协作开发容易实现。同时,这些特点也促进了VHDL的开展和完善。综上所述,VHDL有很多其他的硬件描述语言所不具备的优点。但是,VHDL仍然存在一些缺点,主要是3个方面。(1)要求设计者对硬件电路知识甚至是芯片构造方面的知识了解较多。应该摆脱一般的高级语言程序设计思路,因为在电路世界里的事件很多是并行发
6、生的,并且硬件电路系统部的模块可以是互相独立的,也可以是互为因果的,所以,在用VHDL设计硬件电路时应摆脱一般的高级语言程序设计思路。在设计电路时,应先构思电路,然后才能描述。(2)不能进展太抽象的系统描述。因为EDA工具无法综合抽象性太强的系统,故用VHDL描述系统电路时不能太抽象。目前的VHDL很难综合实际的硬件电路,只能适用于系统建模。(3)不能描述模拟电路。对于模拟电路而言,VHDL并不是一种理想的硬件描述语言。但可以预见,未来硬件描述语言的开展方向是模拟电路和数模混合电路的描述方式。1.3 Quartus简介2 乒乓球比赛游戏机的设计2.1 系统设计要求设计一个由甲乙双方参赛,有裁判
7、的三人乒乓球游戏机。用8个或更多个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置点亮的LED依此从左到右,或从右到左,其移动速度应能调节。当“球点亮的那只LED运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,既表示启动球拍击球,假设未击中,球掉出桌外,那么对方得一方。设置自动记分电路,甲乙双方各用两位数码管进展记分显示,每记满11分为1局。甲乙双方各设一个发光二极管表示拥有发球权,每隔两次自动交换发球权,拥有发球权的一方发球才有效。系统框图如图2-1所示:图2-1 乒乓球比赛游戏机系统框图2.2 设计思路此设计问题可分为游戏控
8、制模块,加减计数模块,译码模块,甲乙方得分显示模块四局部。设置甲乙双方击球脉冲信号int1/int2,一方的击球信号使加/减计数器加法计数,那么另一方的击球信号就使加/减计数器减法计数,译码模块输出端Y1-Y8接LED模拟乒乓球的轨迹。经控制模块实现移位方向的控制,真值表2-2所列。设置发球权拥有显示信号s1、s2。控制模块使每两次交换发球权。加/减控制信号/D由乒乓球到达Y8、Y1和击球信号int1、int2及发球权拥有信号s1、s2共同产生,真值表如表2-3所示。当球到达Y8或Y1时,参赛者没有及时击中,那么球掉出桌外,加/减计数模块停顿计数,对方得一分。设置捡球信号reset1,通过加/
9、减计数模块的异步置数端实现捡球。当甲方拥有发球权时捡球信号将球放到Y1,乙方拥有发球权时将球放到Y8.在控制模块对甲乙双方的得分进展检测,只要一方的得分到达11,那么一局完毕,设置裁判员复位信号reset.在每局完毕后将双方得分清零。由调节晶振产生的时钟脉冲信号的频率,可以调节球的运动速度。表2-2 加/减计数译码显示真值表时钟加/减控制计数器输出译码器输出CLK/DQ3Q2Q1Q0Y8Y7Y6Y5Y4Y3Y2Y10000100000001000100000001000011000001000010000001000001010001000000110001000000011101000000
10、01000100000001011101000000101100010000010101000100001010000001000100110000010010010000000101000100000001表2-3 加减控制信号的产生Y8Y1Int1Int2S1S2/D100011010100硬件系统示意图如下所示图2-4 硬件系统示意图3 乒乓球比赛游戏机的实现3.1 乒乓球比赛游戏机的顶层原理图图3-1 顶层原理图原理图中输入局部分别是:复位按键res,时钟clk_1,startbutton开场游戏按键,serve1.0发球按键,serve0代表甲发球,serve1代表乙发球,int1为
11、甲击球按键,int2为乙击球按键,原理图中输出局部分别是:8个LED灯light1.8,数码管段选信号A、C、D、E、F、G、H,数码管进入译码器74ls138的位选信号sel2.0,在数码管上显示了甲乙两个人的分数。3.2 系统各功能模块的实现3.2.1 比赛控制模块图3-2 比赛控制模块元件框图按下startbutton按键之后游戏开场,当按下serve0时甲发球,8个一排的LED灯从左向右移动从1到8,当移动到第八个灯时按下int2按键代表乙击中,那么乙得1分,提前或未来的及击球那么甲得分。当按下serve1时乙发球从右向左移动,当移动到第一个灯时按下int1代表甲击中球,甲得1分,提前
12、或未来的击球及那么乙得分。3.2.2 记分模块图3-3 记分模块元件框图中选择好的信号binaryin4.1进入mydecoder之后,相应的数据会选择到相应的信号中,并且通过bcdout14.1和bcdout24.1输出相应的分数在两位数码管上的显示数字。bcdout1为十位数,bcdout2为个位数。3.2.3 数码管显示模块图3-4 显示模块框图数码管显示模块主要是由两个模块组成分别为setime以及deled这两个模块组成:setime模块主要是将输入的分数进展动态扫描,显示到每一位数码管的位选上,通过高速的扫描后会将每一位选手的分数很清晰的显示在数码管上。deled模块是一个译码器的
13、模块译码器的译码对照表3-5如下所示:表3-5 译码器的译码对照表显示的数字BCD编码七段共阳数码管000001000000100011111001200100100100300110110000401000011001501010010010601100000010701111111000810000000000910010010000XXXXX1111111在程序中只考虑0000-1001即0-9的情况,将其转化为相应的七段显示器的码字,其他情况不予考虑。4 各个模块的仿真以及系统仿真、分析4.1 比赛控制模块仿真波形图4-1 比赛控制模块4.2 记分模块仿真波形图图4-2记分模块仿真波形
14、图表4-3 对应分数的数码管显示binaryinbcdout1bcdout2000000000000000100000001001000000010001100000011010000000100010100000101011000000110011100000111100000001000100100001001101000010000101100010001在图4-2中可以看出当得分为20010分时对应的两位数码管那么会显示为02(bcoudt1:0000,bcoudt2:0010,当分数超过11分时数码管的显示全为为00。表4-3为具体的分数对应的数码管显示。4.3 管脚锁定在验证出乒乓
15、球比赛游戏机系统的功能之前,需要清楚实验箱与各个信号之间的对应关系,参照资料得出本设计中各引脚的对应情况如下:图4-4 各引脚的对应情况4.4 系统的波形仿真图4-5所示为甲方发球,在恰当的时候乙方接到球,当球回到甲方时,甲方又接到球,但乙方再也没有接到球的仿真波形。 图4-5 乒乓球仿真波形一图4-6所示为甲方两次发球,乙方没有接到球,甲方得到2分的仿真波形图。图4-6 乒乓球仿真波形二图4-7所示为甲方发球,乙方提前击球的情况,此时,甲方得一分。图中还显示了甲方发球,乙方在规定的时刻没有接到球的情况,此时,甲方又得一分。 图4-7 乒乓球仿真波形三图4-8所示为当清零信号按下时,得分清零,
16、又开场新一局游戏图4-8 乒乓球仿真波形四4.5 显示结果的几种情况图4-9 验证结果1图4-10 验证结果2图4-11 验证结果35 总结5.1 设计制作过程中遇到的问题及解决方案1.VHDL语法使用不规:当我们编写软件程序的时,遇到了编译错误。细心阅读QuartusII错误提示和所编写的程序后发现是因为VHDL语法使用错误。最后经过翻阅EDA课本,熟悉相关语法后将其改正。2.动态扫描局部不清楚,以至无法实现得分显示功能 起初以为每个数码管的引脚都要锁定,不知该怎样锁定四个数码管的引脚,后来想起曾经做过的数码管显示控制系列最终完成了该局部。3.引脚锁定不完整,最终编译无法通过:处理了之前出现
17、的几个问题后,在最后编译时未通过。细致查看了错误提示,发现是个别管脚未锁定的原因。我们最终把各个管脚锁定一一检查了一遍,从而通过了编译。5.2 本设计有以下几个可以改良的地方1.可以在甲乙两位得分的数码管显示中间在用一个显示“:这个符号。2.通过适当添加几种语音芯片,就可以在不同的情况下发出美妙的声响,能为比赛增添不少乐趣。3.在现有设计根底上使用无线电或红外技术,还可以使本工程升级为无线智能乒乓球游戏机。附 录游戏控制模块的VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.
18、std_logic_unsigned.all;entity pete isport(reset:in std_logic;clk_1:in std_logic;startbutton:in std_logic;serve:in std_logic_vector(1 downto 0);int1,int2:in std_logic;light:out std_logic_vector(1 to 8);counta,countb:out std_logic_vector(3 downto 0);end pete;architecture one of pete isTypepingpong is
19、(waitserve,light1on,ballmoveto2,allow2int,light8on,ballmoveto1,allow1int);signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2,count3,count4:std_logic_vector(3 downto 0):=0000;beginprocess(clk_1)beginif reset=1 theni=0;count1=0000;count2=0000;count3=0000;count4=0000;elsif clk_1ev
20、ent and clk_1=1 thenif count1=1011 theni=0;count1=0000;count2=0000;count3=count3+1;elsif count2=1011 theni=0;count1=0000;count2=0000;count4=count4+1;elsif startbutton=0 theni=0;count1=0000;count2=0000;count3=0000;count4case serve iswhen 01= i=1;state i=8;statei ii=2;if int2=1 theni=0;count1=count1+1
21、;state=waitserve;elsestatei=7;if int1=1 theni=0;count2=count2+1;state=waitserve;elsestateif int1=1 theni=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow1int;else iif int2=1theni=0;count1=count1+1;state=waitserve;elsif i=7 then i=8;state=allow2int;else iif int1=1 then i=2;state=ballm
22、oveto2;else count2=count2+1;i=0;stateif int2=1then i=7;state=ballmoveto1;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;counta=count1;countb=count2;light=10000000when(i=1)else 01000000when(i=2)else 00100000when(i=3)else 00010000when(i=4)else 00001000when(i=5)else
23、00000100when(i=6)else 00000010when(i=7)else 00000001when(i=8)else 00000000;end one;记分模块的VHDL程序library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity mydecoder isport(binaryin: in std_logic_vector(4 downto 1); bcdout1: out std_logic_vector(4 do
24、wnto 1); bcdout2: out std_logic_vector(4downto 1);end mydecoder; architecture m of mydecoder is signal tembinaryin:std_logic_vector(4 downto 1);begin process(binaryin) begin tembinaryin bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0
25、000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0000;bcdout2 bcdout1=0001;bcdout2 bcdout1=0001;bcdout2 bcdout1=0000;bcdout2=0000; end case; end process; end m; 动态扫描模块的VHDL程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity seltime ispo
26、rt(clk:in std_logic;s:in std_logic_vector(15 downto 0);daout:out std_logic_vector(3 downto 0);sel:out std_logic_vector(2 downto 0);end seltime;architecture behav of seltime issignal sec : std_logic_vector(2 downto 0);beginprocess(clk)beginif(clkevent and clk=1) thenif(sec=111) thensec=000;elsesecdao
27、utdaoutdaoutdaoutdaoutdaoutdaoutdaoutdaout=XXXX;end case;end process;sel=sec;end behav;译码器模块的VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY DELED IS PORT ( S : IN STD_LOGIC_VECTOR(3 DOWNTO 0); A,B,C,D,E,F,G,H : OUT STD_LOGIC);END DELED;ARCHITECTURE BEHAV OF DELED IS SIGNAL DATA:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL DOUT:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN DATADOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUTDOUT=00000000; END CASE; END PROCESS; H=DOUT(7);G=DOUT(6);F=DOUT(5);E=DOUT(4); D=DOUT(3);C=DOUT(2);B=DOUT(1);A=DOUT(0);END BEHAV;- - word.zl-
限制150内