乒乓球游戏机的EDA设计
- 格式:pdf
- 大小:710.86 KB
- 文档页数:28
分,该方就算胜了此局。
记分牌清零后,又可开始新的一局比赛2.2.2乒乓游戏机设计思路根据乒乓游戏机功能要求,可以分成四个模块来实现,其中corna模块为整个程序的核心,它实现了整个系统的全部逻辑功能;模块CH41A在数码的片选信号时,送出相应的数据;模块sel产生数码管的片选信号;模块disp是7段译码器。
2.3乒乓球各模块的设计2.3.1 控制模块的设计模块CORNA 分两个进程,第一个进程实现逻辑功能,第二个进程将整数的记分转换为十进制数,便于译码显示。
AF,AJ,BF,BJ分别为a方发球键和接球键,b方发球键和接球键,shift表示球所在的位置。
其vhdl程序描述如下:图1 模块CORNA1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CORNAL ISawIN<=t1;bwIN<=t2;END PROCESS;END behav;2.3.2 送数据模块的设计送数据模块CH41A的vhdl程序描述如下:图2 模块CH41ALIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CH41A ISPORT(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 ISBEGINPROCESS(sel)BEGINCASE sel ISWHEN”100”=>q<=d0;WHEN”101”=>q<=d1;WHEN”000”=>q<=d2;WHEN others=>q<=d3;END CASE;END PROCESS;END behav;2.3.3 产生数码管片选信号模块的设计产生数码管片选信号模块sel的vhdl程序描述如下:图3数码管片选信号模块sel LIBRARY IEEE;USE IEEE.S TD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY sel ISPORT(clk:IN STD_LOGIC;sell:OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END sel;ARCHITECTURE behav OF sel ISBEGINPROCESS(clk)VARIABLE tmp:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINIF clk’event and clk=’1’ THENIF tmp=”000” THENt mp:=”001”;ELSIF tmp=”001” THENt mp:=”100”;ELSIF t mp=”100” THENt mp:=”101”;ELSIF tmp=”101” THENt mp:=”000”;END IF;END IF;sell<=tmp;END PROCESS;END behav;2.3.4 7段译码器模块的设计7段译码器模块disp的vhdl的程序描述如下:图4 7段译码器模块disp LIBRARY IEEE;USE IEEE.S TD_LOGIC_1164.ALL;ENTITY disp ISPORT(d:IN STD_LOGIC_VECTOR(3 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END disp;ARCHITECTURE behav OF disp ISBEGINPROCESS(d)BEGINCASE d ISWHEN”0000”=>q<=”0111111”;WHEN”0001”=>q<=”0000110”;WHEN”0010”=>q<=”1011011”;WHEN”0011”=>q<=”1001111”;WHEN”0100”=>q<=”1100110”;WHEN”0101”=>q<=”1101101”;WHEN”0110”=>q<=”1111101”;WHEN”0111”=>q<=”0100111”;WHEN”1000”=>q<=”1111111”;WHEN others=>q<=”1101111”;END CASE;END PROCESS;END behav;3.设计结果与分析3.1系统的波形仿真图5所示为A方发球,在恰当的时候B方接到球,当球回到A方时,A方又接到球,但B方再也没有接到球的仿真波形。
乒乓球游戏机EDA课程设计完整版本
本文主要介绍了一款基于FPGA可编程硬件的乒乓球游戏机的设计。
本文将重点介绍
如何利用FPGA技术来搭建可编程硬件电路,如何使用Verilog HDL语言来设计数字电路,如何使用Quartus II环境来实现复杂任务,以及如何利用FPGA来完成乒乓球游戏机的EDA课程设计。
首先,在设计乒乓球游戏机的FPGA可编程硬件系统时,最重要的是硬件架构设计,
选择固定板来作为FPGA控制器,能够有效地根据游戏需求控制其各个功能,保证游戏机
运行稳定性和可靠性。
为了满足乒乓球游戏机的需求,FPGA控制器引入Verilog HDL语言,用数字电路的方式进行设计,从而构建出模拟端口,使用I/O 端口对乒乓球系统进行控制,其内部控制器模块实现了所有的乒乓球游戏逻辑功能。
在设计主板的时候,FPGA
中实现的硬件电路会结合安装在主板上的器件,比如七段LED显示器、微型键盘、LED灯等,从而使乒乓球游戏机更加复杂,实现更多的功能。
接下来,使用Quartus II环境,实现乒乓球游戏机的EDA课程设计。
首先,在Quartus II中编写Verilog HDL语言编程,利用FPGA可编程硬件系统设计乒乓球游戏逻辑,构建出特定的模块,实现系统的功能。
其次,编写控制逻辑,运用Verilog HDL语言
编程,在FPGA硬件中得到设计的图像图案,以及搭建复杂的乒乓球游戏的系统结构,实
现乒乓球游戏的控制逻辑功能。
最后,完成了乒乓球游戏机的EDA课程设计。
乒乓球游戏电路设计一、乒乓球设计方案(1)我们设计的乒乓球游戏是以一排发光二极管交替发光指示乒乓球的行进路径, 其行进的速度可由输入的时钟信号控制。
乒乓球比赛是甲乙双方的比赛, 所以用两个按键模拟左右两个球拍;我们还要设计一个乒乓球控制模块, 即当发光二极管到最后一个的瞬间, 若检测到对应的表示球拍的键的信号, 立即使“球”反向运行, 如果此瞬间没有接到按键信号, 将给出失败鸣叫, 同时为对方记1分, 并将记分显示出来, 然后由对方重新发球以此类推;还要设计失球计数器的高低位计数模块;乒乓球行进方向控制模块, 主要由发球键控制;还要有一个失球提示发生模块。
(2)要知道乒乓球的游戏规则, 以多少分为一局, 谁先得到一定的分数谁就赢一局, 以此来判断输赢。
(3)用数码管显示双方的得分, 还要设计一个十进制计数器, 来显示分数。
(4)在乒乓球设计方案时还要考虑球速的问题。
二、乒乓球游戏电路的设计程序1.LIBRARY IEEE;--乒乓球游戏顶层文件use ieee.std_logic_1164.all;entity TENNIS isport(bain,bbin,clr,clk,souclk:in std_logic;ballout:out std_logic_vector(7 downto 0);countah,countal,countbh,countbl:out std_logic_vector(3 downto 0);lamp,speaker:out std_logic);end entity TENNIS;architecture ful of TENNIS iscomponent soundport(clk,sig,en:in std_logic;sout:out std_logic);end component;component ballctrlport(clr,bain,bbin,serclka,serclkb,clk:in std_logic; bdout,serve,serclk,ballclr,ballen:out std_logic);end component;component ballport(clk,clr,way,en:in std_logic;ballout:out std_logic_vector(7 downto 0));end component;component boardport(ball,net,bclk,serve:in std_logic;couclk,serclk:out std_logic);end component;component cou10port(clk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0));end component;component cou4port(clk,clr:in std_logic;cout:out std_logic;qout:out std_logic_vector(3 downto 0));end component;component mwayport(servea,serveb:in std_logic;way:out std_logic);end component;signalnet,couclkah,couclkal,couclkbh,couclkbl,cah,cbh:std_logic; signalserve,serclka,serclkb,serclk,ballclr,bdout,way,ballen:std_lo gic;signal bbll:std_logic_vector(7 downto 0);beginnet<=bbll(4);ballout<=bbll;lamp<=clk;uah:cou4 port map(couclkah,clr,cah,countah);ual:cou10 port map(couclkal,clr,couclkah,countal);ubh:cou4 port map(couclkbh,clr,cbh,countbh);ubl:cou10 port map(couclkbl,clr,couclkbh,countbl); ubda:board port map(bbll(0),net,bain,serve,couclkal,serclka);ubdb:board port map(bbll(7),net,bbin,serve,couclkbl,serclkb);ucpu:ballctrlportmap(clr,bain,bbin,serclka,serclkb,clk,bdout,serve,serclk, ballclr,ballen);uway:mway port map(serclka,serclkb,way);uball:ball port map(clk,ballclr,way,ballen,bbll);usound:sound port map(souclk,ballen,bdout,speaker);end ful;2.library ieee;use ieee.std_logic_1164.all;entity sound isport(clk:in std_logic; --发声时钟sig:in std_logic; --正确接球信号en:in std_logic; --球拍接球脉冲sout:out std_logic); --提示声输出, 接小喇叭end entity sound;architecture ful of sound isbeginsout<=clk and (not sig) and en;--球拍接球, 没接到时, 发提示声end ful;3.library ieee; --总控制模块use ieee.std_logic_1164.all;entity ballctrlisport(clr:in std_logic; --系统复位bain:in std_logic; --左球拍bbin:in std_logic; --右球拍seclka:in std_logic; --左拍准确接球或发球serclkb:in std_logic; --右拍准确接球或发球clk:in std_logic; --乒乓球灯移动时钟bdout:out std_logic; --球拍接球脉冲serve:out std_logic; --发球状态信号serclk:out std_logic; --球拍正确接球信号ballclr:out std_logic; --乒乓球灯清零信号ballen:out std_logic); --乒乓球灯使能end entity ballctrl;architecture ful of ballctrl issignal bd:std_logic;signal ser:std_logic;beginbd<=bain or bbin;ser<=serclka or serclkb;serclk<=ser;--球拍正确接球信号bdout<=bd; --球拍接球脉冲process(clr,clk,bd)beginif(clr='1')then --系统复位serve<='1'; --系统处在职发球状态ballclr<='1'; --乒乓球灯清零elseif(bd='1')then --系统正常--球拍发球或接球时ballclr<='1'; --乒乓球灯清零if(ser='1')then --球拍发球或准确接球ballen<='1'; --乒乓球灯使能允许serve<='0'; --系统处在接球状态else ballen<='0';serve<='1'; --系统处在发球状态end if;else ballclr<='0';--没发球或接球时乒乓球灯不清零end if;end if;end process;end ful;4.--乒乓球灯模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ball isport(clk:in std_logic; --乒乓球灯前进时钟clr:in std_logic; --乒乓球灯清零way:in std_logic; --乒乓球灯前进方向en:in std_logic; --乒乓球灯使能ballout:out std_logic_vector(7 downto 0));--乒乓球灯end entity ball;architecture ful of ball issignal lamp:std_logic_vector(9 downto 0);beginprocess(clk,clr,en)beginif(clr='1') then lamp<="1000000001";--清零elsif en='0' thenelsif (clk'event and clk='1')then--使能允许, 乒乓球灯前进时钟上升沿if(way='1') then lamp(9 downto 1)<=lamp(8 downto 0);lamp(0)<='0';--乒乓球灯右移else lamp(8 downto 0)<=lamp(9 downto 1); lamp(9)<='0';--乒乓球灯左移end if;end if;ballout<=lamp(8 downto 1);end process;end ful;5.--乒乓拍模块library ieee;use ieee.std_logic_1164.all;entity board isport(ball:in std_logic; --接球点, 也就是乒乓球灯的末端net:in std_logic; --乒乓球灯的中点, 乒乓球过中点时, counclk、serclk复位bclk:in std_logic; --球拍接球信号serve:in std_logic; --发球信号couclk:out std_logic;serclk:out std_logic);end entity board;architecture ful of board isbeginprocess(bclk,net)beginif(net='1')then serclk<='0';couclk<='0';--乒乓球过中点时, counclk、serclk复位elsif(bclk'event and bclk='1')then—球拍接球时if(serve='1')then serclk<='1';--系统处于发球状态时—发球成功else—系统处于接球状态if(ball='1')then serclk<='1';--乒乓球刚落在接球点上, 接球成功else serclk<='0';couclk<='1';end if;end if;end if;end process;end ful;6.--十进制计数器用来做失球低位计数library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;serveb:in std_logic;way:out std_logic);end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';elsif(serveb='1')then way<='0';end if;end process;end ful;7、--四进制计数器用来做失球高位计数library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;serveb:in std_logic;way:out std_logic);end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';elsif(serveb='1')then way<='0';end if;end process;end ful;8、--乒乓球前进方向产生模块library ieee;use ieee.std_logic_1164.all;entity mway isport(servea:in std_logic;--左选手发球信号serveb:in std_logic;--右选手发球信号way:out std_logic);--乒乓球灯前进方向信号end entity mway;architecture ful of mway isbeginprocess(servea,serveb)beginif(servea='1')then way<='1';--左选手发球方向向右elsif(serveb='1')then way<='0';--右选手发球方向向左end if;end process;end ful;三、乒乓球游戏程序的仿真波形仿真波形图四、硬件测试方法然后我们就要测试硬件, 下载文件。
目录1 引言 (1)1.1设计背景 (1)1.2VHDL简介 (1)1.3Q UARTUSⅡ简介 (3)2 乒乓球比赛游戏机的设计 (3)2.1系统设计要求 (3)2.2设计思路 (4)3 乒乓球比赛游戏机的实现 (6)3.1乒乓球比赛游戏机的顶层原理图 (6)3.2系统各功能模块的实现 (6)3.2.1 比赛控制模块 (6)3.2.2 记分模块 (7)3.2.3 数码管显示模块 (8)4 各个模块的仿真以及系统仿真、分析 (9)4.1比赛控制模块仿真波形 (9)4.2记分模块仿真波形图 (9)4.3管脚锁定 (10)4.4系统的波形仿真 (11)4.5显示结果的几种情况 (14)5 总结 (15)5.1设计制作过程中遇到的问题及解决方案 (15)5.2本设计有以下几个可以改进的地方 (15)参考文献 (16)附录 (17)游戏控制模块的VHDL程序 (17)记分模块的VHDL程序 (19)动态扫描模块的VHDL程序 (20)译码器模块的VHDL程序 (21)1 引言1.1 设计背景1.2 VHDL简介硬件描述语言已经有几十年的发展历史,并且在系统的仿真、验证和设计、综合等方面得到成功的应用。
目前常用的硬件描述语言有VHDL、Verilog HDL、ABEL等[2][3][4]。
VHDL则起源于20世纪70年代末和80年代初,美国国防部提出的VHSIC计划,目标是为下一代集成电路的生产、实践阶段性的工艺极限和完成10万门级以上的电路设计而建立一种新的描述方法[5]。
VHDL的英文全称为Very-High-Speed Integrated Circuit Hardware Description Language,是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。
VHDL具有很多的优点使它能够被大多数人认可,被广泛应用在逻辑电路的设计方面,并且成为了标准化的硬件描述语言,其优点如下:(1)功能强大和设计灵活。
EDA课程设计之乒乓球游戏机乒乓球是我国非常流行的一项体育运动,它既可以作为一项竞技运动,也可以作为一项休闲娱乐活动。
乒乓球游戏机是一种将乒乓球运动与电子游戏相结合的娱乐设备,通过电子屏幕和操纵杆模拟真实的乒乓球比赛,使玩家能够在室内环境中享受乒乓球运动的乐趣。
本文将从乒乓球游戏机的设计思路、功能和优势等方面进行详细介绍。
首先,乒乓球游戏机的设计思路是将真实的乒乓球比赛场景还原到电子游戏中。
通过操纵杆控制游戏中的球拍移动,并通过电子屏幕实时显示球的运动轨迹和计分情况,使玩家能够真实地感受到乒乓球比赛的紧张和刺激。
同时,乒乓球游戏机还可以根据玩家的操作水平设置不同的难度,提供多种游戏模式和关卡,使游戏更具娱乐性和挑战性。
其次,乒乓球游戏机的主要功能包括游戏模式选择、角色扮演、多人对战、即时对战等。
玩家可以根据自己的喜好选择不同的游戏模式进行游戏,例如单人模式、双人模式、联网对战模式等。
在游戏过程中,玩家可以选择不同的角色扮演,并通过不断挑战更高难度的关卡来提高自己的技术水平。
同时,乒乓球游戏机还支持多人对战和即时对战功能,玩家可以与朋友或其他玩家进行真人对战,增加游戏的互动性和竞技性。
乒乓球游戏机的优势主要体现在以下几个方面。
首先,乒乓球游戏机可以在室内环境中提供真实的乒乓球比赛体验,避免了受天气、场地等外界因素的影响。
其次,乒乓球游戏机采用电子屏幕显示球的运动轨迹和计分情况,可以实时调整比赛难度和计分规则,方便了玩家的操作和记录。
再次,乒乓球游戏机支持多种游戏模式和关卡,玩家可以根据自己的喜好选择不同的游戏方式,增加了游戏的可玩性和趣味性。
最后,乒乓球游戏机还可以通过联网对战功能,与其他玩家进行真人对战,增加了游戏的竞技性和社交性。
总之,乒乓球游戏机是一种将乒乓球运动和电子游戏相结合的娱乐设备,通过电子屏幕和操纵杆模拟真实的乒乓球比赛,使玩家能够在室内环境中享受乒乓球运动的乐趣。
它的设计思路是将真实的乒乓球比赛场景还原到电子游戏中,主要功能包括游戏模式选择、角色扮演、多人对战、即时对战等。
1设计目的 (1)2设计要求和任务 (1)2.1设计任务 (1)2.2设计要求 (1)3总体设计思路及原理描述 (1)4分层次方案设计及代码描述 (2)4.1 控制模块的设计 (2)4.1.1 cornal 模块分析 (2)4.1.2 cornal 模块VHDL程序描述 (3)4.2送数据模块的设计 (7)4.2.1 ch41a 模块分析 (7)4.2.2 ch41a 模块VHDL程序描述 (7)4.3产生数码管片选信号模块的设计 (8)4.3.1 sel 模块分析 (8)4.3.2 sel 模块VHDL程序描述 (9)4.4七段译码器模块的设计 (10)4.4.1 disp 模块分析 (10)4.4.2 disp 模块VHDL程序描述 (10)4.5顶层原理图设计 (11)5各模块的时序仿真图 (12)6 总结 (14)7 参考文献 (14)乒乓游戏机1设计目的掌握熟悉的使用Quartus II 9.1 软件的原理图绘制,程序的编写,编译以及仿真。
体会使用EDA综合过程中电路设计方法和设计思路的不同。
掌握使用EDA工具设计乒乓游戏机的的设计思路和设计方法。
2设计要求和任务2.1设计任务设计一个乒乓球游戏机,该机模拟乒乓球比赛的基本过程和规则,并能自动裁判和几分。
2.2设计要求(1)甲乙双方各在不同的位置发球或击球。
(2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定,球移动的速度为0.1-0.5 秒移动一位。
(3)11分为一局,甲乙双方都应设置各自的几分牌,任何一方先记满11分,该方胜出。
当记分牌清零后,重新开始。
3总体设计思路及原理描述由乒乓游戏机功能,用原理图作为顶层模块,再将底层划分成四个小模块来实现: (1)c ornal模块:整个程序的核心,它实现了整个系统的全部逻辑功能;(2)c h41a模块:在数码的片选信号时,送出相应的数据;(3)s ei模块:产生数码管的片选信号;(4)d isp模块:7段译码器。
《电子设计自动化(EDA)技术》课程设计报告题目: 乒乓球比赛游戏机姓名:院系:专业:学号:指导教师:完成时间: 年月日目录1 课程设计题目、内容与要求………………………………1.1 设计内容………………………………………………1.2 具体要求………………………………………………2 系统设计……………………………………………………2.1 设计思路………………………………………………2.2 系统原理(包含:框图等阐述)与设计说明等内容3 系统实现……………………………………………………注:此部分阐述具体实现,包含主要逻辑单元、模块、源代码等内容4 系统仿真……………………………………………………5 硬件验证(操作)说明……………………………………6 总结………………………………………………………7 参考书目…………………………………………………1课程设计题目、内容与要求1.1课程设计的题目乒乓球比赛游戏机1.2课程设计目的随着科学技术日益迅速的发展,数字系统已经深入到生活的各个方面。
它具有技术效果好,经济效益高,技术先进,造价较低,可靠性高,维修方便等许多优点。
使我们更加熟练掌握数字系统的设计。
对所学的专业知识有能力更好的应用在实践方面。
1.3课程设计要求(1)使用乒乓球游戏机的双方在不同位置发球或击球。
(2)乒乓球的位置和移动方向由灯亮和依次亮的方向决定。
使用者根据球的位置发出相应的动作(3)比赛用21分为一局来进行,双方设置各自的记分牌,任意一方先记满21分就获胜此局。
当记分牌清零后,开始新的一局比赛。
1.4课程设计内容设计一个由甲乙双方参赛,有裁判的三人乒乓球游戏机。
用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依次从左到右,或从右到左,其移动的速度应能调节。
当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按纽开关,即表示启动球拍击球,若击中,则球向相反方向运动;若未中,球掉出桌外,则对方得一分。
乒乓球游戏机的EDA设计1.硬件设计:处理器选择:乒乓球游戏机需要支持游戏运行和实时计算,因此需要选择性能较高的处理器。
一般来说,可以选择ARM架构的处理器,比如Cortex-A系列或者Cortex-M系列。
输入输出设备:乒乓球游戏机需要支持玩家的交互操作,因此需要选择适合的输入输出设备。
常见的输入设备包括按钮、摇杆和触摸屏等,输出设备可以是显示屏和音频喇叭。
显示屏:乒乓球游戏机的显示屏需要具备较高的刷新率和低的输入延迟,以提供流畅的游戏体验。
可以选择TFTLCD显示屏或者OLED显示屏,并根据实际需求确定分辨率、尺寸和驱动方式。
音频系统:乒乓球游戏机需要提供逼真的游戏音效和背景音乐,因此需要选择适合的音频解码芯片和音频输出设备。
2.软件设计:游戏逻辑:乒乓球游戏机的游戏逻辑包括乒乓球运动轨迹计算、碰撞检测和得分计算等。
可以使用编程语言如C++或者Python来实现游戏逻辑。
界面设计:乒乓球游戏机的界面设计需要美观且易用,可以使用图形界面库如Qt或者GTK来设计游戏界面。
输入处理:乒乓球游戏机的输入处理需要对玩家的操作进行检测和解析,可以使用按键扫描或者触摸屏事件处理技术来实现输入处理。
图像渲染:乒乓球游戏机的图像渲染需要实时更新,以提供流畅的游戏画面。
可以使用OpenGL或者直接操作图形硬件来实现图像渲染。
3.电路设计:电源管理:乒乓球游戏机需要提供稳定的电源供给,可以设计一个电源管理电路来管理电池供电和充电等功能。
信号处理:乒乓球游戏机的信号处理主要包括模拟信号采集、数字信号处理和通信接口设计等。
可以使用模数转换器(ADC)和数字信号处理器(DSP)等芯片来实现。
外设接口:乒乓球游戏机需要提供外设接口来连接输入输出设备和扩展模块,可以选择串行接口(如UART、SPI或者I2C)或者并行接口来实现。
总结:乒乓球游戏机的EDA设计涉及到硬件、软件和电路设计的多个方面。
在硬件设计方面,需要选择适合的处理器、输入输出设备、显示屏和音频系统。
燕山大学EDA课程设计报告书题目:乒乓球游戏机姓名:学号:成绩:(注:此文件应以同学学号为文件名)一、设计题目及要求I.题目名称:乒乓球游戏机要求:1.用8 个发光二极管表示球;用两个按钮分别表示甲乙两个球员的球拍;2.一方发球后,球以固定速度向另一方运动(发光二极管依次点亮),当球达到最后一个发光二极管时,对方击球(按下按钮)球将向相反方向运动。
过早或过晚击球视为犯规,系统自动给对手加1 分;3.甲、乙各有两个数码管计分(11 分制),每两球换一次发球权。
4.裁判有一个按钮,系统初始化和每次得分后按下一次,发球方的第一个LED 会被点亮。
二、设计过程及内容I. 总体设计乒乓球比赛是由甲乙双方参赛,加上裁判的三人游戏,乒乓球比赛模拟机是用发光二极管(LED )模拟乒乓球运动轨迹的电子游戏机。
图1 乒乓球模拟机框图 发光二极管 双向移位寄存器(ball ) 时钟控制电路(fenpinqi )控 制 电 路 (control) 计数器1 (counter) 计数器2 (counter) 选手P1 裁判 选手P2 扫频电路显示得分 控制发球权电路 (judge )根据设计任务,对照图乒乓球比赛模拟图,可以分为五个模块进行设计: 1. 乒乓球电路(ball模块):模拟球的移动轨迹;球迹移动电路可采用双向移位寄存器方法实现,由发光二极管作光点模拟乒乓球移动的轨迹。
2.驱动控制电路(control模块、judge模块):实现电路的控制;由双D 触发器及逻辑门电路构成,通过此电路来控制并且实现球台灯的左右移位即实现乒乓球的运动。
同时,我们利用十六进制计数器设计了裁判控制电路judge模块来控制发球权的交替,实现每两球换一次发球权。
3. 计分电路(counter模块):实现计分功能;使用两片十进制的计数器、逻辑门组成计分电路,实现11进制计数功能并且输出bcd码以供后续电路显示。
使用JK触发器实现计数对本模块的封锁和开启功能,便于两计分电路的信息交流实现联合计数功能。
乒乓球游戏机的设计学生:xxx指导老师:胡滨摘要:本课程设计制作了一个乒乓球游戏机。
在课程设计中,系统开发平台为MAX+PLUSII,程序设计语言为VHDL。
设计的乒乓球游戏机能够正确判断与显示乒乓球的位置,并能自动裁判和记分的装置。
本课程设计了乒乓球游戏机程序并进行了程序仿真,从而实现一个完整的乒乓球游戏机。
程序通过调试运行,初步实现了设计目标,可应用于实际的乒乓球游戏比赛中。
本论文对系统的功能设计、实现流程及正确使用都做了详细的描述。
关键词:乒乓球游戏机;VHDL;MAX+PLUSⅡ;程序仿真;目录1引言 (1)1.1课题设计的目的 (1)1.2课题设计的内容 (1)2EDA、VHDA简介 (3)2.1EDA的发展概况 (3)2.2硬件描述语言---VHDL (3)3乒乓球游戏机设计过程 (5)3.1设计规划 (5)3.2各个模块原理及程序 (6)3.2.1乒乓球实体的设计 (6)3.2.2状态机编程实现 (7)3.2.3记分译器的设计 (10)3.2.4构造体的设计 (12)4系统编译和波形仿真 (14)4.1系统编译 (14)4.2系统有关波形的仿真 (14)结束语 (17)致谢 (17)参考文献 (18)唐艳丽《乒乓球游戏机的设计》第1页共16页1引言随着科学技术的发展,人类社会已进入到高度发达的信息化社会,信息社会的发展离不开电子产品的进步。
现代电子产品的发展越来越快,各种新型电子元器件和智能化的电子产品已经在国民经济的各个领域和人民生活的各个方面得到了日益广泛的应用。
实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。
其中电子玩具的发展也是在日益成熟。
乒乓球游戏机控制电路是有甲、乙双方参赛,有裁判控制发“球”的三人乒乓球游戏机;它能完成自动裁判和自动计分是一个带数字显示的模拟游戏机。
其结构简单、成本低、易操作,安全性强、无污染。
乒乓球游戏机还能在娱乐的同时提高我们的反应、应变能力。
具有良好的市场发展前景[1]。
1.1课题设计的目的本文应用状态机,设计了一个乒乓球游戏机的状态机。
状态机的实现是符合人的思维逻辑的,且简单明了[2]。
计算机组成原理课程设计是重要的综合性实践教学环节。
(1)通过该课程设计,结合计算机科学的理论、抽象和设计三种形态,进一步掌握计算机中各功能部件的工作原理和逻辑实现,熟悉乒乓球游戏机的基本工作原理。
(2)通过该课程设计的学习,总结计算机组成原理课程的学习内容,运用所学的数字电路以及计算机组成和状态机的基本原理、基本知识和基本技巧,解决某一个具体的实际问题,培养综合分析和解决问题的能力。
(3)为今后分析、设计、开发以及使用计算机打下坚实的基础。
1.2课题设计的内容本文设计的是一个乒乓球游戏机的状态机。
利用VHDL,不需要按照传统的设计方法进行烦琐的状态分配、绘制状态、化简状态方程等,就可以简单地根据MDS图直接对状态机进行描述。
该设计可以实现的功能如下:(1)该设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
(2)用8个(或更多个)LED排成一条直线,以中点为界,两人乒乓游戏机是用8个发光二极管代表乒乓球台,中间两个发光二极管兼做乒乓球网,用点亮的发光二极管按一定方向移动来表示球的运动,在游戏机的两侧个设置发球和击球开关,甲乙双方按乒乓球比赛规则来操作开关。
(3)当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。
当甲方按动乒乓球开关时,靠近甲方的第一个发光二极管亮,然后发光二极管由甲方方向依次点亮,代表乒乓球的移动。
当球过网后按照设计者规定的球位乙方就可以击球。
若乙方提前击球或者未击到球,则甲方得分。
然后重新发球进行比赛。
(4)设置自动记分电路,甲、乙双方各用7段译码管进行记分显示,每计满21分为1局,然后记分清零,重新开始新一局比赛。
1该设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
2用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依次从左至右,其移动速度应能调节,在其他时候击球视为犯规,给对方加1分;都犯规,各自加1分。
3当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。
若击中,则球向相反方向移动,若未击中,则对方得1分。
4一方得1分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。
5设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局,6甲乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。
7裁判有一个按钮,是系统初始化。
2EDA、VHDL简介2.1EDA发展概况电子设计技术的核心就是EDA技术,EDA是指以计算机为工作台,融合应用电子技术、计算机技术、智能化技术最新成果而研制成的电子CAD通用软件包,主要能辅助进行三方面的设计工作,即IC设计、电子电路设计和PCB设计。
EDA 技术已有30年的发展历程,大致可分为三个阶段。
70年代为计算机辅助设计(CAD)阶段,人们开始用进行IC版图编辑、PCB布局布线,取代了手工操作。
80年代为计算机辅助工程(CAE)阶段。
与CAD相比,CAE除了有纯粹的图形绘制功能外,又增加了电路功能设计和结构设计,并且通过电气连接网络表将两者结合在一起,实现了工程设计。
CAE的主要功能是:原理图输入,逻辑仿真,电路分析,自动布局布线,PCB后分析。
90年代为电子系统设计自动化(EDA)阶段[2]。
硬件描述语言HDL是相对于一般的计算机软件语言,如:C、PASCAL而言的。
HDL语言使用与设计硬件电子系统的计算机语言,它能描述电子系统的逻辑功能、电路结构和连接方式。
设计者可利用HDL程序来描述所希望的电路系统,规定器件结构特征和电路的行为方式;然后利用综合器和适配器将此程序编程能控制FPGA和CPLD内部结构,并实现相应逻辑功能的的门级或更底层的结构网表文件或下载文件。
目前,就FPGA/CPLD开发来说,比较常用和流行的HDL主要有ABEL-HDL、AHDL和VHDL[3]。
2.2硬件描述语言——VHDLVHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE 对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA 公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分[4]。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点是多方面的[4]。
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计[4]。
3乒乓球游戏机设计过程3.1设计规划根据乒乓球比赛的过程和规则,首先游戏开始,如果一方非正确击球则另一方加分,当分数大于21时获胜,游戏结束,我们把设计流程规定如图3.1所示。
甲乙否否NNYY 图3.1设计流程图状态机设置了7个状态,分别是“等待发球状态”,“第一盏灯亮状态”,“第八盏灯亮状态”,“球向乙移动状态”,“球向甲移动状态”,“允许甲击球状态”,“允许乙击球状态”。
这是该程序中起决定作用的七个状态。
开始的时候处于“等待发球状态”,若甲发球则状态转移到“第一盏灯亮状态”,若乙发球则转移到“第八盏灯亮状态”,具体说明以甲球为例。
若发球后乙没有提前击球----规定球移动到对方第一个发光二极管时允许击球,那么状态机从“第一盏灯亮状态”转移到“球向乙移动状态”。
若在“球向乙移动状态”乙仍然没有提前击球,状态就转移到“允许乙击球状态”,在此状态下,如果乙击球了,那么状态就转移到“球向甲移动状态”。
在“第一盏灯亮状态”,“球向乙移动状态”中,如果乙击球了,就算提前击球,这样甲得游戏开始正确接发球?大于21?甲方加分乙方加分大于21?乙方胜利甲方胜利游戏结束分,状态转移到“等待发球状态”等待发球,“球向甲移动状态”之后的过程和前面的过程只不过是甲乙角色的调换而已。
状态转移规则都是一样的。
图3.2给出了乒乓球游戏机的原理图。
甲得分乙得分甲发球乙发球乙击球甲击球乙击球甲击球乙没击球甲没击球图3.2乒乓球游戏机原理图3.2各模块原理及程序该乒乓球游戏机的设计主要包括的模块与内容有:乒乓球游戏机实体的设计,游戏机编程的实现,记分译码器的设计以及构造体的设计。
直接对状态机进行描述,所有的状态均可表达为CASE_WHEN 结构中的一条CASE 语句,而状态的转移则通过IF_THEN_ELSE 语句实现。