打地鼠游戏 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 说明。仿真部分覆盖顶层仿真、随机数模块、游戏控制模块和显示模块,便于对各模块功能进行单独验证和整体联调。

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image1.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image10.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image11.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image12.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image13.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image2.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image3.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image4.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image5.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image6.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image7.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image8.png

打地鼠游戏 FPGA 设计 Verilog Quartus 设计文档图片 image9.png

部分代码

以下展示顶层模块 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

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员