EDA课程设计--乒乓球游戏机
《EDA技术及应用》课程设计(实习)报告
题 目 乒乓游戏机
姓 名: 学 号: 专 业: 班 级: 指导教师: 职 称:
电子工程学院
目录
1 引言 ......................................................................................................... 3 2 设计的目的............................................................................................. 3 3 乒乓游戏机的功能 ................................................................................ 3
3.1 乒乓游戏机设计思路 ............................................. 4 3.2 乒乓球各模块的设计 ............................................. 4
3.3.1 控制模块的设计.............................................. 4 3.3.2 送数据模块的设计........................................... 10 3.3.3 产生数码管片选信号模块的设计............................... 11 3.3.4 7段译码器模块的设计 ....................................... 13
4 系统的波形仿真 .................................................................................. 14 5 乒乓游戏机顶层电路图 ...................................................................... 16 6 硬件测试及引脚锁定 .......................................................................... 16 7 设计心得与体会 .................................................................................. 17 参考文献 ................................................................................................. 18
乒乓游戏机
1 引言
乒乓球运动是一项受大众非常喜爱的运动,它是一项集健身性,竞技性和娱乐性为一体的运动。乒乓球是一项非常受大众喜欢的运动,几十年来,乒乓球运动在中国迅速兴起,很重要的原因就是对客观条件要求不高,随时随处就能玩起来。乒乓球运动越来越多地被作为增强智力、提高工作效率以及保健、医疗和康复的极佳手段而引起各方面的重视。如今,人们生活太忙碌,很多的人只能通过网络来玩乒乓球游戏,而乒乓球游戏机正好解决了人们的困扰。它简单易行,只要简简单单几个手指的操作就能达到同样娱乐跟锻炼的效果。
2 设计的目的
这次的设计主要是学习使用EDA集成设计软件MxplussII,电路描述,综合,模拟过程。掌握使用EDA工具设计乒乓游戏机的的设计思路和设计方法。体会使用EDA综合过程中电路设计方法和设计思路的不同。
3 乒乓游戏机的功能
两人乒乓游戏机能够模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。乒乓游戏机是用8个发光二极管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定的方向移动来表示球的运动。在游戏机的两侧各设置两个开关,一个是发球开关(s1a,s1b),另一个是击球开关(s2a,s2b)。甲乙两人按乒乓球比赛的规则来操作开关。
当甲方按动发球开关s1a时,靠近甲方的第一盏灯亮,然后二极管由甲向乙依次点亮,代表乒乓球在移动。当球过网后,按设计者规定的球位乙方就可以击球。若乙方提前击球或者没有击着球,则判乙方失分,甲方记分牌自动加分。然后重新发球,比赛继续进行。比赛一直进行到一方记分到11分,该局结束,记分牌清零,可以开始新的一局比赛。
具体功能如下:
(1)使用乒乓游戏机的甲乙双方各在不同的位置发球或击球。
(2)乒乓球的位置和移动方向由灯亮及依次点燃的方向决定,球移动的速度为0.1~0.5s移动一位。游戏者根据球的位置发出相应的动作,提前击球或者出界均判失分。
(3)比赛用11分为一局来进行,甲乙双方都应设置各自的记分牌,任何一方先记满11分,该方就算胜了此局。记分牌清零后,又可开始新的一局比赛
3.1 乒乓游戏机设计思路
根据乒乓游戏机功能要求,可以分成四个模块来实现,其中corna模块为整个程序的核心,它实现了整个系统的全部逻辑功能;模块ch41a在数码的片选信号时,送出相应的数据;模块sel产生数码管的片选信号;模块disp是7段译码器。
3.2 乒乓球各模块的设计 3.3.1 控制模块的设计
模块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 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’ t hen a:=’0’; b:=’0’;
she:=”00000000” amark
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’ then bf=’0’ then --b方发球 b:=’1’; she:=”00000001”;
elsif a=’1’ and b=’0’ then --a方发球后 if she>8 then
if bj=’0’ then --b方过网击球 amark
she:=”00000000”; else
she:=’0’&she(7 downto 1); --b方没有击球 end if;
elsif she=0 then --球从b方出界 amark
if bj=’0’ then --b方正常击球
a:=’0’; b:=’1’; else
she:=’0’&she(7 downto 1); --b方没有击球 end if; end if;
elsif a=’0’ and b=’1’then --b方发球 if she
she:=”00000000”; else
she:=she(6 downto 0)&’0’; end if; elsif she=0 then bmark
she:=she(6 downto 0)&’0’;
end if; end if; end if; end if; shift
process(clk,clr,amark,bmark)
variable aha,ala,bha,bla:std_logic_vector(3 downto 0); variable tmp1,tmp2:integer; variable t1,t2:std_logic; 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”; 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 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
3.3.2 送数据模块的设计
送数据模块ch41a的vhdl程序描述如下:
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 ch41;
Architecture behave of ch41a is
Begin
Process(sel)
Begin
Case sel is
When”100”=>q
When”101”=>q
When”000”=>q
When others=>q
End case;
End process;
End behave;
3.3.3 产生数码管片选信号模块的设计
产生数码管片选信号模块sel的vhdl程序描述如下:
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity sel is
Port(clk: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:=”100”;
Elsif Tmp=”100” then
Tmp:=”101”;
Elsif tmp=”101” then
Tmp:=”000”;
End if;
End if;
Sell
End process;
End behave;
3.3.4 7段译码器模块的设计
7段译码器模块disp的vhdl的程序描述如下:
Library ieee;
Use ieee.std_logic_1164.all;
Entity disp is
Port(d:in std_logic_vector(3 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
When”0001”=>q
When”0010”=>q
When”0011”=>q
When”0100”=>q
When”0101”=>q
When”0110”=>q
When”0111”=>q
When”1000”=>q
When others=>q
End case;
End process;
End behave;
4 系统的波形仿真
图1所示为A方发球,在恰当的时候B方接到球,当球回到A方时,A方又接到球,但B方再也没有接到球的仿真波形。
图1 乒乓球仿真波形一
图2所示为A方两次发球,B方没有接到球,A方得到2分的仿真波形图
图2乒乓球仿真波形二
图3所示为A方发球,B方提前击球的情况,此时,A方得一分。图中还显示了A方发球,B方在规定的时刻没有接到球的情况,此时,A方又得一分。
图3乒乓球仿真波形三
图4所示为A方得分增加到11分的情况,此时awin输出高电平,输出分数保持不变。当清零信号按下时,得分清为零,awin输出恢复低电平,又可以开始新的一局比赛。
图4乒乓球仿真波形四
5 乒乓游戏机顶层电路图
图5乒乓游戏机顶层电路图
6 硬件测试及引脚锁定
在这次的硬件测试中,采用六号模式。其中的clr,af,aj,bf,bj均为输入信号,并且只有高电平和低电平之分,所以,在锁定的时候af,aj分别接入16,11,在硬件器件上分别接在键8和键7,同理bf,bj锁定在18,19号的引脚上,分别对应的键4和键5,异步清零信号clr则接在键3, clk,sclk为时钟脉冲信号分别接在42,43号。输出信号为q6~q0,shift0~shift7,q输出为A,B两方的分数,它的接出了七段数码管,shift代表乒乓球的移动,它的接出为发光二极管。其中q6-78,q5-73,q4-72,q3-71,q2- 70,q1-67,q0-66;shift7-38, shift6-37, shift5-36, shift4-35, shift3-30, shift2-29, shift1-28, shift0-27.
引脚锁定如下图所示:
图六 引脚锁定图
7 设计心得与体会
这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次设计,进一步加深了对EDA的了解,让我对它有了更加浓厚的兴趣。特别是当每一个子模块编写调试成功时,心里特别的开心。但是在编写顶层文件的程序时,遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,
排除困难后,程序编译就通过了,心里终于舒了一口气。在波形仿真时,也能仿真正确了。最难的是引脚锁定与测试这一块,由于,我选的乒乓球游戏机的引脚很多,而且也比较复杂,其中老是将引脚弄错,终于锁定完了,编译也没有出错,当在硬件上测试的时候,发现结果并不像设定的那么好,比如在发球的时候,根本没有设置首先从哪边开始,然后在接发球的过程中很难接到,不过也有接到的时候,基本上达到了实验的要求。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
参考文献
[1]阎石 主编,《数字电子技术基础》(第五版),高等教育出版社,2006
[2]朱正伟主编,《EDA技术及应用》,清华大学出版社,2005
[3]廖裕评等主编,《CPLD数字电路设计——使用MAX+plusⅡ入门篇》,清华大学出版社,2004
[4张亦华等主编,《数字逻辑设计实验技术与EDA工具》,北京邮电大学出版社,2003
[5]谭会生等主编,《EDA技术及应用》,西安电子科技大学出版社,2001
[6]黄智伟等主编,《FPGA系统设计与实践》,电子工业出版社,2004