乒乓球游戏机报告及VHDL源程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

设计报告课程名称在系统编程技术任课教师周泽华老师设计题目乒乓球游戏机班级11电子信息工程(1)班姓名卢海军学号1105011024日期2013/12/29摘要用VHDL编程模拟乒乓球比赛,电路模块由状态机、记分器、译码显示器等部分组成,对各部分编写VHDL算法,进行编译、仿真、逻辑综合、逻辑适配及程序下栽.通过GW48型EDA实验箱的验证,乒乓游戏机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。VHDL是高速集成电路硬件描述语言,目前已成为许多设计自动化工具普遍采用的标准化硬件描述语言.VHDL语言功能性强、覆盖面广、灵活性高,具有很好的实用。本文设计一个基于VHDL的乒乓游戏机模拟乒乓球比赛。设计的难点是状态机。并对其进行仿真,给出了仿真波形,完整程序可写入芯片,配合外围元器件,实现乒乓游戏机的功能。关键词:VHDL;GW48;乒乓游戏机一、系统功能概述1.系统的功能两人乒乓球游戏机是用7个发光二极管代表乒乓球台,用点亮的发光二极管按一定的方向移动来表示球的运动。在游戏机的两侧各设置一个开关,即击球开关HitA,HitB。甲乙二人按乒乓球比赛规则来操作开关。当甲按动击球开关时,靠近甲的第一个二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。当球过网(中点)时,乙方可以击球。若乙方提前或是没击中球则判乙方失分,甲方的计分牌自动加分。然后重新发球,比赛继续。比赛直到一方分数达到11分时,比赛结束。2.各项设计指标a.用两个开关表示HitA,HitB,当开关值为1时表示击球。b.设置一个复位信号RESET.当reset有效时,计分牌清0。二、系统组成以及系统各部分的设计1、系统结构描述libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitypingpangisPort(clk:inSTD_LOGIC;--时钟,与球飞行速度有关hita:inSTD_LOGIC;--A选手击球键hitb:inSTD_LOGIC;--B选手击球键reset:inSTD_LOGIC;--低电平异步复位,高电平比赛进行中led0:outSTD_LOGIC_VECTOR(3downto0);--B选手得分led1:outSTD_LOGIC_VECTOR(3downto0);led2:outSTD_LOGIC_VECTOR(3downto0);--A选手得分led3:outSTD_LOGIC_VECTOR(3downto0);light:outSTD_LOGIC_VECTOR(6downto0);--显示球飞行位置);endpingpang;architectureBehavioralofpingpangissignalascore1,ascore0,bscore1,bscore0:std_logic_vector(3downto0);--得分signalnum:integerrange0to9;--正亮着的light序号--0表示b侧落地,4表示网,8表示a侧落地,9表示全准备发球Beginprocess(clk,reset,hita,hitb)variabledir:integerrange0to2;--0:A=B;1:B=A;2:准备发球beginifreset='0'then--低电平异步复位,高电平比赛进行中num=9;dir:=2;ascore1=0000;ascore0=0000;bscore1=0000;bscore0=0000;elsifrising_edge(clk)thenifdir=2andascore11010andbscore11011then--准备发球,若已显示名次,则比赛结束,不再发球if(hita='1')then--A发球num=7;dir:=0;elsif(hitb='1')then--B发球num=1;dir:=1;elsenum=9;--无人发球,继续准备dir:=2;endif;elsifdir=0andnum0then--A=B,未落台ifhita='1'then--A连续击球两次num=9;if(bscore1=0000)then--B得分if(bscore0=1001)thenbscore0=0000;bscore1=0001;elsebscore0=bscore0+'1';endif;elsif(bscore1=0001)then--B胜利,显示名次和分数bscore1=0001;--1bscore0=1011;--bendif;dir:=2;--进入发球状态elsifhitb='1'thenifnum4then--B正常击球num=num+1;dir:=1;else--B提前击球num=9;if(ascore1=0000)then--A得分if(ascore0=1001)thenascore0=0000;ascore1=0001;elseascore0=ascore0+'1';endif;elsif(ascore1=0001)then--A胜利,显示名次和分数ascore1=0001;--1ascore0=1010;--aendif;dir:=2;--进入发球状态endif;elsenum=num-1;--球继续飞行dir:=0;endif;elsifdir=1andnum8then--B=A,未落台ifhitb='1'then--B连续击球两次num=9;if(ascore1=0000)then--A得分if(ascore0=1001)thenascore0=0000;ascore1=0001;elseascore0=ascore0+'1';endif;elsif(ascore1=0001)then--A胜利,显示名次和分数ascore1=0001;--1ascore0=1010;--aendif;dir:=2;--进入发球状态elsifhita='1'thenifnum4then--B正常击球num=num-1;dir:=0;else--B提前击球num=9;if(bscore1=0000)then--B得分if(bscore0=1001)thenbscore0=0000;bscore1=0001;elsebscore0=bscore0+'1';endif;elsif(bscore1=0001)then--B胜利,显示名次和分数bscore1=0001;--1bscore0=1011;--bendif;dir:=2;--进入发球状态endif;elsenum=num+1;--球继续飞行dir:=1;endif;elsifdir=0andnum=0then--B侧落台num=9;if(ascore1=0000)thenif(ascore0=1001)then--A得分ascore0=0000;ascore1=0001;elseascore0=ascore0+'1';endif;elsif(ascore1=0001)then--A胜利,显示名次和分数ascore1=0001;--1ascore0=1010;--aendif;dir:=2;--进入发球状态elsifdir=1andnum=8then--A侧落台num=9;if(bscore1=0000)then--B得分if(bscore0=1001)thenbscore0=0000;bscore1=0001;elsebscore0=bscore0+'1';endif;elsif(bscore1=0001)then--B胜利,显示名次和分数bscore1=0001;--1bscore0=1011;--bendif;dir:=2;--进入发球状态endif;endif;endprocess;process(num)beginlight=0000000;casenumiswhen1=light(0)='1';when2=light(1)='1';when3=light(2)='1';when4=light(3)='1';when5=light(4)='1';when6=light(5)='1';when7=light(6)='1';when8=light=1111000;--A侧落台when9=light=1111111;--准备发球when0=light=0001111;--B侧落台endcase;endprocess;led3=ascore1;led2=ascore0;led1=bscore1;led0=bscore0;endBehavioral;2.原理图3.系统的仿真波形3.下载时选择的开发系统模式以及管脚定义开发系统模式:模式5GW48开发系统工作模式:接口名称类型(输入/输出)结构图上的信号名引脚号说明clk输入CLOCK02输入1hz的时钟信号hita输入PIO16A击球hitb输入PIO05B击球…reset输入PIO27复位信号light输出PIO14-PIO824-2119-17点亮的发光二极管表示球的运动led0输出PIO23-PIO2038-35表示B得分led1输出PIO31-PIO2853-50表示B名次led2输出PIO19-PIO1630-27表示A得分led3输出PIO27-PIO2449-47,39表示A名次三、课程设计过程中遇到的问题以及解决方法在本次课程设计中,我遇到的问题就是没有设定一个裁判的功能,也就是说不能由裁判去指挥A或者是B先发球。解决方法就是在设置两个输入,starta,startb作为裁判的选择。四、实验总结:1、通过本次实验进一步掌握了使用Quartus2软件的设计流程2、这次实验综合采用VHDL语言设计程序充分锻炼了编程和调试程序的能力。实验要求较多,需要足够的耐心和高度谨慎的态度,只要将所有条件理清楚,搞清它们之间的牵制关系,一一列出,并在头脑中形成清晰的条理框架,一点点、一块块攻克。语句不难,难的是一环扣一环的编程思维,出错不要紧,关键是能坚持下去,一旦将程序调试成功一定会收获很多。我在实验过程中遇到了很多问题,通过向老师及同学请教都已基本解决,弥补了学习中的不足,受益匪浅。

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功