现代电子与系统设计总结报告项目名称:乒乓球比赛游戏机班级:物科院1005姓名:周** 沈**学号:071005** 071005**指导老师:倪**提交日期:2012/12/23封面 (1)一、设计要求 (3)二、设计的具体实现 (3)1、系统框图 (3)2、甲乙方得分显示模块 (4)3、加减计数模块 (6)4、译码模块 (8)5、控制模块 (9)6、核心问题 (12)三、结果分析 (15)四、附件 (16)1、完整电路图 (16)2、各个自制元件的VHDL程序 (16)一、设计要求设计一个乒乓球比赛游戏机(1)设计一个由甲乙双方参加,有裁判的三人乒乓球游戏机;(2)用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,期中一只点亮的LED指示球的当前位置,点亮的LED依次从左到右,或从右到左,其移动的速度应能调节;(3)当“球”(点亮的那支LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮开关,即表示启动球拍击球,若击中则球向相反方向移动,若未击中,球掉出桌外,则对方得一分;(4)设计自动计分电路,甲乙双方各用两位数码管进行计分显示,每记满11分为1局;(5)甲乙双方各设一个发光二极管表示拥有发球权,每隔2次自动交换发球权,拥有发球权的一方发球才有效;(6)其他。
二、设计的具体实现1、系统框图此系统框图分为控制模块,加/减计数模块,译码显示模块和甲乙方得分显示模块。
2、甲乙方得分显示模块甲乙双方各用两位数码管进行计分显示,通过控制模块加以控制。
甲乙得分的计数:图形:VHDL语言:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;甲乙得分的显示:图形:VHDL语言:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY xianshi ISPORT(a : IN STD_LOGIC_VECTOR(3 downto 0);y1 : OUT STD_LOGIC_VECTOR(6 downto 0);y0 : OUT STD_LOGIC_VECTOR(6 downto 0)甲乙方得分显示模块图形输入为:3、加减计数模块U/的取值实现加或者减的计数。
通过D图形:说明:ud=’1’时,计数器进行减计数;ud=’0’时,计数器进行加计数;s=’0’时,计数器正常工作;s=’1’时,计数器停止工作;reset=’1’时,计数器正常计数;reset=’0’时,计数器置数操作。
VHDL语言:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY jishu ISPORT(ud : IN STD_LOGIC;s : IN STD_LOGIC;reset : IN STD_LOGIC;d3,d2,d1,d0 : IN std_logic;clk : IN STD_LOGIC;q : buffer STD_LOGIC_VECTOR(3 downto 0) );END jishu;ARCHITECTURE jishu_architecture OF jishu ISBEGINend if;elseq<=q;end if;end if;end if;end process;END jishu_architecture;4、译码模块通过加减计数得到译码器输出。
加减计数、译码显示真值表:译码图形:VHDL语言:LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY yima ISPORT(a : IN STD_LOGIC_VECTOR(3 downto 0);y : OUT STD_LOGIC_VECTOR(9 downto 0) );END yima;ARCHITECTURE yima_architecture OF yima ISBEGINprocess(a)begin5、控制模块1、设置甲乙两方击球脉冲信号in1、in2,甲方击球信号使得加减计数器加法计数,乙方击球信号使得加减计数器减法计数,译码模块输出端Y1-Y8接LED模拟乒乓球的轨迹,Y0、Y9为球掉出桌外信号,控制模块实现移位方向的控制。
2、设置发球权拥有显示信号S1、S2,控制模块使每两次交换发球权。
3、设置捡球信号reset1,通过加减计数模块的异步置数端实现捡球,当甲方拥有发球权时,捡球信号将球放到Y1;乙方拥有发球权时,捡球信号将球放到Y8。
4、对甲、乙双方的得分进行检测,只要有一方的得分达到11,则一局结束。
5、设置裁判复位信号reset,在每局结束后将双方得分清零。
控制模块与译码模块和加减计数模块的连接:部分控制模块中VHDL语言及图形:1、jishu2LIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY jishu2 ISPORT(clk : IN STD_LOGIC;q : buffer STD_LOGIC_VECTOR(1 downto 0) );END jishu2;ARCHITECTURE jishu2_architecture OF jishu2 ISBEGINprocess(clk)beginif(clk'event and clk='1') thenif(q="11") thenq<="00";elseq<=q+1;end if;end if;end process;END jishu2_architecture;2、xuanzeLIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY xuanze ISPORT(a : IN STD_LOGIC;q1: in std_logic;q2: in std_logic;q : out STD_LOGIC);END xuanze;ARCHITECTURE xuanze_architecture OF xuanze ISBEGINprocess(a)3、dchufaqiLIBRARY ieee;USE ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY dchufaqi ISPORT(d : IN STD_LOGIC;clk : IN STD_LOGIC;q : buffer STD_LOGIC);END dchufaqi;ARCHITECTURE dchufaqi_architecture OF dchufaqi ISBEGINprocess(clk)beginif(clk'event and clk='0') thenq<=d;elseq<=q;end if;end process;END dchufaqi_architecture;6、核心问题1、由于实验箱上的频率为50MHz,译码器输出变化太快,显示在实验箱上的8个LED闪亮变化太快,以致无法识别。
因此需要降低频率后在接到加减计数模块的clk端。
图形:VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity yanshi isport(clk: in std_logic;y: buffer std_logic_vector(24 downto 0));end yanshi;architecture behave of yanshi isbeginprocess(clk)beginif(clk'event and clk='1') thenif(y="1000000000000000000000000" or y="1111111111111111111111111") then y<="0000000000000000000000000";elsey<=y+1;end if;end if;end process;end behave;2、在数码管上动态显示甲乙双方的得分。
动态显示模块:1、dongtaixianshi1的VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dongtaixianshi1 isport(clk: IN STD_LOGIC;y: buffer std_logic_vector(1 downto 0) );end dongtaixianshi1;architecture behave of dongtaixianshi1 isbeginprocess(clk)beginif(clk'event and clk='1') thenif(y="11") theny<="00";elsey<=y+1;end if;end if;end process;end behave;2、dongtaixianshi2的VHDL语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dongtaixianshi2 isport(a: in std_logic_vector(1 downto 0);yjia1,yjia0,yyi1,yyi0: in STD_LOGIC_VECTOR(6 downto 0);y: out std_logic_vector(6 downto 0);pianxuan: out std_logic_vector(3 downto 0));end dongtaixianshi2;architecture behave of dongtaixianshi2 isbeginprocess(a)begincase a iswhen "00" => y<=yjia1;pianxuan<="0111";when "01" => y<=yjia0;pianxuan<="1011";when "10" => y<=yyi1;pianxuan<="1101";when OTHERS => y<=yyi0;pianxuan<="1110";end case;end process;end behave;三、结果分析注:本实验采取实际测试的方法。