打地鼠游戏 FPGA 设计 Verilog Quartus
名称:打地鼠游戏 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现了一个基于 FPGA 的打地鼠小游戏,使用 8 个 LED 表示地鼠出现位置,8 个独立按键作为击打输入。游戏开始后,系统根据伪随机数选择 LED 点亮位置,玩家按下对应按键完成击中判断,命中后进行分数累加,并继续刷新下一次地鼠位置。 系统带有倒计时和分数显示功能,分数采用三位 BCD 数码管显示,倒计时秒数采用两位 BCD 数码管显示。顶层接口包含 20MHz 系统时钟、低电平复位/开始按键、8 路按键输入、8 路 LED 输出以及 5 组 BCD 数码管输出,适合用于 FPGA 数字系统课程设计、游戏控制逻辑练习和 Verilog 综合实验。 整体工程采用 Verilog 编写,在 Quartus 环境下完成工程组织、编译和管脚分配。设计内容覆盖随机数产生、按键输入处理、状态控制、计时、计分和显示输出等多个常见 FPGA 设计环节,结构清晰,便于理解和二次修改。运行环境
开发语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA开发板 工程顶层模块:dadishu_top 主要接口:20MHz 系统时钟、低电平复位/游戏开始按键、8 路游戏按键、8 路 LED、5 位 BCD 数码管显示接口。设计思路
设计以顶层模块 dadishu_top 作为系统连接中心,将随机数产生、游戏控制和显示输出三个部分组合成完整的打地鼠逻辑。系统复位/开始后,LFSR 模块持续产生 8 位伪随机数,游戏控制模块利用随机数确定当前地鼠出现的位置,并通过 LED 输出给玩家。 8 个独立按键在顶层被拼接成统一的 8 位按键向量,便于游戏控制模块集中处理。游戏控制逻辑负责倒计时、LED 刷新、按键命中判断和分数累加。当前 LED 点亮位置与按键输入匹配时,即认为玩家击中地鼠,分数按照 BCD 形式输出到显示模块。 显示部分采用独立 display 模块,将分数的百位、十位、个位以及倒计时秒数的十位、个位分别输出到数码管接口。游戏运行状态 running 用于控制分数显示是否有效,时间显示保持开启,从而形成较完整的“开始游戏、随机出鼠、按键击打、计分、倒计时结束”的流程。 该设计没有把所有逻辑堆叠在顶层,而是按照功能划分为随机数、游戏控制和显示模块,便于单独仿真和调试。配套 testbench 覆盖顶层、随机数模块、游戏控制模块和显示模块,适合作为 FPGA 游戏类设计的参考工程。模块结构
主要模块包括: 1. dadishu_top:系统顶层模块,连接时钟复位、按键输入、LED 输出、随机数模块、游戏控制模块和显示模块。 2. mseq_lfsr:伪随机数发生模块,产生 8 位随机数,用于选择地鼠出现位置。 3. game_ctrl:游戏控制模块,负责倒计时、LED 控制、按键击中检测、分数累加和游戏运行状态输出。 4. display:显示模块,将分数和倒计时 BCD 数据输出到数码管接口。 5. tb_dadishu_top、tb_mseq_lfsr、tb_game_ctrl、tb_display:对应的仿真测试文件,用于验证顶层及各功能模块逻辑。开发板验证
工程包含 Cyclone IV FPGA开发板相关管脚约束与分配文件,可用于开发板上板验证。设计接口覆盖核心板按键、8 路 LED 以及 BCD 数码管显示输出,演示视频展示了打地鼠游戏在硬件环境中的运行效果,包括 LED 随机点亮、按键击打、分数显示和倒计时显示等功能。演示视频
包含打地鼠游戏演示视频,视频内容用于展示工程在硬件平台上的运行效果,可直观看到 LED 地鼠位置变化、按键交互、分数变化和倒计时显示过程。仿真图/仿真说明/设计文档图片
设计文档内容包含工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图和 Testbench 说明。仿真部分覆盖顶层仿真、随机数模块、游戏控制模块和显示模块,便于对各模块功能进行单独验证和整体联调。












部分代码
以下展示顶层模块 dadishu_top 的部分代码,完整源码请下载压缩包查看。
module dadishu_top(
input sysclk,//时钟20M
input reset_n,//低电平复位(游戏开始按键)-核心板key4
input key_1,//按下高电平,按键1
input key_2,//按下高电平,按键2
input key_3,//按下高电平,按键3
input key_4,//按下高电平,按键4
input key_5,//按下高电平,按键5
input key_6,//按下高电平,按键6
input key_7,//按下高电平,按键7
input key_8,//按下高电平,按键8
output [7:0] LED,//高电平亮
//BCD数码管,直接输入4位BCD码即可显示对应数字
output [3:0] HEX0,//数码管,分数个位
output [3:0] HEX1,//数码管,分数十位
output [3:0] HEX2,//数码管,分数百位
output [3:0] HEX3,//数码管,倒计时秒个位
output [3:0] HEX4 //数码管,倒计时秒十位
);
// ---------------- 顶层连线说明 ----------------
// rand :来自mseq_lfsr的8位伪随机数
// led_game :来自game_ctrl的LED控制信号
// score_* :分数的BCD三位(百/十/个)
// sec_* :倒计时秒的BCD两位(十/个)
// running :游戏正在进行的标志,控制分数显示是否有效
wire [7:0] rand;
wire [7:0] led_game;
wire [3:0] score_h, score_t, score_o;
wire [3:0] sec_t, sec_o;
wire running;
// 将8个独立按键拼接为一个向量,便于在控制模块中统一处理
wire [7:0] keys_vec = {key_8,key_7,key_6,key_5,key_4,key_3,key_2,key_1};
// ---------------- 随机数模块 ----------------
// 使用LFSR产生随机数,用于随机选择地鼠出现位置
mseq_lfsr u_lfsr(
.clk (sysclk),
.reset_n (reset_n),
.rand (rand)
);
// ---------------- 游戏控制模块 ----------------
// 负责:倒计时/LED控制/按键击中检测/分数累加
// 参数说明:
// - TICKS_PER_SEC:每秒对应的时钟节拍数(上板为20_000_000,仿真可覆盖)
// - GAME_SECONDS :游戏总时长(秒)
// - MOLE_UPDATE_TICKS:地鼠刷新间隔(时钟节拍数)
game_ctrl u_game_ctrl (
.clk (sysclk),
.reset_n (reset_n),
.keys (keys_vec),
.rand (rand),
.led (led_game),
.score_h (score_h),
.score_t (score_t),
.score_o (score_o),
.sec_t (sec_t),
.sec_o (sec_o),
.running (running)
);
// ---------------- 显示模块 ----------------
// 将BCD分数与倒计时直接输出到数码管接口
// show_score在游戏进行时为1,时间到后分数显示置0
display u_display(
.score_h (score_h),
.score_t (score_t),
.score_o (score_o),
.sec_t (sec_t),
.sec_o (sec_o),
.show_score(running),
.show_time (1'b1),
.HEX0 (HEX0),
.HEX1 (HEX1),
.HEX2 (HEX2),
.HEX3 (HEX3),
.HEX4 (HEX4)
);
// 顶层输出LED直接连接游戏控制模块的结果
assign LED = led_game;
endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 打地鼠游戏 FPGA 设计 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 打地鼠游戏 FPGA 设计 Verilog Quartus