• 方案介绍
  • 相关推荐
申请入驻 产业图谱

VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏

05/02 13:09
1157
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

名称:VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏(代码在文末下载)

软件:VIVADO

语言:Verilog

代码功能:

设计一个弹球游戏,并在VGA显示器上显示。

1、可以控制游戏开始,开始时数码管显示0分。

2、使用按键控制球拍的运动,当控制球拍接住球时,分数加1。

3、弹球触碰屏幕边缘或者球拍时可以反弹。

4、当未成功接球时,游戏结束。

FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com

本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管脚适配:

ego1开发板.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
//产生墙、球和球拍
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;??//?蓝色
???
???//?===============
???//?球拍
???//?===============
???
???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

点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=324

相关推荐