躲避障礙游戲_第1頁(yè)
躲避障礙游戲_第2頁(yè)
躲避障礙游戲_第3頁(yè)
躲避障礙游戲_第4頁(yè)
躲避障礙游戲_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、深圳大學(xué)研究生試題紙學(xué)院 信息工程學(xué)院 專業(yè) 集成電路工程,電子與通信工程 課程名稱 數(shù)字系統(tǒng)設(shè)計(jì) 擬題人 審題人 課程設(shè)計(jì):采用FPGA實(shí)現(xiàn)一個(gè)VGA顯示的小游戲基本要求: 1) 采用Verilog語(yǔ)言在Spartan3A FPGA開(kāi)發(fā)板實(shí)現(xiàn)該設(shè)計(jì)2) 該游戲應(yīng)該采用純邏輯實(shí)現(xiàn),不能在FPGA內(nèi)部嵌入CPU或者外接CPU3) 該游戲應(yīng)該有VGA接口輸出4) 該游戲應(yīng)該具有按鍵或者其他輸入方式5) 游戲的復(fù)雜度將作為一個(gè)評(píng)分依據(jù)6) 游戲的創(chuàng)新性和可玩性將作為一個(gè)加分依據(jù)設(shè)計(jì)報(bào)告要求:1. 報(bào)告的格式采用標(biāo)準(zhǔn)的深圳大學(xué)設(shè)計(jì)報(bào)告格式。2. 報(bào)告中應(yīng)提供CPU的工作流程說(shuō)明,如果實(shí)現(xiàn)了高級(jí)要求,應(yīng)

2、提供新增功能的說(shuō)明和介紹。3. 報(bào)告中應(yīng)包括ASM圖, 以及verilog代碼,并且代碼應(yīng)該與ASM圖相一致。4. 設(shè)計(jì)報(bào)告應(yīng)包括該電路的verilog仿真。5. 設(shè)計(jì)報(bào)告應(yīng)該有布局布線后資源利用以及運(yùn)行速度的評(píng)價(jià)結(jié)果。深圳大學(xué)研究生課程論文題目 基于FPGA實(shí)現(xiàn)VGA的小游戲 成績(jī) 專業(yè) 電子與通信工程 課程名稱 數(shù)字系統(tǒng)設(shè)計(jì) 年級(jí) 2014屆 姓名 李曼曼 學(xué) 號(hào) 2141130208 時(shí)間 2015 年 1 月 15 號(hào) 任課教師 徐淵 目 錄摘要(關(guān)鍵詞)11.游戲功能概述22.系統(tǒng)分析和方案33.硬件電路設(shè)計(jì)43.1 游戲的硬件組成4 3.2 VGA控制模塊設(shè)計(jì)4 3.3 移動(dòng)和控制

3、模塊設(shè)計(jì)8 3.4 按鍵消抖模塊設(shè)計(jì)184.端口配置225.游戲設(shè)計(jì)結(jié)果245.1 軟件調(diào)試結(jié)果245.2 總結(jié)26摘 要本次課程設(shè)計(jì)介紹了用FPGA來(lái)驅(qū)動(dòng)VGA顯示躲避障礙游戲的具體實(shí)現(xiàn)方法。躲避障礙的游戲規(guī)則是玩家使用方向鍵操控一個(gè)方塊不斷躲避障礙,同時(shí)方塊若果到達(dá)指定位置則游戲勝利,當(dāng)方塊碰到障壁時(shí)游戲結(jié)束。本課程設(shè)計(jì)采用Verilog HDL語(yǔ)言編寫(xiě),VGA顯示,狀態(tài)機(jī)等相關(guān)知識(shí)。關(guān)鍵詞:FPGA ;VGA ;Verilog HDL;躲避障礙游戲1 游戲功能概述游戲的主要功能設(shè)計(jì)如下:(1)方塊在整個(gè)屏幕邊框內(nèi)可以通過(guò)按鍵上下左右控制進(jìn)行移動(dòng);設(shè)置屏幕分辨率為600*800,邊框?qū)挾葹?/p>

4、5,并且顏色為黃色。方塊大小為60*60顏色為紅色,游戲中設(shè)有四個(gè)不斷垂直下落的長(zhǎng)方塊障礙物,障礙物的長(zhǎng)度為200,寬度為10,以不同的速率下降。在屏幕的左上方還有一個(gè)特定的區(qū)域,沒(méi)用顏色顯示,有特定的坐標(biāo)位置。(2)障礙物自發(fā)下落,;游戲中有四個(gè)不同顏色的障礙長(zhǎng)方塊,不斷下落。當(dāng)小方塊碰到長(zhǎng)方塊時(shí),游戲界面停止,進(jìn)入到死亡狀態(tài),障礙物也消失。(3)游戲的三個(gè)狀態(tài)和三個(gè)不同界面當(dāng)通過(guò)按鍵對(duì)小方塊進(jìn)行上下左右移動(dòng)時(shí),游戲一直停留在游戲界面。如果小方塊碰到四個(gè)當(dāng)中任何一個(gè)障礙物,則游戲結(jié)束并顯示一個(gè)“N”的標(biāo)志表示死亡。如果小方塊到達(dá)指定的左上方區(qū)域,則游戲勝利,并顯示一個(gè)“Y”的標(biāo)志即游戲獲勝。

5、不管游戲勝利或者結(jié)束,按下復(fù)位鍵,游戲又重新開(kāi)始。綜上,本游戲設(shè)置四個(gè)按鍵控制小方塊的移動(dòng),障礙物則自己不斷下落。A7 為上按鍵,M4為下按鍵,G11為左按鍵,G12為右按鍵。游戲通過(guò)P11開(kāi)關(guān)設(shè)定為游戲的復(fù)位鍵,讓游戲重新開(kāi)始。2 系統(tǒng)分析和方案2.1系統(tǒng)分析本設(shè)計(jì)采用VGA顯示的方式將游戲展現(xiàn)出來(lái)。游戲中玩家通過(guò)四個(gè)按鍵控制方塊的身體上下左右移動(dòng)來(lái)到達(dá)指定位置以獲得勝利,如果方塊撞到障礙物,則游戲失敗。所要設(shè)計(jì)的躲避障礙游戲基于FPGA芯片為硬件,采用Verilog HDL語(yǔ)言編寫(xiě)程序。在本設(shè)計(jì)中,有個(gè)5按鍵,分別是上、下、左、右和復(fù)位按鍵。它們都是輸入信號(hào),輸出是VGA,在電腦屏幕實(shí)現(xiàn)V

6、GA顯示游戲畫(huà)面。其系統(tǒng)設(shè)計(jì)結(jié)構(gòu)框圖如2.1所示。圖2.1 躲避障礙游戲系統(tǒng)設(shè)計(jì)結(jié)構(gòu)框圖電源給BASYS 2開(kāi)發(fā)板供電,將程序下載到BASYS 2開(kāi)發(fā)板上,用VGA線將顯示器與開(kāi)發(fā)板相連接,在通電情況下,游戲在顯示器上顯示,可通過(guò)開(kāi)發(fā)板上按鍵控制方塊的運(yùn)動(dòng)狀態(tài)。3 硬件電路設(shè)計(jì)3.1游戲的硬件組成硬件電路設(shè)計(jì)包括3個(gè)模塊,它們分別是:action:產(chǎn)生各個(gè) VGA 掃描部件的坐標(biāo)及方塊和障礙的運(yùn)動(dòng)軌跡并控制游 戲的三種狀態(tài)之間的轉(zhuǎn)換 vga:vga 掃描控制模塊key:按鍵掃描模塊完成后的RTL view 如圖3.1所示。圖3.1 系統(tǒng)總體設(shè)計(jì)3.2 VGA控制模塊設(shè)計(jì)顯示器掃描方式為逐行掃描

7、:逐行掃描是掃描從屏幕左上角一點(diǎn)開(kāi)始,從左像右逐點(diǎn)掃描,每掃描完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對(duì)電子束進(jìn)行消隱,每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行同步;當(dāng)掃描完所有的行,形成一幀,用場(chǎng)同步信號(hào)進(jìn)行場(chǎng)同步,并使掃描回到屏幕左上方,同時(shí)進(jìn)行場(chǎng)消隱,開(kāi)始下一幀。標(biāo)準(zhǔn)VGA一共15個(gè)接口,本設(shè)計(jì)用到的信號(hào)接口有五個(gè),HSYNC行同步信號(hào),VSYNC場(chǎng)同步信號(hào),VGA_R、VGA_G、VGA_B三原色信號(hào)。VGA控制模塊硬件設(shè)計(jì)如圖3.2.3所示。圖3.2 VGA控制模塊硬件設(shè)計(jì)電路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 移動(dòng)和控制模塊設(shè)計(jì)移動(dòng)控制模塊是整個(gè)設(shè)計(jì)中最復(fù)雜最核心的模塊。它主要包括四個(gè)主要任務(wù):(1)保持四個(gè)障礙物的運(yùn)動(dòng)(2)按鍵改變方塊運(yùn)動(dòng)的方向(3)判斷方塊是否撞到障礙物或者到達(dá)制定目標(biāo)區(qū)(4)決定VGA顯示內(nèi)容開(kāi)始流程圖如下:

11、Y按鍵 Yrightleftupdown到達(dá)指定位置撞到障礙物 Y N Y 死亡界面勝利界面復(fù)位鍵躲避障礙移動(dòng)控制模塊硬件設(shè)計(jì)如圖3.3.1所示:圖3.3.1移動(dòng)控制模塊硬件圖移動(dòng)模塊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;/方塊中心的坐標(biāo): reg

12、 9:0 move_y; /y方向的移動(dòng) reg 10:0 move_x; /x方向的移動(dòng)/小球大小邊緣定義: parameter x_border = 30,y_border = 30; /此設(shè)計(jì)中的Rom為60*60的方塊/場(chǎng)同步輸入: input 10:0 hc; input 9:0 vc; reg 18:0 counter; reg 9:0 y_addr; /y方向的移動(dòng) 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; /第一個(gè)橫條endelse if (hc-187>=200) && (hc-187<=400) && (vc-31>=10+y_addr1) && (vc-31<=50+y_addr1)begincolor <=8'b1110_1011; / 第二個(gè)橫條endelse if (hc-187>=400) && (hc-187<=

18、600) && (vc-31>=10+y_addr2) && (vc-31<=50+y_addr2)begincolor <=8'b1110_1111; / 第三個(gè)橫條endelse if (hc-187>=600) && (hc-187<=800) && (vc-31>=10+y_addr3) && (vc-31<=50+y_addr3)begincolor <=8'b1111_0000; / 第四個(gè)橫條endelse color <=8

19、9;b0000_0000;end/*碰撞死亡勝利過(guò)程*/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 按鍵消抖模塊設(shè)計(jì)抖動(dòng)時(shí)間的長(zhǎng)短由按鍵的機(jī)械特性決定,一般為5ms10ms。本消抖模塊消抖時(shí)間為10ms。鍵抖動(dòng)會(huì)引起一次按鍵被誤讀多次。為確保芯片對(duì)鍵的一次閉合僅作一次處理,必須去除鍵抖動(dòng)。在鍵閉合穩(wěn)定時(shí)讀取鍵的狀態(tài),并且必須判別到

32、鍵釋放穩(wěn)定后再作處理。流程圖如下:消抖模塊硬件設(shè)計(jì)如圖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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論