DSP乒乓球游戏设计.doc_第1页
DSP乒乓球游戏设计.doc_第2页
DSP乒乓球游戏设计.doc_第3页
DSP乒乓球游戏设计.doc_第4页
DSP乒乓球游戏设计.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电 子 信 息 与 电 气 工 程 系课程设计报告设计题目: DSP乒乓球游戏设计系 别: 年级专业: 学 号: 学生姓名: 指导教师: 目录一 摘要 1二 任务书 .1三 系统框图与引脚. 1四 乒乓球游戏状态转移图. 2五 乒乓球游戏VHDL设计RTL综合电路结构图. 3六 源程序及其仿真波形. 4(1)乒乓球游戏顶层文件 5(2)失球提示发声模块文件.6(3)乒乓球前进方向产生模块文件.7(4)四进制计数器用来做失球高位计数文件 7(5)十进制计数器用来做失球低位计数文件.8(6)乒乓拍模块文件.9(7)乒乓球灯模块文件 9(8)总控制模块文件.10七 总结 11八 参考文献.11 基于DSP的乒乓球游戏设计一 摘要两人乒乓球游戏是用9个发光二极管代表乒乓球台,中间的发光二极管兼做球网,以一排发光管交替发光指示乒乓球的行进路径,其行进的速度可由输入的时钟信号clk 控制。甲、乙两人按照乒乓球比赛规则来操作。board 是乒乓板接球控制模块,甲击球时靠近的第一个发光二极管亮,然后发光二极管由甲到乙依次点亮,代表乒乓球的移动。当发光管亮到最后一个的瞬间,若检测到对应的表示球拍的键的信号,立即将“球”反向运行,如果此瞬间没有接到键信号,将给出出错鸣叫,则判乙方失分,甲方的积分牌自动加分。然后重新发球,并将记分显示出来;比赛继续。比赛一直进行到一方的积分牌到达21分,该局结束。乙击球同样如此。在游戏中, cou4 和cou10 分别是失球计数器的高低位计数模块;mway 是乒乓球行进方向控制模块,主要由发球键控制;sound 是失球提示发声模块。 二 任务书(1)设计一个乒乓游戏机,该机模拟乒乓比赛的基本过程和规则,并能自动记分。(2)乒乓球的位置和移动方向由灯亮及依次点亮的方向决定。球速可调。(3)比赛按21分为一局进行,甲乙双方都应设置各自的记分牌,任何一方先记满21分,该方就算胜出。按复位键将记分牌清零后,可开始新的一局比赛。三 系统框图与引脚 输入输出引脚clk乒乓球的行进速度时钟bain 左右球拍控制信号bbin右球拍控制信号clr清0 控制souclk失球提示发声时钟ballout7.0球路行进情况,可用8 个发光管担任countbh3.0指示左边球手的得分的高位countbl3.0指示左边球手的得分的低位countah3.0指示右边球手的得分的高位countal3.0指示右边球手的得分的低位speaker 接蜂鸣器,指示失球提示lamp数码管7 的一个段,指示clock2 速度四 乒乓球游戏状态转移图五 乒乓球游戏VHDL设计RTL综合电路结构图 (前半部分) (后半部分)六 源程序及其仿真波形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;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;signal net,couclkah,couclkal,couclkbh,couclkbl,cah,cbh : std_logic;signal serve,serclka,serclkb,serclk,ballclr,bdout,way,ballen : std_logic;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 : ballctrl port map(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;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 sound;architecture ful of sound isbeginsout = clk and (not sig)and en; -球拍接球,没接到时,发提示声end;3、乒乓球前进方向产生模块文件library ieee; -乒乓球前进方向产生模块use ieee.std_logic_1164.all;entity mway isport(servea : in std_logic; -左选手发球信号 serveb : in std_logic; -右选手发球信号 way : out std_logic); -乒乓球灯前进方向信号end 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;4、四进制计数器用来做失球高位计数文件library ieee; -四进制计数器用来做失球高位计数use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cou4 isport(clk,clr : in std_logic; cout : out std_logic; qout : out std_logic_vector(3 downto 0);end cou4;architecture ful of cou4 issignal qqout : std_logic_vector(3 downto 0);begin process(clr,clk)beginif(clr=1)then qqout = 0000;cout 0010)then qqout=0000;cout =1; else qqout=qqout+1;cout =0; end if;end if;qout = qqout;end process;end;5、十进制计数器用来做失球低位计数文件library ieee; -十进制计数器用来做失球低位计数use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cou10 isport(clk,clr : in std_logic; cout : out std_logic; qout : out std_logic_vector(3 downto 0);end cou10;architecture ful of cou10 issignal qqout : std_logic_vector(3 downto 0);beginprocess(clr,clk)beginif(clr=1)then qqout = 0000;cout 1000)then qqout =0000;cout =1;else qqout = qqout+1;cout =0;end if;end if;qout = qqout;end process;end;6、乒乓拍模块文件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 board;architecture ful of board isbeginprocess(bclk,net)beginif(net=1)then serclk = 0; couclk = 0; -乒乓球过中点时,counclk、serclk复位elsif(bclkevent 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 process;end;7、乒乓球灯模块文件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 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 (clkevent 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;8、总控制模块文件library ieee; -总控制模块use ieee.std_logic_1164.all;entity ballctrl isport(clr : in std_logic; -系统复位 bain : in std_logic; -左球拍 bbin : in std_logic; -右球拍 serclka : 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 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)begin if(clr=1)then -系统复位serve =1; -系统处在发球状态ballclr = 1; -乒乓球灯清零else -系统正常 if(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;七 总结(1) 硬件测试操作步骤:选择实验电路模式3(用琴键方式);clock5接1024Hz,为失球提示

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论