EDA课程设计乒乓球游戏机.doc

上传人:文库蛋蛋多 文档编号:4193637 上传时间:2023-04-09 格式:DOC 页数:16 大小:3.74MB
返回 下载 相关 举报
EDA课程设计乒乓球游戏机.doc_第1页
第1页 / 共16页
EDA课程设计乒乓球游戏机.doc_第2页
第2页 / 共16页
EDA课程设计乒乓球游戏机.doc_第3页
第3页 / 共16页
EDA课程设计乒乓球游戏机.doc_第4页
第4页 / 共16页
EDA课程设计乒乓球游戏机.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《EDA课程设计乒乓球游戏机.doc》由会员分享,可在线阅读,更多相关《EDA课程设计乒乓球游戏机.doc(16页珍藏版)》请在三一办公上搜索。

1、基于FPGA的数字系统设计项目设计文档项目名称: 乒乓球比赛游戏机 姓 名: 院 系: 应用技术学院 专 业: 电子信息工程(应电应本) 学 号: 指导教师: 完成时间: 2012年 06月19日基于FPGA的数字系统设计项目成绩评价表设计题目乒乓球比赛游戏机设计要求设计一个乒乓球比赛游戏机,能模拟比赛的基本过程和规则并能自动裁判和记分,具体要求如下: (1)使用乒乓球游戏机的双方在不同位置发球或击球; (2)乒乓球的位置和移动方向由灯亮和依次亮的方向决定。使用者根据球的位置发出相应的动作;(3)比赛用11分为一局来进行,双方设置各自的记分牌,任意一方先记满11分就获胜此局。当记分牌清零后,开

2、始新的一局比赛;(4)比赛结束后音乐自动响起。设计过程用8个LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依次从左到右,或从右到左,其移动的速度应能调节。“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按纽开关,即表示启动球拍击球,若击中,则球向相反方向运动;若未中,球掉出桌外,则对方得一分。设置自动记分电路,甲乙双方各用两位数码管进行记分显示,每计满11分为1局。甲乙双方各设一个发光二极管表示拥有发球权,每隔2次自动交换发球权,拥有发球权的一方发球才有效。项目设计成绩评价评价项目指 标满分评分工

3、作量、工作态度和出勤率按期圆满的完成了规定的任务,难易程度和工作量符合教学要求,工作努力,遵守纪律,出勤率高,工作作风严谨,善于与他人合作。30课程设计质量项目设计系统架构合理,设计过程简练正确,分析问题思路清晰,结构严谨,文理通顺,撰写规范,图表完备正确。40创新工作中有创新意识,对前人工作有一些改进或有一定应用价值。15答辩能正确回答指导教师所提出的问题。15综合成绩等级指导教师: 年 月 日目 录1 项目名称、内容与要求 04页1.1 设计内容04页1.2 具体要求04页2 系统整体架构(Architecture Description) 04页2.1 设计思路04页2.2 系统原理(包

4、含:框图等阐述与设计说明等内容)04页3 系统设计 (含HDL或原理图输入设计)05页3.1 HDL 代码05页3.2 系统整体电路图(或RTL级电路图)12页4 系统仿真(Simulation Waveform)13页5FPGA实现(FPGA Implementation) 14页6 总结(Closing)16页参考书目(Reference):16页一、项目名称、内容与要求1.1项目名称乒乓球比赛游戏机1.2设计内容设计一个由甲乙双方参赛,二人乒乓球游戏机。用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的LED依次从左到

5、右,或从右到左,其移动的速度应能调节。当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按纽开关,即表示启动球拍击球,若击中,则球向相反方向运动;若未中,球掉出桌外,则对方得一分。设置自动记分电路,甲乙双方各用两位数码管进行记分显示,每计满11分为1局。甲乙双方各设一个发光二极管表示拥有发球权,每隔2次自动交换发球权,拥有发球权的一方发球才有效。1.3具体要求(1)使用乒乓球游戏机的双方在不同位置发球或击球。(2)乒乓球的位置和移动方向由灯亮和依次亮的方向决定。使用者根据球的位置发出相应的动作。(3)比赛用11分为一局来进行,双方设置各自的记分牌,任意一方先

6、记满21分就获胜此局。当记分牌清零后,开始新的一局比赛。(4)比赛结束后音乐自动响起。二、系统整体架构(Architecture Description)2.1设计思路 根据系统设计的要求,乒乓球比赛游戏机的电路原理框图如下:三、系统设计 (含HDL或原理图输入设计)3.1 VHDL 代码比赛模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all; -引用必要的库函数和包集合entity compete is -实体名为pingpong por

7、t(reset:in std_logic;clk_1:in std_logic;startbutton:in std_logic; -开始游戏输入端口serve:in std_logic_vector(1 downto 0); -发球输入端口hit1,hit2:in std_logic; -甲和乙的击球输入端口light:out std_logic_vector(1 to 8); -控制8个发光二极管的输出端口music_begin:out std_logic;-控制音乐开始的输出端口counta,countb:out std_logic_vector(3 downto 0); -2个用于控制

8、4个7段译码器的输出端口end compete;architecture one of compete istype pingpong is (waitserve,light1on,ballmoveto2,allow2hit,light8on,ballmoveto1,allow1hit);-设置7个状态,为枚举数据类型,记为pingpong signal state:pingpong;signal i:integer range 0 to 8;signal count1,count2,count3,count4:std_logic_vector(3 downto 0):=0000; -内部计数

9、器,是4位二进制变量beginprocess(clk_1) begin if(clk_1event and clk_1=1) then if count3=0001 or count4=0001 then music_begin=1;end if; if(reset=1)then music_begin=0; end if; end if; end process; process(clk_1) -状态机进程 -clk_1作为敏感信号触发进程begin -进程开始if reset=1 then -异步置位i=0;count1=0000;count2=0000;count3=0000;count

10、4=0000;elsif clk_1event and clk_1=1 then -当处于时钟inclock上升沿时 if count1=1011 theni=0;count1=0000;count2=0000;count3=count3+1;elsif count2=1011 then i=0;count1=0000;count2=0000;count4=count4+1;elsif startbutton=0 theni=0;count1=0000;count2=0000;count3=0000;count4 -进程处于等待发球状态case serve iswhen 01= i=1;sta

11、te i=8;statei i -进程处于第一盏灯亮状态i=2;if hit2=1 theni=0;count1=count1+1;state=waitserve; elsestate -进程处于第八盏灯亮状态i=7;if hit1=1 theni=0;count2=count2+1;state=waitserve;elsestate -进程处于球向乙移动状态if hit1=1 theni=0;count2=count2+1;state=waitserve;elsif i=2 then i=1;state=allow1hit;else i -进程处于球向乙移动状态if hit2=1theni=

12、0;count1=count1+1;state=waitserve;elsif i=7 then i=8;state=allow2hit;else i -进程处于允许甲击球状态if hit1=1 then i=2;state=ballmoveto2;else count2=count2+1;i=0;state -进程处于允许乙击球状态if hit2=1then i=7;state=ballmoveto1;else count1=count1+1;i=0;state=waitserve;end if;end case;end if;end if;end process;counta=count1

13、;countb=count2; -进程处i信号控制发光二极管的亮暗light=10000000when(i=1) else01000000 when(i=2) else00100000 when(i=3) else00010000 when(i=4) else00001000 when(i=5) else00000100 when(i=6) else00000010 when(i=7) else00000001 when(i=8) else00000000; -其他情况所有发光二极管都暗end one;分频模块library IEEE; use IEEE.std_logic_1164.all;

14、use ieee.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity division16 isport( cp:in std_logic; clk_4:out std_logic );end division16;architecture division_body of division16 issignal count:std_logic_vector(3 downto 0);beginprocess(cp)beginif(cpevent and cp=1)then if(count=1111)thencount0);el

15、secount=count+1;end if;end if;end process;process(cp)beginif(cpevent and cp=1)then if(count=1111)thenclk_4=1;elseclk_4qqqqqqqqqqq=0000000; end case; end process; end disp_arc;数码管选择LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux2 IS PORT(a,b: IN STD_LOGIC_VECTOR(6 downto 0);sel: IN STD_LOGIC;c:OU

16、T STD_LOGIC_VECTOR(6 downto 0);END mux2;ARCHITECTURE example OF mux2 IS BEGIN PROCESS(sel) BEGINIF(SEL=1)THEN c=a;ELSE c=b;END IF;END PROCESS;END example;音乐模块(两只老虎)library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all;entity music is port ( music_begin:in std_logic; clk_4:in std

17、_logic; clk:in std_logic; music_out:out std_logic ); end music;architecture music_body of music is constant m1:integer:=637;-955; constant m2:integer:=587;-851; constant m3:integer:=505;-758; constant m4:integer:=468;-716; constant m5:integer:=425;-639; constant m6:integer:=379;-569; constant m7:int

18、eger:=330;-506; constant m0:integer:=0; signal counter:integer range 0 to 67; signal count:integer range 0 to 1000; signal sub:integer range 0 to 1000; signal carrier:std_logic; signal pat,pat1,pat2:std_logic;beginprocess(clk) begin if(clkevent and clk=1)then if(carrier=1) then sub=count; else sub=s

19、ub-1; end if; end if; end process;process(sub) begin if(sub=0) then pat=1; else pat=0; end if; carrier=pat; end process; process(clk) begin if(clkevent and clk=1)then pat1=pat; end if; end process;process(pat1) begin if(pat1event and pat1=1) then pat2= not pat2; end if; music_out=pat2; end process;

20、process(clk_4) begin if(clk_4event and clk_4=1) then if(music_begin=1) then counter=counter+1; else countercountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcou

21、ntcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcountcount=m0; end case; end process; end music_body;3.2 系统整体电路图(或RTL级电路图)四、系统仿真(Simulation Waveform)功能仿真波形图时序仿真波形图 五、FPGA实现(FPGA Implementation)将程序下载到EDA2000实验箱然后

22、按照设定的管脚在EDA2000实验箱上连接好实物图输入脉冲,验证其功能六、总结(Closing)经过一学期的学习,在陈强老师的教导下,我对在系统编程技术这门课有了很深刻的理解,并能结合所学的知识设计了这次的乒乓球游戏机。由于实验箱上脉冲端有限,于是我又想到了要设计一个分频器,我开始设计的是16分频和64分频,因为我需要一个4Hz和1Hz的脉冲信号,但是,这样做对整个电路而言没有任何效果,无论怎样都仿真不出波形,但是代码没错,单独仿真分频器也有波形输出。当我准备放弃时,我又抱着侥幸心理只设计一个16分频的分频器,我把分频器接入电路,然后仿真,结果仿真波形出来了。然后下载到实验箱验证时,结果甲乙两

23、位选手的得分不能再同一排数码管上显示,后经过我冷静的分析,我想到了曾经做过的60进制计数器,于是我便加了个数码管选择器,这样甲乙二人的分数可以再同一排数码上显示了。经过这次实训,我收获颇丰,学到了很多知识,特别是提高了综合分析应用的能力。我学会了如何去完成一个任务,懂得了享受过程。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,一种自信心由然而生。实训是对每个人综合能力的检验。要想做好任何事,除了自己平时要有一定的功底外,我们还需要一定的实践动手能力,操作能力。此次实训,我深深体会到了积累知识的重要性。在短暂的实训过程中,让我深深的感觉到自己在实际运用中的知识的匮乏这时才真正领悟到“学无止境”的含义。参考书目(Reference):李国丽 朱维勇 电子技术实验指导书 中国科技大学出版社潘松 黄继 EDA技术实用教程 科学出版社王金明 Verilog HDL程序设计教程宋万杰 罗丰 吴顺君 CPLD技术及其应用 西安电子科技大学出版社张昌凡 龙永红 彭涛 可编程逻辑器件及VHDL设计技术 华南工学院出版社陈强 EDA技术与实验 三峡学院内部试用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号