乒乓球游戏机(1)

《EDA设计与应用》 课程设计报告

题 目: 乒乓球游戏机 姓 名: 专 业:

班 级: 学 号: 指导教师:

二0一五年6月26日

目录

1、设计目的 …………………………………………………….1 2、设计原理 ……………………………………………………….1 3、设计内容及过程…………………………………………………2 4、调试分析…………………………………………………………….7 5、结束语 ………………………………………………… …8 6、参考文献…………………………………………………………. .8

乒乓球游戏机

1设计目的

1学会使用软件QuartusII进行设计项目工程,并对这个项目进行编程,让其实现相应的功能。

2掌握软件QuartusII软件的操作界面和操作原理,能利用软件进行设计并进行仿真。分析相应的程序并进行改进。

3总结经验,改进实验。

2设计原理

乒乓球游戏以发光二极管逐个点亮模拟乒乓球运动轨迹,乒乓球游戏机是用16个发光二极管代表乒乓球台的,中间两个发光二极管兼做为乒乓球网,用点亮的发光二极管按一定的方向移动来表示乒乓球的运动。另外设置发球开关Af、Bf,以及接球开关Aj、Bj。利用7段数码管作为记分牌。

甲乙双方按乒乓球比赛的规则来操作开关。当甲方按动发球开关Af时,靠近甲方的第一个灯亮,然后按照顺序向乙方移动;当球过网后乙方可以接球,接球后灯反方向移动,双方比赛继续;如果一方提前击球或未击到球,则判失分。重新发球后继续比赛。

电路符号图

本设计中的乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,一个是发球开关af、bf;另一个是击球开关aj、bj。甲乙二人按乒乓球比赛规则来操作开

关。当甲方按动发球开关af时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。当球过网后按设计者规定的球位,乙方就可以击球。若乙方提前击球或没有击中球,则判乙方失分,甲方的记分牌自动加一分。然后重新发球,比赛继续进行。比赛一直要进行到一方记分牌达到21分,该局才结束。本设计由译码显示器、按键去抖、状态机/球台控制器和记分器等部分所组成。

游戏原理图如下

3设计内容及过程

3.1设计内容

设计一个乒乓球游戏机,模拟乒乓球比赛的基本过程和规则,并能自动裁判和几分。具体要求如下:

(1)使用乒乓球游戏机的甲乙双方在不同的位置发球或击球。

(2)乒乓球的位置和移动方向可由LED显示灯和依次点亮的方向决定,球的移动速度设为0.5s移动1位。使用者可按乒乓球的移动位置发出相应的动作,提前击球或出界均判失分。

3.2设计电路

(1)设计该乒乓球游戏机的输入与输出端口。首先考虑输入端口,一般应该设置一个异步置位端口rst,用于在系统不正常时回到初始状态:两个发球输入端Af和Bf,逻辑‘1’分别表示甲方和乙方的发球;两个击球输入端Aj和Bj,逻辑‘1’分别表示甲击球和乙击球;一个时钟输入端口clk。

其次考虑输出端口,芯片应该有16个输出端口来控制16个发光二极管,输出逻辑‘1’即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分,就得用到4个七段译码器,每方用到2个,可以表示0到11的数字,每个七段译码器需要芯片的7个输出端口来控制,总共28个输出端口。

(2) 在整个程序中,状态机器是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,如记分部分,发光二极管部分。乒乓球游戏机中有两个计数器a_score和b_score,分别记忆甲和乙的得分,用发光二极管的轮流发光表示球的移动轨迹。

(3)七段译码器是在数学电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。记分译码器(mydecoder):由于记分需要显示出来,所以要使用七段译码器。而状态机中的记分是由4位二进制码来表示的,即a_score和b_score。以下程序就是实现从4位二进制码转换成七段译码显示。

(4)还需要设计一个数码管的程序来显示乒乓球的运动地址。以便准确的判断乒乓球的运动轨迹。 总的程序如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ping_pang is

port(clk1khz:in std_logic;------1khz时钟信号

rst:in std_logic;----------系统复位

af,aj:in std_logic;--------A方发球,A方击球

bf,bj:in std_logic;--------B方发球,B方击球 shift:out

std_logic_vector(15

signal cnt:integer range 0 to 3; signal

data:std_logic_vector(3

downto 0);

signal

a_one,a_ten,b_one,b_ten:std_logic_vector(3 downto 0); begin

-------------------------------------2Hz分频----- process(clk1khz)

variable count:integer range 0 to 2;

begin

if clk1khz'event and clk1khz='1' then if count=2 then clk1_2hz

---------------------------------乒乓球比赛规则---------- process(rst,clk1_2hz)

variable a,b:std_logic;---a和b的

downto 0);----16个led代表乒乓球台 scan:out

std_logic_vector(3

downto 0);------数码管地址选择信号 seg7:out

std_logic_vector(6

downto 0));-----7段显示控制信号(abcdefg) end;

architecture a_one of ping_pang is

signal clk1_2hz:std_logic; signal

a_score,b_score:integer

range 0 to 11;

控制位

variable 球则继续向b移动 end if; elsif

shift_1=0

shift_1:std_logic_vector(15 downto 0); begin

if rst='1' then

a_score

shift_1:=(others=>'0');

then-------------如果b一直没接球则a加分

a_score

if bj='1' then----如果b击球成功则b的控制位置1,a的控制位清0 a:='0'; b:='1'; else shift_1(15 downto 1); end if; end if;

elsif b='1' and a='0' then ----------------球从b向a移动

if shift_1

shift_1:='0'&

elsif clk1_2hz'event and clk1_2hz='1' then

if a='0' and b='0' and af='1' then ---------如果a发球 a:='1';

shift_1:=

elsif a='0' and b='0' and bf='1' then ------如果b发球 b:='1';

shift_1:=

elsif a='1' and b='0' then -----------------球从a向b移动 if

shift_1>128

then if

aj='1'

then

b_score

a:='0'; b:='0';

shift_1:=

elsif shift_1=0 then

b_score

then----------------------------如果没到球网b击球则a加分 if bj='1' then a_score

shift_1:=

shift_1:='0'&

shift_1:=shift_1(14

shift_1(15 downto 1);----如果b没有击

a:='0'; b:='0'; else

if aj='1' then ---如果b击球成功则a的控制位置1,b的控制位清0 a:='1'; b:='0'; else downto 0)&'0'; end if; end if; end if; end if;

shift

shift_1:=shift_1(14

=>a_ten

when 10|11=>a_ten

end case; case b_score is

when 0|10 =>b_one

end process;

----------------------------------将a和b的计分换成bcd码------------------ process(a_score,b_score) begin

case a_score is

when 0|10 =>a_one

end case; case b_score is when =>b_ten

when 10|11=>b_ten

0|1|2|3|4|5|6|7|8|9

end case; end process;

------------------------------------数码管动态扫描计数-------- process(clk1khz) begin

if clk1khz'event and clk1khz='1' then if cnt=3 then cnt

end case; case a_score is when

0|1|2|3|4|5|6|7|8|9

end process;

-------------------------------------数码管动态扫描-----------

process(cnt,a_ten,a_one,b_one,b_ten) begin case cnt is

when 0=> data

begin case data is

when

when

end case; end process;

-----------------------------------------七段译码-------------------- process(data) end;

when others=>seg7

3.3仿真结果

由于a方和b方的游戏规则相同,下面仅给出a方发球后各种情况的功能仿真结果,而b方发球后的情况与其类似

(1)a方发球后b方提前击球,同时a方得分。此情况的功能仿真结果见图2,观察波形可知,球的移动方向为从左到右,b方提前击球后a_score加1,即a方得分

图2 a方发球后b方提前击球的功能仿真图

(2)a方发球后,b方在过网后击球。此情况的功能仿真结果见图3,观察波形可知,b方接到球后,球的移动方向为从右到左。

图3 a方发球后b方在过网后击球的功能仿真图

(3)b方击球后,a方没有击球。此情况的功能仿真结果见图4,观察波形可知,b方击球后,球的移动方向为从右到左,球过网后,a方没有击球,同时b方得分

图4 b方击球后a方没有击球的功能仿真图

4调试分析

通过调试我们可以观察到,16个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。 12 设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满11分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,拥有发球权的一方发球有效。

结束语:

通过设计,了解了软件QuartusII的使用并能对相应的程序进行分析,学会了自主建立和设计工程,并进行仿真和分析。受益匪浅。所以,我觉得这次的实验还是很有意义的,让课本的只是和实践相结合,这样学起东西来会更让人深刻。

参考文献:

[1] 黄平.基于QuartusⅡ的FPGA/CPLD数字系统设计与应用. 北京:电子工业出版社,2014. [2] 徐颖.Protel 99 SE EDA技术及应用[M].西安:机械工业出版社.2005

[3] 杨恒,卢飞成. FPGA/VHDL快速工程实践入门与提高[M].北京航空航天大学出版社.2003 [4]甘历.VHDL应用与开发实践[M].科学出版社.2003

《EDA设计与应用》 课程设计报告

题 目: 乒乓球游戏机 姓 名: 专 业:

班 级: 学 号: 指导教师:

二0一五年6月26日

目录

1、设计目的 …………………………………………………….1 2、设计原理 ……………………………………………………….1 3、设计内容及过程…………………………………………………2 4、调试分析…………………………………………………………….7 5、结束语 ………………………………………………… …8 6、参考文献…………………………………………………………. .8

乒乓球游戏机

1设计目的

1学会使用软件QuartusII进行设计项目工程,并对这个项目进行编程,让其实现相应的功能。

2掌握软件QuartusII软件的操作界面和操作原理,能利用软件进行设计并进行仿真。分析相应的程序并进行改进。

3总结经验,改进实验。

2设计原理

乒乓球游戏以发光二极管逐个点亮模拟乒乓球运动轨迹,乒乓球游戏机是用16个发光二极管代表乒乓球台的,中间两个发光二极管兼做为乒乓球网,用点亮的发光二极管按一定的方向移动来表示乒乓球的运动。另外设置发球开关Af、Bf,以及接球开关Aj、Bj。利用7段数码管作为记分牌。

甲乙双方按乒乓球比赛的规则来操作开关。当甲方按动发球开关Af时,靠近甲方的第一个灯亮,然后按照顺序向乙方移动;当球过网后乙方可以接球,接球后灯反方向移动,双方比赛继续;如果一方提前击球或未击到球,则判失分。重新发球后继续比赛。

电路符号图

本设计中的乒乓游戏机是由5个发光二极管代表乒乓球台,中间的发光二极管兼作球网,用点亮的发光二极管按一定方向移动来表示球的运动。在游戏机的两侧各设置两个开关,一个是发球开关af、bf;另一个是击球开关aj、bj。甲乙二人按乒乓球比赛规则来操作开

关。当甲方按动发球开关af时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。当球过网后按设计者规定的球位,乙方就可以击球。若乙方提前击球或没有击中球,则判乙方失分,甲方的记分牌自动加一分。然后重新发球,比赛继续进行。比赛一直要进行到一方记分牌达到21分,该局才结束。本设计由译码显示器、按键去抖、状态机/球台控制器和记分器等部分所组成。

游戏原理图如下

3设计内容及过程

3.1设计内容

设计一个乒乓球游戏机,模拟乒乓球比赛的基本过程和规则,并能自动裁判和几分。具体要求如下:

(1)使用乒乓球游戏机的甲乙双方在不同的位置发球或击球。

(2)乒乓球的位置和移动方向可由LED显示灯和依次点亮的方向决定,球的移动速度设为0.5s移动1位。使用者可按乒乓球的移动位置发出相应的动作,提前击球或出界均判失分。

3.2设计电路

(1)设计该乒乓球游戏机的输入与输出端口。首先考虑输入端口,一般应该设置一个异步置位端口rst,用于在系统不正常时回到初始状态:两个发球输入端Af和Bf,逻辑‘1’分别表示甲方和乙方的发球;两个击球输入端Aj和Bj,逻辑‘1’分别表示甲击球和乙击球;一个时钟输入端口clk。

其次考虑输出端口,芯片应该有16个输出端口来控制16个发光二极管,输出逻辑‘1’即输出一个高电平,可以使发光二极管点亮;另外,要直观地表示双方的得分,就得用到4个七段译码器,每方用到2个,可以表示0到11的数字,每个七段译码器需要芯片的7个输出端口来控制,总共28个输出端口。

(2) 在整个程序中,状态机器是中央控制器的作用,由它控制的信号来影响整个程序中的其他相关部分,如记分部分,发光二极管部分。乒乓球游戏机中有两个计数器a_score和b_score,分别记忆甲和乙的得分,用发光二极管的轮流发光表示球的移动轨迹。

(3)七段译码器是在数学电路设计中经常用到的显示电路。所谓七段译码器,其实是由7段发光二极管组成的用于显示数字的器件。记分译码器(mydecoder):由于记分需要显示出来,所以要使用七段译码器。而状态机中的记分是由4位二进制码来表示的,即a_score和b_score。以下程序就是实现从4位二进制码转换成七段译码显示。

(4)还需要设计一个数码管的程序来显示乒乓球的运动地址。以便准确的判断乒乓球的运动轨迹。 总的程序如下: library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ping_pang is

port(clk1khz:in std_logic;------1khz时钟信号

rst:in std_logic;----------系统复位

af,aj:in std_logic;--------A方发球,A方击球

bf,bj:in std_logic;--------B方发球,B方击球 shift:out

std_logic_vector(15

signal cnt:integer range 0 to 3; signal

data:std_logic_vector(3

downto 0);

signal

a_one,a_ten,b_one,b_ten:std_logic_vector(3 downto 0); begin

-------------------------------------2Hz分频----- process(clk1khz)

variable count:integer range 0 to 2;

begin

if clk1khz'event and clk1khz='1' then if count=2 then clk1_2hz

---------------------------------乒乓球比赛规则---------- process(rst,clk1_2hz)

variable a,b:std_logic;---a和b的

downto 0);----16个led代表乒乓球台 scan:out

std_logic_vector(3

downto 0);------数码管地址选择信号 seg7:out

std_logic_vector(6

downto 0));-----7段显示控制信号(abcdefg) end;

architecture a_one of ping_pang is

signal clk1_2hz:std_logic; signal

a_score,b_score:integer

range 0 to 11;

控制位

variable 球则继续向b移动 end if; elsif

shift_1=0

shift_1:std_logic_vector(15 downto 0); begin

if rst='1' then

a_score

shift_1:=(others=>'0');

then-------------如果b一直没接球则a加分

a_score

if bj='1' then----如果b击球成功则b的控制位置1,a的控制位清0 a:='0'; b:='1'; else shift_1(15 downto 1); end if; end if;

elsif b='1' and a='0' then ----------------球从b向a移动

if shift_1

shift_1:='0'&

elsif clk1_2hz'event and clk1_2hz='1' then

if a='0' and b='0' and af='1' then ---------如果a发球 a:='1';

shift_1:=

elsif a='0' and b='0' and bf='1' then ------如果b发球 b:='1';

shift_1:=

elsif a='1' and b='0' then -----------------球从a向b移动 if

shift_1>128

then if

aj='1'

then

b_score

a:='0'; b:='0';

shift_1:=

elsif shift_1=0 then

b_score

then----------------------------如果没到球网b击球则a加分 if bj='1' then a_score

shift_1:=

shift_1:='0'&

shift_1:=shift_1(14

shift_1(15 downto 1);----如果b没有击

a:='0'; b:='0'; else

if aj='1' then ---如果b击球成功则a的控制位置1,b的控制位清0 a:='1'; b:='0'; else downto 0)&'0'; end if; end if; end if; end if;

shift

shift_1:=shift_1(14

=>a_ten

when 10|11=>a_ten

end case; case b_score is

when 0|10 =>b_one

end process;

----------------------------------将a和b的计分换成bcd码------------------ process(a_score,b_score) begin

case a_score is

when 0|10 =>a_one

end case; case b_score is when =>b_ten

when 10|11=>b_ten

0|1|2|3|4|5|6|7|8|9

end case; end process;

------------------------------------数码管动态扫描计数-------- process(clk1khz) begin

if clk1khz'event and clk1khz='1' then if cnt=3 then cnt

end case; case a_score is when

0|1|2|3|4|5|6|7|8|9

end process;

-------------------------------------数码管动态扫描-----------

process(cnt,a_ten,a_one,b_one,b_ten) begin case cnt is

when 0=> data

begin case data is

when

when

end case; end process;

-----------------------------------------七段译码-------------------- process(data) end;

when others=>seg7

3.3仿真结果

由于a方和b方的游戏规则相同,下面仅给出a方发球后各种情况的功能仿真结果,而b方发球后的情况与其类似

(1)a方发球后b方提前击球,同时a方得分。此情况的功能仿真结果见图2,观察波形可知,球的移动方向为从左到右,b方提前击球后a_score加1,即a方得分

图2 a方发球后b方提前击球的功能仿真图

(2)a方发球后,b方在过网后击球。此情况的功能仿真结果见图3,观察波形可知,b方接到球后,球的移动方向为从右到左。

图3 a方发球后b方在过网后击球的功能仿真图

(3)b方击球后,a方没有击球。此情况的功能仿真结果见图4,观察波形可知,b方击球后,球的移动方向为从右到左,球过网后,a方没有击球,同时b方得分

图4 b方击球后a方没有击球的功能仿真图

4调试分析

通过调试我们可以观察到,16个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。 12 设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满11分为1局。甲、乙双方各设一个发光二极管,表示拥有发球权,拥有发球权的一方发球有效。

结束语:

通过设计,了解了软件QuartusII的使用并能对相应的程序进行分析,学会了自主建立和设计工程,并进行仿真和分析。受益匪浅。所以,我觉得这次的实验还是很有意义的,让课本的只是和实践相结合,这样学起东西来会更让人深刻。

参考文献:

[1] 黄平.基于QuartusⅡ的FPGA/CPLD数字系统设计与应用. 北京:电子工业出版社,2014. [2] 徐颖.Protel 99 SE EDA技术及应用[M].西安:机械工业出版社.2005

[3] 杨恒,卢飞成. FPGA/VHDL快速工程实践入门与提高[M].北京航空航天大学出版社.2003 [4]甘历.VHDL应用与开发实践[M].科学出版社.2003


相关文章

  • 游园活动游戏123
  • 一月七日游园活动游戏 游戏1:打靶 游戏准备:敌人图片5幅:小椅子5把:沙包10个. 游戏玩法:每人10个沙包,参赛者用力将沙包向"敌人"投往,沙包用完后,记载各自投准情形,击中几个获得几个奖券,全中者获得7张奖券. 游 ...查看


  • 大班六一游园活动游戏61则
  • 大班六一游园活动游戏 61 则 游戏 1:蒙人打鼓 游戏准备:一个鼓.几条蒙眼布 游戏玩法:请幼儿蒙着眼睛,从起点走到大鼓前,用锤子敲鼓三下,就可以 拿到礼物了. 游戏 2:投球 游戏准备:球若干.大篮子两个.礼物. 游戏玩法:请家长与孩子 ...查看


  • 合适儿童玩的游戏
  • 合适儿童玩的游戏 游戏称号:球球乐弹球 预备:6个乒乓球,6个纸箱 玩法:预备好3个乒乓球和3个纸箱,3个纸箱平放在一张桌子上,制品字形,家长/儿童站在桌子面前,给其3个乒乓球,将手中的乒乓球往桌子上扔,若弹起的乒乓球弹进纸箱内为胜. 规矩 ...查看


  • 幼儿园趣味运动会项目
  • 篇一:儿童趣味运动会比赛项目 儿童趣味运动会比赛项目 第一大组:2岁至3岁孩子 单项类: 1,投掷飞碟 游戏规则:1)6人 一组同时进行游戏 2 碟,选手尽力把飞碟向前投掷 3 最远者获胜 2 一组进行游戏 2 彩球,选手从中拿出彩球,然后 ...查看


  • 学校游园活动项目及游戏规则
  • 元旦游园活动项目及游戏规则 ( 一.弹球 活动地点:一.三班教室外面 活动描述及游戏规则: 1.每轮比赛限时1分钟. 2.参赛者站在离目标2米远的地方,用手向地下掷乒乓球,球弹起后落入桶内. 3.每人五个球,投进3个球获1张奖券,多投中一球 ...查看


  • 关于游戏的作文:难忘的"篮球乒乓球"游戏_400字
  • 今天,我和全班同学一起到万松山亲子活动. 我印象最深的是,在万松山山顶的游戏.我今天还得了冠军呢.游戏很有意思.是林肯爸爸在报游戏规则,他说,第一个游戏是"篮球乒乓球",就是他说篮球的时候,我们要比划成乒乓球,他说乒乓球 ...查看


  • 幼儿园元旦活动策划方案 1
  • 幼儿园元旦游艺活动策划方案 2016.1 一.设计思路: 以"游艺"为主题,让幼儿在欢乐自由玩耍的氛围下,家长和幼儿亲子同乐参与各项游艺活动,体验节日的愉快气氛,欢欢喜喜地享受节日的快乐.本次游艺活动,为幼儿和家长提供了 ...查看


  • 元旦游园活动项目及游戏规则
  • 元旦游园活动项目及游戏规则(活动时间:12月30日晚) 一.海狮顶球 活动地点:一年级教室 活动描述及游戏规则: 1.室内设4个赛道,每组1人. 2.距离为2米,时间1分钟. 3.将篮球顶在头上,走到对面时间用得少的组获胜,获一张奖券. 4 ...查看


  • 六一狂欢游园活动方案
  • 丘北县第一小学校"六•一"节 游园活动方案 为了增添节日氛围,丰富少年儿童的学习生活,使之从中得到锻炼,让学生度过一个快乐.精彩.向上的"六•一"节.五年级少先队大队部特制定本次游园活动.通过活动,使 ...查看


热门内容