




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深圳大学研究生试题纸学院 信息工程学院 专业 集成电路工程,电子与通信工程 课程名称 数字系统设计 拟题人 审题人 课程设计:采用FPGA实现一个VGA显示的小游戏基本要求: 1) 采用Verilog语言在Spartan3A FPGA开发板实现该设计2) 该游戏应该采用纯逻辑实现,不能在FPGA内部嵌入CPU或者外接CPU3) 该游戏应该有VGA接口输出4) 该游戏应该具有按键或者其他输入方式5) 游戏的复杂度将作为一个评分依据6) 游戏的创新性和可玩性将作为一个加分依据设计报告要求:1. 报告的格式采用标准的深圳大学设计报告格式。2. 报告中应提供CPU的工作流程说明,如果实现了高级要求,应
2、提供新增功能的说明和介绍。3. 报告中应包括ASM图, 以及verilog代码,并且代码应该与ASM图相一致。4. 设计报告应包括该电路的verilog仿真。5. 设计报告应该有布局布线后资源利用以及运行速度的评价结果。深圳大学研究生课程论文题目 基于FPGA实现VGA的小游戏 成绩 专业 电子与通信工程 课程名称 数字系统设计 年级 2014届 姓名 李曼曼 学 号 2141130208 时间 2015 年 1 月 15 号 任课教师 徐渊 目 录摘要(关键词)11.游戏功能概述22.系统分析和方案33.硬件电路设计43.1 游戏的硬件组成4 3.2 VGA控制模块设计4 3.3 移动和控制
3、模块设计8 3.4 按键消抖模块设计184.端口配置225.游戏设计结果245.1 软件调试结果245.2 总结26摘 要本次课程设计介绍了用FPGA来驱动VGA显示躲避障碍游戏的具体实现方法。躲避障碍的游戏规则是玩家使用方向键操控一个方块不断躲避障碍,同时方块若果到达指定位置则游戏胜利,当方块碰到障壁时游戏结束。本课程设计采用Verilog HDL语言编写,VGA显示,状态机等相关知识。关键词:FPGA ;VGA ;Verilog HDL;躲避障碍游戏1 游戏功能概述游戏的主要功能设计如下:(1)方块在整个屏幕边框内可以通过按键上下左右控制进行移动;设置屏幕分辨率为600*800,边框宽度为
4、5,并且颜色为黄色。方块大小为60*60颜色为红色,游戏中设有四个不断垂直下落的长方块障碍物,障碍物的长度为200,宽度为10,以不同的速率下降。在屏幕的左上方还有一个特定的区域,没用颜色显示,有特定的坐标位置。(2)障碍物自发下落,;游戏中有四个不同颜色的障碍长方块,不断下落。当小方块碰到长方块时,游戏界面停止,进入到死亡状态,障碍物也消失。(3)游戏的三个状态和三个不同界面当通过按键对小方块进行上下左右移动时,游戏一直停留在游戏界面。如果小方块碰到四个当中任何一个障碍物,则游戏结束并显示一个“N”的标志表示死亡。如果小方块到达指定的左上方区域,则游戏胜利,并显示一个“Y”的标志即游戏获胜。
5、不管游戏胜利或者结束,按下复位键,游戏又重新开始。综上,本游戏设置四个按键控制小方块的移动,障碍物则自己不断下落。A7 为上按键,M4为下按键,G11为左按键,G12为右按键。游戏通过P11开关设定为游戏的复位键,让游戏重新开始。2 系统分析和方案2.1系统分析本设计采用VGA显示的方式将游戏展现出来。游戏中玩家通过四个按键控制方块的身体上下左右移动来到达指定位置以获得胜利,如果方块撞到障碍物,则游戏失败。所要设计的躲避障碍游戏基于FPGA芯片为硬件,采用Verilog HDL语言编写程序。在本设计中,有个5按键,分别是上、下、左、右和复位按键。它们都是输入信号,输出是VGA,在电脑屏幕实现V
6、GA显示游戏画面。其系统设计结构框图如2.1所示。图2.1 躲避障碍游戏系统设计结构框图电源给BASYS 2开发板供电,将程序下载到BASYS 2开发板上,用VGA线将显示器与开发板相连接,在通电情况下,游戏在显示器上显示,可通过开发板上按键控制方块的运动状态。3 硬件电路设计3.1游戏的硬件组成硬件电路设计包括3个模块,它们分别是:action:产生各个 VGA 扫描部件的坐标及方块和障碍的运动轨迹并控制游 戏的三种状态之间的转换 vga:vga 扫描控制模块key:按键扫描模块完成后的RTL view 如图3.1所示。图3.1 系统总体设计3.2 VGA控制模块设计显示器扫描方式为逐行扫描
7、:逐行扫描是扫描从屏幕左上角一点开始,从左像右逐点扫描,每扫描完一行,电子束回到屏幕的左边下一行的起始位置,在这期间,CRT对电子束进行消隐,每行结束时,用行同步信号进行同步;当扫描完所有的行,形成一帧,用场同步信号进行场同步,并使扫描回到屏幕左上方,同时进行场消隐,开始下一帧。标准VGA一共15个接口,本设计用到的信号接口有五个,HSYNC行同步信号,VSYNC场同步信号,VGA_R、VGA_G、VGA_B三原色信号。VGA控制模块硬件设计如图3.2.3所示。图3.2 VGA控制模块硬件设计电路VGA接口输出模块verilog代码如下:module vga(clk,rst,HSYNC,VSY
8、NC,hc,vc); input clk; input rst; reg hs; reg vs; reg vsenable; output HSYNC; output VSYNC; output reg9:0 vc; output reg10:0hc; always(posedge clk or posedge rst) beginif(rst)hc <= 0;elsebeginif(hc = 1039)beginhc <= 0;vsenable<=1;endelsebeginhc <= hc+1;vsenable<=0;endendendalways(posed
9、ge clk or posedge rst) beginif(rst) vc <= 0;elsebeginif(vsenable = 1)beginif(vc = 665)vc<=0;elsevc <=vc+1;endelsevc <= vc;endendassign HSYNC=hs;assign VSYNC=vs;always(posedge clk or posedge rst)beginif(rst)hs <= 1'b1;else if(hc = 10'd0)hs <= 1'b0;else if(hc = 10'd12
10、0)hs <= 1'b1;end always(posedge clk or posedge rst)beginif(rst)vs <= 1'b1;else if(vc = 10'd0)vs <= 1'b0;else if(vc = 10'd6)vs <= 1'b1;endendmodule3.3 移动和控制模块设计移动控制模块是整个设计中最复杂最核心的模块。它主要包括四个主要任务:(1)保持四个障碍物的运动(2)按键改变方块运动的方向(3)判断方块是否撞到障碍物或者到达制定目标区(4)决定VGA显示内容开始流程图如下:
11、Y按键 Yrightleftupdown到达指定位置撞到障碍物 Y N Y 死亡界面胜利界面复位键躲避障碍移动控制模块硬件设计如图3.3.1所示:图3.3.1移动控制模块硬件图移动模块verilog代码如下:Module action(clk,rst,up_key_press,down_key_press,left_key_press,right_key_press,h c,vc,color); input up_key_press,down_key_press,left_key_press,right_key_press; input clk; input rst;/方块中心的坐标: reg
12、 9:0 move_y; /y方向的移动 reg 10:0 move_x; /x方向的移动/小球大小边缘定义: parameter x_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;o
13、utput reg 7:0 color;reg flag,flag1;assign square1=(move_x>0)&&(move_x<200)&&(move_y=y_addr+40);assign square2=(move_x>160)&&(move_x<400)&&(move_y=y_addr1+40);assign square3=(move_x>360)&&(move_x<600)&&(move_y=y_addr2+40);assign square
14、4=(move_x>560)&&(move_x<800)&&(move_y=y_addr3+40);assign win=(move_x>=10)&&(move_x<=200)&&(move_y>=20)&&(move_y<=200)?1'b1:1'b0;assign die=(square1)|(square2)|(square3)|(square4)?1'b1:1'b0;wire9:0 xlabel,ylabel;assign xlabel =
15、 hc-11'd187;assign ylabel = vc-10'd31;/VGA扫描模块:always(posedge clk or posedge rst)beginif(rst)begincolor <=8'b0000_0000;flag<=0;endelse if(die=0)&&(win=0)&&(flag=0)beginif(hc>182&&hc<=187) | (hc>981&&hc<=986) |(vc>29&&vc<=34)
16、|(vc>624&&vc<=629) color <= 8'b1111_1100; /边框颜色黄色else if (hc>=move_x+182)&&(hc<(move_x+40+182)&&(vc>=move_y+29)&&(vc<(move_y+40+29)begincolor <=8'b0100_1000;/小方块endelse if (hc-187>=10) && (hc-187<=200) && (vc-31>
17、;=10+y_addr) && (vc-31<=50+y_addr)begincolor <=8'b0100_1011; /第一个横条endelse if (hc-187>=200) && (hc-187<=400) && (vc-31>=10+y_addr1) && (vc-31<=50+y_addr1)begincolor <=8'b1110_1011; / 第二个横条endelse if (hc-187>=400) && (hc-187<=
18、600) && (vc-31>=10+y_addr2) && (vc-31<=50+y_addr2)begincolor <=8'b1110_1111; / 第三个横条endelse if (hc-187>=600) && (hc-187<=800) && (vc-31>=10+y_addr3) && (vc-31<=50+y_addr3)begincolor <=8'b1111_0000; / 第四个横条endelse color <=8
19、9;b0000_0000;end/*碰撞死亡胜利过程*/else if(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)&&(xlabe
20、l<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)&&
21、;(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)&
22、amp;&(ylabel<260)| (xlabel>=400)&&(xlabel<440)&&(ylabel>=180)&&(ylabel<220)| (xlabel>=400)&&(xlabel<440)&&(ylabel>=140)&&(ylabel<180)begincolor <=8'b1111_1100;endelse begincolor<=8'b0000_0000;endflag<=1
23、39;b1;flag1<=1'b0; endelse if(win=1)|(flag1=1)&&(flag=0)begin if( (xlabel>=240)&&(xlabel<280)&&(ylabel>=140)&&(ylabel<180)| (xlabel>=440)&&(xlabel<480)&&(ylabel>=180)&&(ylabel<220)| (xlabel>=280)&&(xlab
24、el<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)&&am
25、p;(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)
26、&&(ylabel<340)| (xlabel>=360)&&(xlabel<400)&&(ylabel>=400)&&(ylabel<440)| (xlabel>=360)&&(xlabel<400)&&(ylabel>=340)&&(ylabel<400)begincolor <=8'b1111_1111;endelse begincolor<=8'b0000_0000;end flag<=1
27、'b0;flag1<=1'b1; endelsebegincolor <= 8'b0000_0000;endendalways(posedge clk or posedge rst)beginif (rst)beginmove_x <= 340; move_y <= 500;endelse if (up_key_press)beginif(move_y=0)begin move_y <= move_y;endelsebeginmove_y <= move_y-40;endendelse if (down_key_press)begin
28、if(move_y=560)beginmove_y <= move_y;endelse beginmove_y <= move_y+40; endendelse if (left_key_press)beginif(move_x=0)beginmove_x <= move_x;endelse beginmove_x <= move_x-40;endendelse if (right_key_press)beginif(move_x=760)beginmove_x <= move_x;endelse beginmove_x <= move_x+40; ende
29、ndend always(posedge clk or posedge rst)beginif(rst)beginy_addr <= 10;endelsebeginif (counter = 50_0000)begincounter <= 0;y_addr <= y_addr + 1;endelse counter <= counter + 1;endendalways(posedge clk or posedge rst)beginif(rst)beginy_addr1 <= 10;endelsebeginif (counter1 = 30_0000)begin
30、counter1 <= 0;y_addr1 <= y_addr1 + 1;endelse counter1 <= counter1 + 1;endendalways(posedge clk or posedge rst)beginif(rst)beginy_addr2 <= 10;endelsebeginif (counter2 = 18_0000)begincounter2 <= 0;y_addr2 <= y_addr2 + 1;endelse counter2 <= counter2 + 1;endendalways(posedge clk or
31、posedge rst)beginif(rst)beginy_addr3 <= 10;endelsebeginif (counter3 = 10_0000)begincounter3 <= 0;y_addr3 <= y_addr3 + 1;endelse counter3 <= counter3 + 1;endendendmodule3.4 按键消抖模块设计抖动时间的长短由按键的机械特性决定,一般为5ms10ms。本消抖模块消抖时间为10ms。键抖动会引起一次按键被误读多次。为确保芯片对键的一次闭合仅作一次处理,必须去除键抖动。在键闭合稳定时读取键的状态,并且必须判别到
32、键释放稳定后再作处理。流程图如下:消抖模块硬件设计如图3.4所示。图3.4消抖模块硬件图消抖模块verilog代码如下:module key(input clk,input rst,input left,input right,input up,input down,output reg left_key_press,output reg right_key_press,output reg up_key_press, output reg down_key_press);/*/reg 31:0clk_cnt;reg left_key_last;reg right_key_last;reg u
33、p_key_last;reg down_key_last;always(posedge clk or posedge rst)beginif(rst)beginclk_cnt<=0;left_key_press<=0;right_key_press<=0;up_key_press<=0;down_key_press<=0;left_key_last<=0;right_key_last<=0;up_key_last<=0;down_key_last<=0;endelse beginif(clk_cnt=5_0000)beginclk_cnt&
34、lt;=0;left_key_last<=left;right_key_last<=right;up_key_last<=up;down_key_last<=down;if(left_key_last=0&&left=1)beginleft_key_press<=1;endif(right_key_last=0&&right=1)beginright_key_press<=1;endif(up_key_last=0&&up=1)beginup_key_press<=1;endif(down_key_last=0&&down=1)begindown_key_press<=1;endendelsebeginclk_cnt<=clk_cnt+1;left_key_press<=0;right_key_press<=0;up_key_press<=0;down_key_press<=0;ende
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国际商业设计师创意流派考核题及答案
- 快闪项目在广告设计中的应用探讨试题及答案
- 复习一览表的纺织工程师试题及答案
- 检验招聘笔试试题及答案
- 2024年纺织工程师证书考试高效学习试题及答案
- 2024年纺织品检验员证书考试形式试题及答案
- 2024年国际商业美术设计师考试品牌设计思考试题及答案
- 淮北中考英语试题及答案
- 广告设计的市场营销策略 试题及答案
- 洛阳一模语文试题及答案
- 大学生志愿服务西部计划考试复习题库(笔试、面试题)
- 《建筑制图与识图》课程标准
- 客货线铁路隧道锚杆施工作业指导书
- 箱涵工程监理实施细则
- 公路养护的高级工复习题
- 三人合伙经营协议书 doc 三人合伙经营协议书实用版(六篇)
- 葡萄酒品尝学第八章-2013
- JJF 1793-2020海水营养盐测量仪校准规范
- GB/T 20080-2017液压滤芯技术条件
- 超音速流动与燃烧的大涡模拟基础课件
- 归档文件目录
评论
0/150
提交评论