名称:VGA 小球游戏显示控制 Verilog Quartus
软件:Quartus
语言:Verilog
功能介绍
这是一个使用 Verilog 实现的 VGA 小球游戏显示控制设计,工程以 `vga_controller_top` 为顶层模块。顶层接收时钟、复位和上下两个按键输入,输出 VGA 水平同步、垂直同步及 12 位 RGB 颜色信号,形成从按键输入到像素画面输出的完整控制链路。 设计将 VGA 扫描时序、像素坐标生成、按键消抖和图形绘制拆分为独立模块。图形生成模块接收像素坐标、有效显示区标志和按键状态,负责形成显示颜色数据;顶层完成各模块连接,便于按信号路径理解和修改游戏控制及画面逻辑。 工程适合用于学习 FPGA 上的 VGA 时序组织、坐标驱动图形显示、模块化 Verilog 设计以及按键输入处理。Quartus 工程文件和管脚配置可作为工程配置与硬件接口分配的参考。
运行环境
硬件描述语言:Verilog。开发软件:Quartus。工程顶层模块:`vga_controller_top`。
设计思路
设计采用模块化结构,将时钟生成、复位同步、VGA 扫描时序、按键消抖与图形生成分开处理。输入时钟经 PLL 产生设计使用的时钟;复位信号经过同步后供各模块使用,降低复位释放与时钟边沿不同步带来的影响。 VGA 时序模块产生水平和垂直同步信号、当前像素坐标以及有效显示区标志。两个按键分别经过消抖处理,再组合成控制信号送入图形生成模块。图形模块依据像素坐标、显示区状态和按键输入生成 RGB 像素数据,并将游戏画面与 VGA 同步信号一并送到顶层输出。
模块结构
顶层模块 `vga_controller_top` 连接并管理各功能模块:`pll` 生成内部时钟;`aiso_rst` 完成复位同步;`vga_sync` 输出 VGA 同步信号、像素坐标和显示有效标志;两个 `debounce` 实例分别处理上下按键;`graphic_generator` 根据控制输入与像素坐标生成 RGB 数据及分数信号。`display` 模块也位于工程源码中。
开发板验证
工程包含 VGA 管脚约束与分配配置,可用于配套开发板的接口连接与验证。顶层设计提供 VGA 水平、垂直同步信号及 12 位 RGB 输出,并以两个按键输入控制画面中的游戏图形。
仿真图/仿真说明/设计文档图片
工程包含 ModelSim 仿真目录及 Quartus 编译、时序相关输出文件,可用于了解工程仿真与实现流程。配套文档图片可展示实验设备及相关设计资料。未据此描述具体仿真波形或仿真结果。
部分代码
以下展示顶层模块vga_controller_top的部分代码
module vga_controller_top(clk_20M, rst, btn_up, btn_down, hsync, vsync, rgb); input clk_20M;//时钟 input rst;//复位 input btn_up;//上按键 input btn_down;//下按键 output hsync;//VGA水平同步信号 output vsync;//VGA垂直同步信号 output [11:0] rgb;//RGB信号 wire clk; wire video_on; wire rst_s; wire [9:0] pixel_x; wire [9:0] pixel_y; wire db_btn_up; wire db_btn_down; wire [1:0] btn_up_dowm; wire [7:0] score; wire hsync_buf; wire vsync_buf; wire [11:0] rgb_buf; //信号输出 assign hsync = hsync_buf; assign vsync = vsync_buf; assign rgb = rgb_buf; //PLL模块 pll pll_inst ( .inclk0 ( clk_20M ), .c0 ( clk )//50M ); //复位信号同步模块 aiso_rst u0(.clk(clk), .reset(rst), .reset_s(rst_s)); //VGA时序控制模块 vga_sync u1(.clk(clk), .rst(rst_s), .VGA_CLK(), .VGA_BLANK_N(), .hsync(hsync_buf), .vsync(vsync_buf), .pixel_x(pixel_x), .pixel_y(pixel_y), .video_on(video_on)); //按键信号控制模块 debounce u2(.clk(clk), .reset(rst_s), .sw(btn_up), .db(db_btn_up)); //按键信号控制模块 debounce u3(.clk(clk), .reset(rst_s), .sw(btn_down), .db(db_btn_down)); //将上下控制按键信号拼接为一个2位的信号 assign btn_up_dowm = ({db_btn_down, db_btn_up}); //调用图形控制模块 graphic_generator u4(.clk(clk), .rst(rst_s), .btn(btn_up_dowm), .pixel_x(pixel_x), .pixel_y(pixel_y), .video_on(video_on), .score(score), .rgb(rgb_buf)); endmodule代码获取:下方公众号