贪吃蛇 VGA 游戏 Verilog Quartus
名称:贪吃蛇 VGA 游戏 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:DE2-115
功能介绍
这是一个运行在 DE2-115 开发板上的 Verilog 贪吃蛇 VGA 游戏工程。设计以 Snake 为顶层模块,支持 50 MHz 时钟、复位、按键方向控制、速度模式选择以及开始/暂停操作,游戏画面通过 VGA 接口输出,得分通过开发板数码管显示。 工程包含主状态机、导航状态机、蛇体控制、随机目标生成、速度计数、VGA 时序封装、计分器和七段数码管译码等模块。两组按键输入分别连接 PUSH_BUTTONS 与 c_PUSH_BUTTONS,顶层同时保留两套导航与得分信号,适合学习多模块协同、游戏状态管理、随机位置生成和 FPGA 视频输出的实现方法。 源码配套 Quartus 工程文件、引脚约束和编译输出文件,模块划分清晰,能够直接作为 DE2-115 VGA 游戏开发、Verilog 状态机设计和 FPGA 外设接口实验的参考。运行环境
开发工具:Intel Quartus 工程环境 硬件平台:Altera DE2-115 开发板 设计语言:Verilog 顶层模块:Snake 时钟输入:CLOCK(50 MHz) 外设接口:按键输入、VGA 输出、HEX0-HEX3 数码管输出 工程文件:Snake.qpf、Snake.qsf 及 scr 目录下的 Verilog 源文件设计思路
顶层 Snake 模块以 CLOCK 和 RESET 为基础时序与复位输入,通过 MasterStateMachine 管理游戏总体状态,并将两组按键分别送入 NavigationStateMachine,形成主蛇与对照蛇的方向状态。SnakeControl 集中处理蛇体位置、目标碰撞、得分、自撞以及墙边相关状态,并使用随机地址模块提供目标位置更新信号。 GenericCounter_speed 根据 speed_mode、当前 Score 以及 stop_start 产生 Gameclock,游戏逻辑在该节拍下更新,从而实现简单、中等和困难等速度模式,并支持开始/暂停控制。VGAWrapper 接收水平和垂直地址及颜色数据,输出 VGA 时钟、行场同步、消隐和颜色信号;ScoreCounter 与 Seg7Decoder 负责计分结果到 HEX0-HEX3 数码管显示的连接。各模块通过明确的状态线、坐标线和得分线连接,便于在 Quartus 工程中逐级查看和修改。模块结构
顶层模块为 Snake,主要连接关系如下: MasterStateMachine 负责游戏主状态与自撞输入处理;NavigationStateMachine 实例化两份,分别产生 NavState 和 c_NavState;RandomWrapper 组合 PRandomHorz 与 PRandomVert,为目标生成提供水平和垂直随机地址;GenericCounter_speed 根据速度模式与得分产生 Gameclock。 SnakeControl 是游戏核心控制模块,连接地址、颜色、目标到达、导航状态、随机地址、得分和 Suicide 信号。VGAWrapper 负责将 AddrH、AddrV 与 Colour 转换为 VGA 输出时序。ScoreCounter 输出 Score 与 c_Score,Seg7Decoder 用于数码管显示,GenericCounter 则提供通用计数功能。开发板验证
工程提供 DE2-115 开发板的管脚约束与分配文件,可在 Quartus 中完成引脚配置并下载生成的 SOF 文件进行硬件验证。顶层接口包含 50 MHz 时钟、复位、两组按键输入、速度模式、开始/暂停控制、VGA 颜色与同步信号以及 HEX 数码管输出,便于连接开发板按键、VGA 接口和数码管进行整机测试。部分代码
以下展示顶层模块 Snake 的部分代码,完整源码请下载压缩包查看。
module Snake(
input CLOCK,//50M
input RESET,//高电平复位
input [3:0] PUSH_BUTTONS,//按键
input [3:0] c_PUSH_BUTTONS,//按键
input [1:0] speed_mode,//简单中等困难三个模式
input stop_start,//开始暂停
output [7:0] COLOUR_OUT,
output HS,
output VS,
output VGA_CLK ,//VGA时钟
output VGA_BLANK_N ,//VGA颜色信号有效控制信号,高电平有效
output [7:0] HEX0,
output [7:0] HEX1,
output [7:0] HEX2,
output [7:0] HEX3
);
// the wires for connecting the modules
wire [1:0] MasterState;
wire [1:0] NavState;
wire [1:0] c_NavState;
wire [7:0] RandomAddrH;
wire [6:0] RandomAddrV;
wire [9:0] AddrH;
wire [8:0] AddrV;
wire [7:0] Colour;
wire ReachedTarget;
wire c_ReachedTarget;
wire [3:0] Score; // the score we get from the score counter
wire [3:0] c_Score; // the score we get from the score counter
wire Gameclock;
wire Suicide;
wire [3:0] NOT_PUSH_BUTTONS;
wire REACHED_WALL;
wire game_enable;
//assign game_enable=(~REACHED_WALL & stop_start);
assign game_enable=(stop_start);
assign NOT_PUSH_BUTTONS= ~PUSH_BUTTONS;
// initialize the modules
MasterStateMachine MasterSTM (
.RESET(RESET),
.CLOCK(CLOCK),
.PUSH_BUTTONS(NOT_PUSH_BUTTONS),
.SCORE_IN(Score),
.c_SCORE_IN(c_Score),
.STATE_OUT(MasterState),
.SUICIDE_IN(Suicide)
);
NavigationStateMachine NavSTM (
.RESET(RESET),
.CLOCK(Gameclock),
.PUSH_BUTTONS(NOT_PUSH_BUTTONS),
.STATE_OUT(NavState)
);
NavigationStateMachine c_NavSTM (
.RESET(RESET),
.CLOCK(Gameclock),
.PUSH_BUTTONS(c_PUSH_BUTTONS),
.STATE_OUT(c_NavState)
);
RandomWrapper RNDMWrp (
.CLK(CLOCK),
.RESET(RESET),
.NEXT(ReachedTarget || c_ReachedTarget),
.MASTER_STATE(MasterState),
.HORIZONTAL(RandomAddrH),
.VERTICAL(RandomAddrV)
);
// Change this to adjust the snake's speed
GenericCounter_speed #(
.COUNTER_WIDTH(32)
)
GameSpeed(
.CLK(CLOCK),
.RESET(RESET),
.speed_mode(speed_mode),
.SCORE(Score),
.ENABLE_IN(game_enable),
.TRIGG_OUT(Gameclock)
);
SnakeControl SnakeCtl (
.CLK(CLOCK),
.RESET(RESET),
.GAMECLOCK(Gameclock),
.ADDRH(AddrH),
.ADDRV(AddrV),
.COLOUR(Colour),
.REACHED_TARGET(ReachedTarget),
.c_REACHED_TARGET(c_ReachedTarget),
.MASTER_STATE(MasterState),
.NAVIGATION_STATE(NavState),
.c_NAVIGATION_STATE(c_NavState),
.RAND_ADDRH(RandomAddrH),
.RAND_ADDRV(RandomAddrV),
.SCORE(Score),
.c_SCORE(c_Score),
.SUICIDE(Suicide)
);
VGAWrapper VGAWrp (
.CLK(CLOCK),
.RESET(RESET),
.MASTER_STATE(MasterState),
.ADDRH(AddrH),
.ADDRV(AddrV),
.CIN(Colour),
.COUT(COLOUR_OUT),
.VGA_BLANK_N(VGA_BLANK_N),
.VGA_CLK(VGA_CLK),
.HS(HS),
.VS(VS)
// ... 以下代码略,完整源码请下载压缩包查看
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 贪吃蛇 VGA 游戏 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 贪吃蛇 VGA 游戏 Verilog Quartus