躲避障碍游戏讲解.docx
- 文档编号:25038366
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:25
- 大小:179.06KB
躲避障碍游戏讲解.docx
《躲避障碍游戏讲解.docx》由会员分享,可在线阅读,更多相关《躲避障碍游戏讲解.docx(25页珍藏版)》请在冰豆网上搜索。
躲避障碍游戏讲解
深圳大学研究生试题纸
学院信息工程学院专业集成电路工程,电子与通信工程
课程名称数字系统设计
拟题人审题人
课程设计:
采用FPGA实现一个VGA显示的小游戏
基本要求:
1)采用Verilog语言在Spartan3AFPGA开发板实现该设计
2)该游戏应该采用纯逻辑实现,不能在FPGA内部嵌入CPU或者外接CPU
3)该游戏应该有VGA接口输出
4)该游戏应该具有按键或者其他输入方式
5)游戏的复杂度将作为一个评分依据
6)游戏的创新性和可玩性将作为一个加分依据
设计报告要求:
1.报告的格式采用标准的深圳大学设计报告格式。
2.报告中应提供CPU的工作流程说明,如果实现了高级要求,应提供新增功能的说明和介绍。
3.报告中应包括ASM图,以及verilog代码,并且代码应该与ASM图相一致。
4.设计报告应包括该电路的verilog仿真。
5.设计报告应该有布局布线后资源利用以及运行速度的评价结果。
深圳大学研究生课程论文
题目基于FPGA实现VGA的小游戏成绩
专业电子与通信工程课程名称数字系统设计
年级2014届姓名李曼曼
学号2141130208时间2015年1月15号
任课教师徐渊
摘要
本次课程设计介绍了用FPGA来驱动VGA显示躲避障碍游戏的具体实现方法。
躲避障碍的游戏规则是玩家使用方向键操控一个方块不断躲避障碍,同时方块若果到达指定位置则游戏胜利,当方块碰到障壁时游戏结束。
本课程设计采用VerilogHDL语言编写,VGA显示,状态机等相关知识。
关键词:
FPGA;VGA;VerilogHDL;躲避障碍游戏
1游戏功能概述
游戏的主要功能设计如下:
(1)方块在整个屏幕边框内可以通过按键上下左右控制进行移动;
设置屏幕分辨率为600*800,边框宽度为5,并且颜色为黄色。
方块大小为60*60颜色为红色,游戏中设有四个不断垂直下落的长方块障碍物,障碍物的长度为200,宽度为10,以不同的速率下降。
在屏幕的左上方还有一个特定的区域,没用颜色显示,有特定的坐标位置。
(2)障碍物自发下落,;
游戏中有四个不同颜色的障碍长方块,不断下落。
当小方块碰到长方块时,游戏界面停止,进入到死亡状态,障碍物也消失。
(3)游戏的三个状态和三个不同界面
当通过按键对小方块进行上下左右移动时,游戏一直停留在游戏界面。
如果小方块碰到四个当中任何一个障碍物,则游戏结束并显示一个“N”的标志表示死亡。
如果小方块到达指定的左上方区域,则游戏胜利,并显示一个“Y”的标志即游戏获胜。
不管游戏胜利或者结束,按下复位键,游戏又重新开始。
综上,本游戏设置四个按键控制小方块的移动,障碍物则自己不断下落。
A7为上按键,M4为下按键,G11为左按键,G12为右按键。
游戏通过P11开关设定为游戏的复位键,让游戏重新开始。
2系统分析和方案
2.1系统分析
本设计采用VGA显示的方式将游戏展现出来。
游戏中玩家通过四个按键控制方块的身体上下左右移动来到达指定位置以获得胜利,如果方块撞到障碍物,则游戏失败。
所要设计的躲避障碍游戏基于FPGA芯片为硬件,采用VerilogHDL语言编写程序。
在本设计中,有个5按键,分别是上、下、左、右和复位按键。
它们都是输入信号,输出是VGA,在电脑屏幕实现VGA显示游戏画面。
其系统设计结构框图如2.1所示。
图2.1躲避障碍游戏系统设计结构框图
电源给BASYS2开发板供电,将程序下载到BASYS2开发板上,用VGA线将显示器与开发板相连接,在通电情况下,游戏在显示器上显示,可通过开发板上按键控制方块的运动状态。
3硬件电路设计
3.1游戏的硬件组成
硬件电路设计包括3个模块,它们分别是:
action:
产生各个VGA扫描部件的坐标及方块和障碍的运动轨迹并控制游戏的三种状态之间的转换
vga:
vga扫描控制模块
key:
按键扫描模块
完成后的RTLview如图3.1所示。
图3.1系统总体设计
3.2VGA控制模块设计
显示器扫描方式为逐行扫描:
逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。
标准VGA一共15个接口,本设计用到的信号接口有五个,HSYNC行同步信号,VSYNC场同步信号,VGA_R、VGA_G、VGA_B三原色信号。
VGA控制模块硬件设计如图3.2.3所示。
图3.2VGA控制模块硬件设计电路
VGA接口输出模块verilog代码如下:
modulevga(clk,rst,HSYNC,VSYNC,hc,vc);
inputclk;
inputrst;
reghs;
regvs;
regvsenable;
outputHSYNC;
outputVSYNC;
outputreg[9:
0]vc;
outputreg[10:
0]hc;
always@(posedgeclkorposedgerst)
begin
if(rst)
hc<=0;
else
begin
if(hc==1039)
begin
hc<=0;
vsenable<=1;
end
else
begin
hc<=hc+1;
vsenable<=0;
end
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
vc<=0;
else
begin
if(vsenable==1)
begin
if(vc==665)
vc<=0;
else
vc<=vc+1;
end
else
vc<=vc;
end
end
assignHSYNC=hs;
assignVSYNC=vs;
always@(posedgeclkorposedgerst)
begin
if(rst)
hs<=1'b1;
elseif(hc==10'd0)
hs<=1'b0;
elseif(hc==10'd120)
hs<=1'b1;
end
always@(posedgeclkorposedgerst)
begin
if(rst)
vs<=1'b1;
elseif(vc==10'd0)
vs<=1'b0;
elseif(vc==10'd6)
vs<=1'b1;
end
endmodule
3.3移动和控制模块设计
移动控制模块是整个设计中最复杂最核心的模块。
它主要包括四个主要任务:
(1)保持四个障碍物的运动
(2)按键改变方块运动的方向
(3)判断方块是否撞到障碍物或者到达制定目标区
(4)决定VGA显示内容
开始
流程图如下:
Y
按键
Y
right
left
up
down
到达指定位置
撞到障碍物
Y
NY
死亡界面
胜利界面
复位键
躲避障碍移动控制模块硬件设计如图3.3.1所示:
图3.3.1移动控制模块硬件图
移动模块verilog代码如下:
Moduleaction(clk,rst,up_key_press,down_key_press,left_key_press,right_key_press,hc,vc,color);
inputup_key_press,down_key_press,left_key_press,right_key_press;
inputclk;
inputrst;
//方块中心的坐标:
reg[9:
0]move_y;//y方向的移动
reg[10:
0]move_x;//x方向的移动
//小球大小边缘定义:
parameterx_border=30,
y_border=30;//此设计中的Rom为60*60的方块
//场同步输入:
input[10:
0]hc;
input[9:
0]vc;
reg[18:
0]counter;
reg[9:
0]y_addr;//y方向的移动
reg[18:
0]counter1;
reg[9:
0]y_addr1;
reg[18:
0]counter2;
reg[9:
0]y_addr2;
reg[18:
0]counter3;
reg[9:
0]y_addr3;
outputreg[7:
0]color;
regflag,flag1;
assignsquare1=((move_x>0)&&(move_x<200)&&(move_y==y_addr+40));
assignsquare2=((move_x>160)&&(move_x<400)&&(move_y==y_addr1+40));
assignsquare3=((move_x>360)&&(move_x<600)&&(move_y==y_addr2+40));
assignsquare4=((move_x>560)&&(move_x<800)&&(move_y==y_addr3+40));
assignwin=((move_x>=10)&&(move_x<=200)&&(move_y>=20)&&(move_y<=200))?
1'b1:
1'b0;
assigndie=((square1)||(square2)||(square3)||(square4))?
1'b1:
1'b0;
wire[9:
0]xlabel,ylabel;
assignxlabel=hc-11'd187;
assignylabel=vc-10'd31;
//VGA扫描模块:
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
color<=8'b0000_0000;
flag<=0;
end
elseif((die==0)&&(win==0)&&(flag==0))
begin
if((hc>182&&hc<=187)||(hc>981&&hc<=986)||(vc>29&&vc<=34)||(vc>624&&vc<=629))
color<=8'b1111_1100;//边框颜色黄色
elseif((hc>=move_x+182)&&(hc<(move_x+40+182))&&(vc>=move_y+29)&&(vc<(move_y+40+29)))
begin
color<=8'b0100_1000;//小方块
end
elseif((hc-187>=10)&&(hc-187<=200)&&(vc-31>=10+y_addr)&&(vc-31<=50+y_addr))
begin
color<=8'b0100_1011;//第一个横条
end
elseif((hc-187>=200)&&(hc-187<=400)&&(vc-31>=10+y_addr1)&&(vc-31<=50+y_addr1))
begin
color<=8'b1110_1011;//第二个横条
end
elseif((hc-187>=400)&&(hc-187<=600)&&(vc-31>=10+y_addr2)&&(vc-31<=50+y_addr2))
begin
color<=8'b1110_1111;//第三个横条
end
elseif((hc-187>=600)&&(hc-187<=800)&&(vc-31>=10+y_addr3)&&(vc-31<=50+y_addr3))
begin
color<=8'b1111_0000;//第四个横条
end
elsecolor<=8'b0000_0000;
end
/****************************碰撞死亡胜利过程**************************************/
elseif((die==1)||((flag==1)&&(flag1==0)))
begin
if(((xlabel>=240)&&(xlabel<280))&&((ylabel>=140)&&(ylabel<180))||
((xlabel>=280)&&(xlabel<320))&&((ylabel>=180)&&(ylabel<220))||
((xlabel>=320)&&(xlabel<360))&&((ylabel>=220)&&(ylabel<260))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=260)&&(ylabel<300))||
((xlabel>=240)&&(xlabel<280))&&((ylabel>=180)&&(ylabel<220))||
((xlabel>=240)&&(xlabel<280))&&((ylabel>=220)&&(ylabel<260))||
((xlabel>=240)&&(xlabel<280))&&((ylabel>=260)&&(ylabel<300))||
((xlabel>=400)&&(xlabel<440))&&((ylabel>=260)&&(ylabel<300))||
((xlabel>=400)&&(xlabel<440))&&((ylabel>=220)&&(ylabel<260))||
((xlabel>=400)&&(xlabel<440))&&((ylabel>=180)&&(ylabel<220))||
((xlabel>=400)&&(xlabel<440))&&((ylabel>=140)&&(ylabel<180)))
begin
color<=8'b1111_1100;
end
else
begin
color<=8'b0000_0000;
end
flag<=1'b1;
flag1<=1'b0;
end
elseif((win==1)||((flag1==1)&&(flag==0)))
beginif(((xlabel>=240)&&(xlabel<280))&&((ylabel>=140)&&(ylabel<180))||
((xlabel>=440)&&(xlabel<480))&&((ylabel>=180)&&(ylabel<220))||
((xlabel>=280)&&(xlabel<320))&&((ylabel>=180)&&(ylabel<220))||
((xlabel>=480)&&(xlabel<520))&&((ylabel>=140)&&(ylabel<180))||
((xlabel>=320)&&(xlabel<360))&&((ylabel>=220)&&(ylabel<260))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=260)&&(ylabel<300))||
((xlabel>=400)&&(xlabel<440))&&((ylabel>=220)&&(ylabel<260))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=260)&&(ylabel<300))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=300)&&(ylabel<340))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=400)&&(ylabel<440))||
((xlabel>=360)&&(xlabel<400))&&((ylabel>=340)&&(ylabel<400)))
begin
color<=8'b1111_1111;
end
else
begin
color<=8'b0000_0000;
end
flag<=1'b0;
flag1<=1'b1;
end
else
begin
color<=8'b0000_0000;
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
move_x<=340;
move_y<=500;
end
elseif(up_key_press)
begin
if(move_y==0)
begin
move_y<=move_y;
end
else
begin
move_y<=move_y-40;
end
end
elseif(down_key_press)
begin
if(move_y==560)
begin
move_y<=move_y;
end
else
begin
move_y<=move_y+40;
end
end
elseif(left_key_press)
begin
if(move_x==0)
begin
move_x<=move_x;
end
else
begin
move_x<=move_x-40;
end
end
elseif(right_key_press)
begin
if(move_x==760)
begin
move_x<=move_x;
end
else
begin
move_x<=move_x+40;
end
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
y_addr<=10;
end
else
begin
if(counter==50_0000)
begin
counter<=0;
y_addr<=y_addr+1;
end
elsecounter<=counter+1;
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
y_addr1<=10;
end
else
begin
if(counter1==30_0000)
begin
counter1<=0;
y_addr1<=y_addr1+1;
end
elsecounter1<=counter1+1;
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
y_addr2<=10;
end
else
begin
if(counter2==18_0000)
begin
counter2<=0;
y_addr2<=y_addr2+1;
end
elsecounter2<=counter2+1;
end
end
always@(posedgeclkorposedgerst)
begin
if(rst)
begin
y_addr3<=10;
end
else
begin
if(counter3==10_0000)
begin
counter3<=0;
y_addr3<=y_addr3+1;
end
elsecounter3<=counter3+1;
end
end
endmodule
3.4按键消抖模块设计
抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
本消抖模块消抖时间为10ms。
键抖动会引起一次按键被误读多次。
为确保芯片对键的一次闭合仅作一次处理,必须去除键抖动。
在键闭合稳定时读取键的状态,并且必须判别到键释放稳定后再作处理。
流程图如下:
消抖模块硬件设计如图3.4所示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 躲避 障碍 游戏 讲解