• 方案介紹
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

VIVADO彈球游戲VGA顯示Verilog代碼EGO1開(kāi)發(fā)板游戲

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

名稱:VIVADO彈球游戲VGA顯示Verilog代碼EGO1開(kāi)發(fā)板游戲(代碼在文末下載)

軟件:VIVADO

語(yǔ)言:Verilog

代碼功能:

設(shè)計(jì)一個(gè)彈球游戲,并在VGA顯示器上顯示。

1、可以控制游戲開(kāi)始,開(kāi)始時(shí)數(shù)碼管顯示0分。

2、使用按鍵控制球拍的運(yùn)動(dòng),當(dāng)控制球拍接住球時(shí),分?jǐn)?shù)加1。

3、彈球觸碰屏幕邊緣或者球拍時(shí)可以反彈。

4、當(dāng)未成功接球時(shí),游戲結(jié)束。

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

本代碼已在ego1開(kāi)發(fā)板驗(yàn)證,開(kāi)發(fā)板如下,其他開(kāi)發(fā)板可以修改管腳適配:

ego1開(kāi)發(fā)板.png

工程文件:

a5a30f55-22d5-4bab-aec1-fcf2b815f573.png

程序文件:

2ecd7784-a504-41b7-8a81-b993afec9bdb.png

程序編譯:

70716d08-3fb8-410c-994b-8af42690eebf.png

RTL圖:

7beae0dc-66cd-48af-ac5a-c7035d845461.png

管腳分配:

a7f362ac-f6f1-48c5-b986-d32a4139b53f.png

部分代碼展示:

`timescale?1ns?/?1ps
//產(chǎn)生墻、球和球拍
module?graphic_generator(clk,?rst,?btn,?pixel_x,?pixel_y,?video_on,?rgb,score);
???input????clk,?rst;?
???input????[1:0]?btn;?
???input????[9:0]?pixel_x,?pixel_y;?
???input????video_on;?
???
???output???[11:0]?rgb;?
???output?[7:0]?score;
???reg??????[11:0]?rgb;?
???
???wire?????refr_tick;?
???
???//?refr-tick:?1-clock?tick?asserted?at?st?art?of?v-sync
???//?i.e..?when?the?screen?is?refreshed?(60?Hz)
???assign?refr_tick?=?(pixel_y==481)?&&?(pixel_x==0);?
???//?==========================
???//?object?output?signals
???//?==========================
???
???wire?wall_on,?paddle_on,?ball_on;?
???wire?[11:0]?wall_rgb,?paddle_rgb,?ball_rgb;?
???
???always?@?(posedge?clk,?posedge?rst)?
??????if?(rst)?
?????????begin???
????????????paddle_y_reg?<=?0;?
????????????ball_x_reg???<=?0;?
????????????ball_y_reg???<=?0;?
????????????x_delta_reg??<=?10'h004;?
????????????y_delta_reg??<=?10'h004;?
?????????end
??????else?
?????????begin?
????????????paddle_y_reg?<=?paddle_y_next;?
????????????ball_x_reg???<=?ball_x_next;?
????????????ball_y_reg???<=?ball_y_next;?
????????????x_delta_reg??<=?x_delta_next;?
????????????y_delta_reg??<=?y_delta_next;?
?????????end?
?????????
???//?===============
???//?墻
???//?===============
???assign?wall_on??=?(pixel_x?>=?32)?&&?(pixel_x?<=?35);?
???assign?wall_rgb?=?12'hF00;??//?藍(lán)色
???
???//?===============
???//?球拍
???//?===============
???
???wire?[9:0]?paddle_y_t,?paddle_y_b;?
???//?register?to?track?top?boundary?(x?position?is?fixed)?
???reg?[9:0]?paddle_y_reg,?paddle_y_next;?
???assign?paddle_y_t?=?paddle_y_reg;?
???assign?paddle_y_b?=?paddle_y_t?+?72?-?1;?
???
???assign?paddle_on??=?(pixel_x?>=?600)?&&?(pixel_x?<=?603)?&&?
???????????????????????(pixel_y?>=?paddle_y_t)?&&?(pixel_y?<=?paddle_y_b);??//bar?top?and?bottom?barriers
???assign?paddle_rgb?=?12'h0F0;?//?綠色
???
???//?new?paddle?y-postion?
???always@?(*)?
???begin
??????paddle_y_next?=?paddle_y_reg;?
??????if?(refr_tick)
?????????if?(btn[1]?&?(paddle_y_b?<?(480?-?1?-?4)))?//maxy?-1-?(bar?moving?velocity)
????????????paddle_y_next?=?paddle_y_reg?+?4;??//?move?down?
?????????else?if?(btn[0]?&?(paddle_y_t?>?4))
????????????paddle_y_next?=?paddle_y_reg?-?4;??//?move?up?
???end?
???
???//?===============
???//?球
???//?===============
???
???//?ball?left,?right?boundary?
???wire?[9:0]?ball_x_l,?ball_x_r;?
???//?ball?tob,?bottom?boundary?
???wire?[9:0]?ball_y_t,?ball_y_b;??
???//?reg?to?track?left?,?top?position
???reg?[9:0]?ball_x_reg?,?ball_y_reg?;
???wire?[9:0]?ball_x_next?,?ball_y_next?;?
???//registers?to?track?ball?speed
???reg?[9:0]?x_delta_reg,?x_delta_next;?
???reg?[9:0]?y_delta_reg,?y_delta_next;?
???
???//boundary?
???assign?ball_x_l?=?ball_x_reg;?
???assign?ball_y_t?=?ball_y_reg;?
???assign?ball_x_r?=?ball_x_l?+?8?-?1;?
???assign?ball_y_b?=?ball_y_t?+?8?-?1;
???
???//pixel?within?ball?
???assign?ball_on?=?(pixel_x?>=?ball_x_l)?&&?(pixel_x?<=?ball_x_r)?&&?
????????????????????(pixel_y?>=?ball_y_t)?&&?(pixel_y?<=?ball_y_b);?
???assign?ball_rgb?=?12'hFF0;?//球色為紅綠混合色
??
??//?new?ball?position?
???assign?ball_x_next?=?(refr_tick)???ball_x_reg?+?x_delta_reg?:?ball_x_reg;?
???assign?ball_y_next?=?(refr_tick)???ball_y_reg?+?y_delta_reg?:?ball_y_reg;?
//???assign?ball_x_next?=?(refr_tick)???ball_x_reg?+?x_delta_reg?:?10'd0;?
//???assign?ball_y_next?=?(refr_tick)???ball_y_reg?+?y_delta_reg?:?10'd0;????
???//?new?ball?velocity?
???always?@?(*)?
???begin?
??????x_delta_next?=?x_delta_reg;?
??????y_delta_next?=?y_delta_reg;?
??????if?(ball_y_t?<?1)?//reach?top?
?????????y_delta_next?=?1;?
??????else?if?(ball_y_b?>?(480?-?1))?//?reach?bottom?
?????????y_delta_next?=?-1;?
??????else?if?(ball_x_l?<=?35)?//?reach?wall?
?????????x_delta_next?=?1;?//bounce?back?
??????else?if?((ball_x_r?>=?600)?&&?(ball_x_r?<=?603)?&&
???????????????(ball_y_b?>=?paddle_y_t)?&&?(ball_y_t?<=?paddle_y_b))
?????????//?reach?x?of?right?paddle?and?hit,?ball?bounces?back?
?????????x_delta_next?=?-1;?
???????else?if(ball_x_r>=610)begin//end?game
?????????x_delta_next?=?0;????
?????????y_delta_next?=?0;
?????????end
???end

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=324

相關(guān)推薦