名称:VGA 方块游戏显示控制 Verilog Quartus FPGA代码工程源码下载
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现一个基于 FPGA 的 VGA 方块游戏显示控制系统,使用 Verilog 语言完成核心逻辑开发,工程软件为 Quartus。系统通过 VGA 接口输出游戏画面,配合按键完成开始、暂停以及左右方向控制,并将分数低 4 位通过 LED 进行显示,适合用于 FPGA 图形显示、简单游戏逻辑和 VGA 时序控制相关课程设计或工程参考。
顶层模块 vga_controller_top 以 50MHz 时钟作为系统输入,外部接口包含复位、开始按键、暂停按键、两个方向控制按键、VGA 行同步/场同步信号、12 位 RGB 输出以及 4 位 LED 输出。整体功能围绕 VGA 扫描坐标生成、游戏画面像素输出、按键消抖和复位同步展开,结构清晰,便于阅读和二次修改。
画面显示部分由 VGA 时序模块产生 pixel_x、pixel_y、video_on 等显示控制信号,图形生成模块根据当前像素坐标、按键状态和游戏状态输出 RGB 颜色数据。按键输入经过消抖处理后再进入游戏控制逻辑,可减少机械按键抖动对开始、暂停和方向控制的影响。
运行环境
开发语言:Verilog。
开发软件:Quartus。
目标应用:FPGA VGA 图形显示与按键交互游戏设计。
工程顶层:vga_controller_top。
设计思路
系统采用顶层集成的设计方式,将 VGA 时序、复位同步、按键消抖和图形生成逻辑分成相对独立的功能模块。顶层模块负责连接外部时钟、复位、按键、VGA 输出和 LED 显示,同时完成各子模块之间的信号传递,使工程结构更便于定位问题和扩展功能。
VGA 显示部分先由 vga_sync 模块生成行同步、场同步、当前像素坐标以及有效显示区域标志。图形生成模块 graphic_generator 根据像素坐标判断当前位置应显示的游戏元素,并在 video_on 有效时输出对应的 12 位 RGB 数据,从而形成完整的 VGA 游戏画面。
按键控制部分使用 key_jitter 模块对开始、暂停及方向按键进行消抖处理。开始和暂停按键使用下降沿触发信号参与游戏状态切换,方向按键输出稳定电平用于控制游戏中的移动操作。复位信号经过 aiso_rst 同步处理后提供给 VGA 时序和图形控制模块,减少异步复位直接进入多模块逻辑带来的不稳定因素。
LED 输出与 score 信号相关联,用于显示分数低 4 位的状态。这样的设计既保留了 VGA 屏幕上的主要游戏显示,也提供了开发板 LED 辅助观察信号,方便调试和演示。
模块结构
vga_controller_top:工程顶层模块,连接时钟、复位、按键、VGA 输出和 LED 输出,例化复位同步、VGA 时序、按键消抖和图形生成模块。
vga_sync:VGA 时序控制模块,产生 VGA_CLK、VGA_BLANK_N、hsync、vsync、pixel_x、pixel_y 和 video_on 等显示相关信号。
aiso_rst:复位同步模块,将外部复位信号同步为内部使用的复位信号。
key_jitter:按键消抖模块,用于开始、暂停和方向控制按键输入处理。
graphic_generator:图形控制与游戏显示生成模块,根据按键、像素坐标、显示有效信号和游戏状态输出 RGB 数据及 score 分数信号。
display、RAM_set:作为工程相关显示/存储功能模块参与整体设计。
开发板验证
本设计带有 Cyclone IV FPGA 开发板验证内容,工程中配置了管脚约束文件,并提供开发板相关实物验证图片。外部接口覆盖 50MHz 时钟、复位按键、开始/暂停按键、方向按键、VGA 行场同步、12 位 RGB 输出以及 LED 显示,适合在对应 FPGA 开发板环境下进行下载演示和功能观察。
开发板验证重点包括 VGA 显示接口输出、按键交互控制和 LED 分数状态显示。通过管脚分配与工程编译结果,可作为实际硬件连接和板级调试的参考。
演示视频
提供 VGA 方块游戏运行演示视频,可用于查看开发板运行状态、VGA 画面显示效果以及按键控制过程。视频内容适合作为下载前了解工程实际演示效果的参考。
仿真图/仿真说明/设计文档图片
设计文档图片覆盖工程文件、程序文件、程序编译、RTL 图和管脚分配等内容,可辅助理解 Quartus 工程结构、模块层次关系和硬件引脚配置。工程中还包含 ModelSim 仿真目录及相关仿真生成文件,可作为进一步仿真分析和时序查看的基础。
部分代码
以下展示顶层模块vga_controller_top的部分代码,完整源码请下载压缩包查看。
module vga_controller_top(clk_50M,start_btn_n,pause_btn_n, rst, btn_0_in, btn_1_in, hsync, vsync, rgb,LED); input clk_50M;//时钟 input rst;//复位(低电平) input start_btn_n;//开始按键 input pause_btn_n;//暂停按键 input btn_0_in;//按键 input btn_1_in;//按键 output hsync;//VGA水平同步信号 output vsync;//VGA垂直同步信号 output [3:0] LED;//LED信号 output [11:0] rgb;//RGB信号 wire VGA_CLK;//VGA控制时钟 wire VGA_BLANK_N;//VGA控制有效信号 wire clk; wire video_on; wire rst_s;//高电平复位 wire [9:0] pixel_x; wire [9:0] pixel_y; wire btn_0; wire btn_1; 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; assign clk = clk_50M; wire btn_start,btn_pause; assign LED = ~ score[3:0] ; //复位信号同步模块 aiso_rst i_aiso_rst(.clk(clk), .reset(rst), .reset_s(rst_s)); //VGA时序控制模块(高电平复位) vga_sync i_vga_sync(.clk(clk), .rst(rst_s), .VGA_CLK(VGA_CLK), .VGA_BLANK_N(VGA_BLANK_N), .hsync(hsync_buf), .vsync(vsync_buf), .pixel_x(pixel_x), .pixel_y(pixel_y), .video_on(video_on)); //按键消抖 key_jitter i0_key_jitter( . clkin(clk), . key_in(start_btn_n),//输入 . key_out(), . key_negedge(btn_start)//消抖后按键下降沿 ); //按键消抖 key_jitter i1_key_jitter( . clkin(clk), . key_in(pause_btn_n),//输入 . key_out(), . key_negedge(btn_pause)//消抖后按键下降沿 ); //按键消抖 key_jitter i2_key_jitter( . clkin(clk), . key_in(btn_0_in),//输入 . key_out(btn_0), . key_negedge()//消抖后按键下降沿 ); //按键消抖 key_jitter i3_key_jitter( . clkin(clk), . key_in(btn_1_in),//输入 . key_out(btn_1), . key_negedge()//消抖后按键下降沿 ); //调用图形控制模块(高电平复位) graphic_generator i_graphic_generator(.clk(clk), .rst(rst_s), .btn_start(btn_start), .btn_pause(btn_pause), .btn_0(btn_0), .btn_1(btn_1), .pixel_x(pixel_x), .pixel_y(pixel_y), .video_on(video_on), .score(score), .rgb(rgb_buf)); endmodule
代码文件
关注下方公众号获取