电子线路设计与仿真期末报告乒乓球游戏机.docx
- 文档编号:18414940
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:28
- 大小:453.41KB
电子线路设计与仿真期末报告乒乓球游戏机.docx
《电子线路设计与仿真期末报告乒乓球游戏机.docx》由会员分享,可在线阅读,更多相关《电子线路设计与仿真期末报告乒乓球游戏机.docx(28页珍藏版)》请在冰点文库上搜索。
电子线路设计与仿真期末报告乒乓球游戏机
《电子线路设计与仿真》
VHDL程序设计报告
学院:
专业:
班级:
姓名:
学号:
年月日
基于VHDL的乒乓球游戏电路设计
摘要:
用VHDL编程模拟乒乓球比赛,电路模块由状态机、记分器、译码显示器与时钟分频器等部分组成,利用MAXPLUSII对各部分编写VHDL算法,进行编译、仿真、逻辑综合、逻辑适配及程序下栽.通过EPF10K10LC84-4的验证,乒乓游戏机能模拟乒乓球比赛的基本过程和规则,并能自动裁判和记分。
关键词:
VHDL乒乓球游戏机MAXPLUSII
目录
一、引言1
1.1、EDA技术1
1.2、设计任务1
1.3、调研2
二、方案设计2
2.1状态机的设计思路2
2.2、输入/输出引脚4
2.3、硬件要求4
三、乒乓球程序实现4
3.1、时钟分频器4
3.2、状态机/球台控制器7
3.3、计分器13
3.4、数码管显示器14
3.4、顶层文件实现17
四、程序调试18
4.1、测试仿真18
4.2、硬件配置20
4.3、下载结果22
五、心得体会23
致谢24
参考文献24
一、引言
1.1、EDA技术
EDA(ElectronicDesignAutomation,电子设计自动化)技术是现代电子工程领域的一门新技术。
它提供了基于计算机和信息技术的电路系统设计方法。
EDA技术的发张和推广应用极大地推动了电子工业的发展。
EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合及优化,逻辑布局布线,逻辑仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。
设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果[1]。
近年来,集成电路制造技术的快速发展,一方面促进了相应设计技术的发展,另一方面也对设计技术提出了更高的要求。
当前集成电路设计,面临着功能强、性能好、规模大、成本低、设计周期短等一系列要求和挑战,这些要求和挑战引起了集成电路设计方法的全面革新。
当今,以行为设计为主要标志的新一代数字系统设计理论已形成并得到发展。
在集成电路的数字系统的系统级设计中,VHDL硬件描述语言构造的描述模型优化设计,有利于高效利用设计空间,实现设计结构的精确分析,使芯片资源得以充分利用。
1.2、设计任务
设计乒乓球游戏机,用9个发光二极管代表乒乓球台,用点亮的发光二极管按一定的方向移动来表示球的运动。
用开关来摸拟球手及裁判,裁判开关选择首发权,游戏机两侧开关为即击球开关。
球手按乒乓球比赛规则来操作开关。
当裁判按下开始键后,根据首发权的选择,发球方(甲方)按动击球开关,靠近甲的第一个二极管亮,然后发光二极管由甲向乙依次点亮,代表乒乓球的移动。
当球过网(中点)时,乙方可以击球。
若乙方提前或是没击中球则判乙方失分,甲方的计分牌自动加分(比分由七段显示器显示)。
然后重新发球,比赛继续。
比赛直到一方分数达到11分时,赢得这局比赛,总比分自动加一,且比赛暂停,等待裁判按键开始下一轮比赛,下一轮比赛开始时比分被清零但总比分不变,直至一方所赢的局数先达到4(7局4胜),则赢得整场比赛,裁判再按下按键时比分和总比分都将清零,比赛重新开始。
系统具有发球权自动交换功能,在一局比赛中每个球一换发,由发光二极管点亮的位置来表示哪一方具有发球权,一局比赛结束后,首发权也会自动交换。
1.3、调研
经过对观察实际比赛的研究,我发现比赛过程如下:
首先,裁判决定比赛开始,并确定首发权的归属。
接着,在比赛过程中,当球过网后,对方才可以击球,否则击球方得分,但当球已到底线还未击球,也会使击球方得分。
再者,每局比赛一般为11分。
最后,比赛一般为七局四胜制(以往为五局三胜制)。
二、方案设计
2.1状态机的设计思路
状态机设置了8个状态,分别是“等待游戏状态”、“游戏开始状态”、“球向B移动状态”、“球向A移动状态”、“A得分状态”、“B得分状态”、“比赛结果状态”和“返回状态”等8个状态。
如表1所列。
表1状态机的8中状态及其含义
状态
含义
Waitstate
等待游戏状态
Start
游戏开始状态
AtoB
球向B移动状态
BtoA
球向A移动状态
Ascore
A得分状态
Bscore
B得分状态
Result
比赛结果状态
Retu
返回状态
开始的时候处于“等待游戏状态”,若裁判确定谁先发球,则状态转移到“游戏开始状态”。
以裁判判定A发球为例。
若甲有发球权,则在“start”状态,B先发球无效,当A击球时,状态转移到“AtoB”状态。
此时如果B提前击球或未击到球时,状态转移到“Ascore”即A得分;若B击球成功,状态转移到“BtoA”。
在“start”状态中,会判断A或B得分是否为11分,当达到一方达到11分时,状态转移到“result”,使得相应方总比分加1,状态并转至“retu”。
在该状态下,只有裁判按下“resetf”,小比分归零,开始新一局比赛,并且交换发球权。
当一方先达到4胜时,提示获胜方胜利。
此时裁判按下“reset”键,重新比赛。
具体状态流程图如图1所示
图1乒乓球状态流程图
2.2、输入/输出引脚
输入输出引脚及其作用如表2所示
表2输入输出引脚
引脚
作用
Clk
机器时钟
Resetf
比赛开始键,对所有分数清零,状态归位
Rest
比赛中局数复位键,开始新一局比赛
Ast、Bst
裁判判定首发权
ha、hb
A和B的击球键
awin、bwin
比赛胜负状态
AFR、BFR
发球权状态
Ta[0..8]
模拟乒乓球移动的led
scorea[6..0]、scoreb[6..0]
表示每局小比分
wina、winb
表示每场比赛大比分
2.3、硬件要求
经过分析本系统需要以下硬件资源:
1)EPF10K10LC84-4芯片
2)带硬件防抖的按键3个
3)拨码开关3个
4)数码管4个
5)Led灯11个
6)晶振1个
三、乒乓球程序实现
3.1、时钟分频器
本实验用到的FPGA开发板,晶振时钟频率为20MHz,如果直接引入系统做工作频率,会导致七段数码管闪烁、LED灯乱闪和不稳定等。
为了满足系统工作在低时钟频率条件,这里用到分频电路。
为了得到稳定的时钟,采用二次分频,预分频将频率调整到1KHz,再次分频得到10Hz。
以下为分频器代码:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclockIS
PORT(Clkin:
INstd_logic;
Clkout:
OUTstd_logic);
ENDclock;
ARCHITECTUREDeviderOFclockIS
COMPONENTFre--1000Hz
PORT(Clkin:
INstd_logic;
Clkout:
OUTstd_logic);
ENDCOMPONENT;
COMPONENTFre1--10Hz
PORT(Clkin:
INstd_logic;
Clkout:
OUTstd_logic);
ENDCOMPONENT;
SIGNALClk:
std_logic;
BEGIN
G1:
Freportmap(clkin,clk);
G2:
Fre1portmap(clk,clkout);
ENDDevider;
--1ms
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFreIS
PORT(Clkin:
INstd_logic;
Clkout:
OUTstd_logic);
ENDFre;
ARCHITECTUREDeviderOFFreIS
CONSTANTN:
Integer:
=9999;--n=x-1;为2x分频
SIGNALCounter:
IntegerRANGE0TON;
SIGNALClk:
std_logic;
BEGIN
PROCESS(Clkin)
BEGIN
IF(Clkin'eventANDClkin='1')THEN
IFCounter=NTHEN
Counter<=0;
Clk<=NOTClk;
ELSE
Counter<=Counter+1;
ENDIF;
ENDIF;
ENDPROCESS;
Clkout<=Clk;
ENDDevider;
--1s
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFre1IS
PORT(Clkin:
INstd_logic;
Clkout:
OUTstd_logic);
ENDFre1;
ARCHITECTUREDeviderOFFre1IS
CONSTANTN:
Integer:
=49;--n=x-1;为2x分频
SIGNALCounter:
IntegerRANGE0TON;
SIGNALClk:
std_logic;
BEGIN
PROCESS(Clkin)
BEGIN
IF(Clkin'eventANDClkin='1')THEN
IFCounter=NTHEN
Counter<=0;
Clk<=NOTClk;
ELSE
Counter<=Counter+1;
ENDIF;
ENDIF;
ENDPROCESS;
Clkout<=Clk;
ENDDevider;
3.2、状态机/球台控制器
状态机设置了8个状态,分别是等待游戏状态(waitstate)、游戏开始状态(start)、球向B移动状态(AtoB)、球向A移动状态(BtoA)、A得分状态(Ascore)、B得分状态(Bscore)、比赛结果状态(result)和返回状态(retu)。
乒乓球游戏机中有4个计分信号IncreaseA、IncreaseB、IncreaseAA、IncreaseBB,分别表示A、B得分,A、B胜一局;一个tablestate信号,用它的数值来控制状态机外9个发光二极管的亮和暗,比如当tablestate=0时表示第一个发光二极管亮,用发光二级管的轮流发光表示球的移动轨迹。
输入状态机的信号有游戏复位resetf信号,它是1位二进制信号,数值为1表示重新开始比赛;Astart、Bstart信号,表示A或B发球;两个二进制信号hitA和hitB分别表示AB是否击球,若数值为1,表示击球,不为1表示不击球。
以下是状态机进程代码。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityzkc09211958pingpangis
port(clk:
instd_logic;
Astart,Bstart:
instd_logic;
resetf,reset:
instd_logic;
hitA,hitB:
instd_logic;
BfR,AfR:
BUFFERstd_logic;
scoreA,scoreB:
inintegerRANGE0To11;--A,B小比分
winA,winB:
inintegerRANGE0To4;
clearC,IncreaseA,IncreaseB:
outstd_logic;--总比分和小比分清零信号
clearJ:
outstd_logic;--小比分清零信号
IncreaseAA,IncreaseBB:
outstd_logic;
TAbleLight:
outstd_logic_Vector(0To8);
Awin,Bwin:
bufferstd_logic);
endzkc09211958pingpang;
ARCHITECTUREbehaviorofzkc09211958pingpangis
typestate_typeis(waitstate,start,AtoB,BtoA,Ascore,Bscore,Result,retu);
signalstate:
state_type;
signaltablestate:
integerrange0to8;
signalAst,Bst:
std_logic;
begin
process(clk,resetf)
begin
ifresetf='1'then
state<=waitstate;--进入等待状态
clearC<='1';--计分器请0
clearJ<='1';
Awin<='0';
Bwin<='0';
AFR<='0';
bFR<='0';
elsifrising_edge(clk)then
casestateis
whenwaitstate=>--裁判态
clearC<='0';--记分台均清零
clearJ<='0';
IncreaseA<='0';
IncreaseB<='0';
IncreaseAA<='0';
IncreaseBB<='0';
if((Astart='1')and(Bstart='0'))then--a首发
Ast<='1';
AfR<='1';
tablestate<=0;
state<=start;
elsif((Astart='0')and(Bstart='1'))then--b首发
Bst<='1';
BfR<='1';
tablestate<=8;
state<=start;
else
state<=waitstate;
endif;
whenstart=>
clearJ<='0';
IncreaseA<='0';
IncreaseB<='0';
IncreaseAA<='0';
IncreaseBB<='0';
if((scoreA=11)or(scoreB=11))then
AfR<=notAfR;
BfR<=notBfR;
state<=Result;--如果一方先打到11分,
比赛结束
else
if((hitA='1')and(Ast='1'))then--如果A开球(同时
有发球权)
state<=AtoB;--球从A向B方移动
Ast<=not(Ast);
Bst<=not(Bst);
tablestate<=0;--A方第一个灯亮
elsif((hitB='1')and(Bst='1'))then--如果B开球
state<=BtoA;--球从B向A方移动
Bst<=notBst;
Ast<=notAst;
tablestate<=8;--B方第一个灯亮
else
state<=start;
endif;
endif;
whenAtoB=>--球从A向B移动的过程
ifhitB='1'then--如果检测到B方击球
iftablestate<=4then--若未过网提前击球
state<=Ascore;--判A胜
else
state<=BtoA;--若过了网击球,球从B向A移动
endif;
else--若未检测到B击球
iftablestate=8then--如果离B最近的等已经亮
state<=Ascore;--判A胜
else
tablestate<=tablestate+1;--否则球继续移动
endif;
endif;
whenBtoA=>--球从A向B移动的过程
ifhitA='1'then
iftablestate>=4then
state<=Bscore;
else
state<=AtoB;
endif;
else
iftablestate=0then
state<=Bscore;
else
tablestate<=tablestate-1;
endif;
endif;
whenAscore=>--如果A胜
IncreaseA<='1';--A方加1分
state<=start;--回到等待状态
whenBscore=>
IncreaseB<='1';
state<=start;
whenResult=>--最后结果
if(scoreA=11)then--若A方达到11分
IncreaseAA<='1';--A方局数加1
else
IncreaseBB<='1';--B方局数加1
endif;
Ast<=AfR;
Bst<=BfR;
state<=retu;
whenretu=>
IncreaseA<='0';
IncreaseB<='0';
IncreaseAA<='0';
IncreaseBB<='0';
if(winA=4)then
Awin<='1';
elsif(winB=4)then
Bwin<='1';
endif;
ifreset='1'then
clearJ<='1';
state<=start;
else
state<=retu;
endif;
whenothers=>
state<=waitstate;
endcase;
endif;
endprocess;
process(clk)--控制9个发光管的亮灭
begin
iffalling_edge(clk)then
if((state=AtoB)OR(state=BtoA))then
casetablestateis
when0=>tablelight<="100000000";
when1=>tablelight<="010000000";
when2=>tablelight<="001000000";
when3=>tablelight<="000100000";
when4=>tablelight<="000010000";
when5=>tablelight<="000001000";
when6=>tablelight<="000000100";
when7=>tablelight<="000000010";
when8=>tablelight<="000000001";
whenothers=>tablelight<="000000000";
endcase;
else
tableLight<="000000000";
endif;
endif;
endprocess;
endbehavior;
3.3、计分器
计分器可以对小比分和大比分进行计分。
根据状态机给出的4个信号(IncreaseA、IncreaseB、IncreaseAA、IncreaseBB)对小比分(scoreA,scoreB)和大比分(winA,winB)进行操作。
clearC全局分数清零,clearJ小比分清零。
具体程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycounteris
port(clk:
instd_logic;
clearC,clearJ:
instd_logic;
increaseA,increaseB:
instd_logic;
increaseAA,increaseBB:
instd_logic;
scoreA,scoreB:
bufferintegerrange0to11;
winA,winB:
bufferintegerrange0to4);
endcounter;
ARCHITECTUREcountofcounteris
begin
process(clk,clearC,clearJ)
begin
ifclearC='1'then
winA<=0;
winB<=0;
elsifclearJ='1'then
scoreA<=0;
scoreB<=0;
elsiffalling_edge(clk)then
ifincreaseA='1'then
scoreA<=scoreA+1;
elsifincreaseB='1'then
scoreB<=scoreB+1;
endif;
ifincreaseAA='1'then
winA<=winA+1;
elsif
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子线路 设计 仿真 期末 报告 乒乓球 游戏机
![提示](https://static.bingdoc.com/images/bang_tan.gif)