1、1、设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。2、用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右,或从右到左,其移动的速度应能调节。3、当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。若击中,则球向相反方向移动;若未击中,则对方得1分。一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后方能继续比赛。4、设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。5、甲、乙双方各设一个发光二极管,表示拥有
2、发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2013.3.4 指导教师 专业负责人 2013年 3月8日一、设计思想1、基本原理乒乓球比赛游戏机的设计的原理是应用可编程逻辑器件FPGA芯片为控制核心,附加少量的外围电路,采用VHDL语言编程实现设计而成。此游戏机为由甲,乙双方参赛,裁判参与的3人乒乓球游戏机。用8个LED排成一条直线,以中点为界,两边各自
3、代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依此从左到右或从右到左。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每计满21分为1局。游戏机的甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动交换发球权,拥有发球权的一方发球才有效。以此,来实现乒乓球比赛游戏机的游戏功能。2、设计框图图1乒乓球比赛游戏系统设计框图该乒乓球比赛游戏系统由裁判端、选手端、控制端、译码器、数码管显示端、时钟及分频器、LED发光二极管球台组成。二、设计步骤和调试
4、过程1、模块设计和相应模块代码该乒乓球比赛游戏机主要包括:乒乓球游戏机外接端口模块设计,比赛状态进程模块设计,译码分数显示模块的设计以及构造体模块设计。(1)乒乓球游戏机外接端口设计 端口设计主要是指定义乒乓球游戏机的控制芯片外接输出与输入相连接的端口。其中包括:复位端口reset,它的作用是当系统出现错误或者无法恢复初始状态时使其复位;甲、乙发球输入端为pat1和pat2,逻辑1分别表示甲方和乙方的发球,逻辑0分别表示甲乙未发球;甲乙击球输入端hit1和hit2,逻辑1分别表示甲击球和乙击球,逻辑0分别表示甲乙未击球;比赛开始按钮start,逻辑1表示开始游戏;逻辑0表示不可以开始游戏;时钟
5、输入端口clk。发光二极管的输出端,逻辑1表示亮,逻辑0表示暗;甲乙各两个译码器。程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; -引用必要的库函数和包集合entity ppyouxi is -实体名为ppyouxi port(reset:in std_logic;clk:start:pat1,pat2:in std_logic_vector(1 to 2);hit1,hit2: -定义各输入输入端口 light:out std
6、_logic_vector(1 to 8); -控制8个发光二极管的输出端口write11,write12,write21,write22:out std_logic_vector(1 to 7); -4 个用于控制 4 个 7 段译码器的输出端口 end ppyouxi;(2)比赛状态进程模块设计 比赛状态进程包括七个状态,分别是waitpat, lighton1, ball2, allow2,lighton8,ball1,和allow1它们代表的具体数值依次是0到6。在波形模拟图中是用数值来表示状态的。状态进程程序如下:process(clk) -clk作为敏感信号触发进程 begin i
7、f reset=1 then -异步置位i=0;count1=00000;count2 -进程处于等待发球状态case serve iswhen 10= i=1;stateend case;when lighton1= -进程处于第一盏灯亮状态=2if hit2=count1+1;=waitpat;else=ball2;end if;when lighton8= -进程处于第八盏灯亮状态 =7;if hit=count2+1;=ball1;when ball1= -进程处于球向乙移动状态if hit1=elsif i=2 then i=allow1;else i -进程处于球向乙移动状态 ou
8、nt1elsif i=7 then i -进程处于允许甲击球状态 then i=2;else count2 -进程处于允许乙击球状态 then ielse count1end process;(3)译码分数显示模块 该模块由七段译码器组成,它是由7段发光二极管组成的用于显示数字的器件,称作记分译码器(mudecoder)。而状态进程中的记分是由5位二进制码来表示的,即count1和count2。以下程序就是实现从5位二进制码转换成七段译码显示。entity mudecoder is 译码器实体定义 port(binaryin:in std_logic_vector(1 to 5); -5位二进
9、制码的输入端口 bcdout1: -七段译码器输出端口 bcdout2:out std_logic_vector(1 to 7) );end mudecoder;architecture m of mudecoder is signal tembinaryin:std_logic_vector(1 to 5); begin process(binaryin) tembinaryin=binaryin; case tembinaryin is -将二进制码转换成七段译码 whenbcdout11111110bcdout20000101100000001011011010001111110010010001100110010110110110011010111110011111100000100011111110100111110110101001011011000110101111
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1