名称:VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏
软件:VIVADO
语言:Verilog
代码功能:
设计一个弹球游戏,并在VGA显示器上显示
1、可以控制游戏开始,开始时数码管显示0分
2、使用按键控制球拍的运动,当控制球拍接住球时,分数加1
3、弹球触碰屏幕边缘或者球拍时可以反弹
4、当未成功接球时,游戏结束
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
本代码已在ego1开发板验证,开发板如下,其他开发板可以修改管脚适配:
代码下载:VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏名称:VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏(代码在文末下载)软件:VIVADO语言:Verilog代码功能:设计一个弹球游戏,并在VGA显示器上显示1、可以控制游戏开始,开始时数码管显示0分2、使用按键控制球拍的运动,当控制球拍接住球时,分数加13、弹球触碰屏幕边缘或者球拍时可以反弹4、当未成功接球时,游戏结束FPGA代码Verilog/VHDL代码资源下载:www.http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=324
工程文件:
程序文件:
程序编译:
RTL图:
管脚分配:
文章来源:https://www.toymoban.com/news/detail-771417.html
部分代码展示:文章来源地址https://www.toymoban.com/news/detail-771417.html
`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
到了这里,关于VIVADO弹球游戏VGA显示Verilog代码EGO1开发板游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!