反应游戏 FPGA 设计 Verilog Quartus

名称:反应游戏 FPGA 设计 Verilog Quartus

软件:Quartus

语言:Verilog

开发板/平台:Cyclone IV FPGA开发板

功能介绍

本项目是一个反应游戏/反应计时类 FPGA 设计,使用 Verilog 编写并在 Quartus 环境下完成工程搭建。系统通过开发板按键实现启动计数、停止计数、保存成绩、查看已保存数据、切换最大/最小值显示、查看下一条数据、触发排序以及切换原始/排序数据等功能,适合用于数字系统课程设计和 FPGA 综合实验。 顶层模块名为 FinalDesign,输入包含 50MHz 系统时钟、全局清零信号、多路按键控制信号以及排序模式拨码开关;输出连接数码管位选、数码管段选和多个 LED 状态指示。数码管用于显示当前计数值或存储数据,LED 用于提示错误/状态、运行中状态、最大最小值提示以及排序完成状态。 设计不仅包含基础计时和显示功能,还加入了数据保存、数据查看、最大值/最小值显示以及数据排序功能。用户可以通过按键保存多次反应数据,再通过查看和排序功能对结果进行比较,功能完整度高于单纯计数器或简单按键显示实验。

运行环境

开发语言:Verilog 开发软件:Quartus 目标平台:Cyclone IV FPGA开发板 工程包含 Quartus 工程文件、Verilog 源码、管脚约束/分配文件、编译输出文件和测试文件,可用于综合、编译、下载验证和仿真参考。

设计思路

本设计围绕“反应计时/数据记录/数据显示”这一类交互式 FPGA 应用展开。系统以 50MHz 时钟作为基础时钟输入,通过按键控制计数运行状态,使用 start、stop、save、view、next_data、sort 等控制信号完成启动、停止、保存、查看、排序和显示切换等操作。由于按键属于机械输入,顶层对各个按键控制信号统一接入 debounce_fsm 去抖模块,减少抖动对状态机和数据操作的影响。 计数部分输出 10 位计数数据,并配合状态标志反馈当前计数状态。主逻辑模块负责控制计数启停及错误标志,数据存储模块负责保存计数结果、维护数据数量、查看当前数据、输出最大值/最小值显示状态,并支持排序完成标志输出。这样可以把计时控制、数据管理和显示驱动分开处理,模块职责较清晰,便于调试和二次扩展。 显示部分采用动态扫描数码管输出,顶层提供 8 位位选 DIG 和 7 位段选 codeout。系统根据当前模式选择正常计数显示、数据查看显示、最大值显示或最小值显示,并通过 LED、LED_InRuning、LED_comp、LED_SortDone 等信号给出错误状态、运行状态、比较提示和排序完成提示。排序模式由 sort_mode 拨码选择,支持升序和降序两种方向。

模块结构

工程顶层模块为 FinalDesign,主要由以下 Verilog 模块组成: FinalDesign:系统顶层,连接时钟、复位、按键、拨码开关、数码管和 LED,并完成各子模块例化。 MainLogic:主逻辑控制模块,用于处理计数启动、停止及错误状态生成。 Counter:计数器模块,输出 10 位计数结果和计数状态标志。 debounce_fsm:按键去抖模块,用于对 start、stop、save、view、show_max_min、next_data、sort、toggle_sorted 等按键信号进行去抖处理。 DataStorage:数据存储与排序相关模块,负责保存数据、输出当前查看数据、最大/最小值显示、排序完成标志等功能。 DynamicScanTubes:数码管动态扫描显示模块,驱动 DIG 位选和 codeout 段选输出。 FinalDesign_tb:仿真测试文件,用于对工程逻辑进行仿真验证参考。

开发板验证

工程支持 Cyclone IV FPGA 开发板验证,工程中配置了管脚约束/分配文件,并配有开发板实物运行展示。按键、拨码开关、LED 和数码管等外设接口已经在顶层端口中统一定义,便于直接结合开发板资源进行下载测试。 实际验证重点包括按键去抖后的启动、停止、保存、查看、排序触发等操作,以及数码管动态扫描显示、运行状态 LED、错误/状态 LED、最大最小值提示 LED、排序完成 LED 等输出状态。该设计适合用于 FPGA 课程设计、数字逻辑综合实验以及带按键交互和数据显示的综合项目参考。

反应游戏 FPGA 设计 Verilog Quartus 开发板验证图片 开发板.jpg

演示视频

配套演示视频展示了工程在开发板上的实际运行效果,可用于观察按键操作、数码管显示变化以及状态 LED 响应。对于需要复现实验现象或检查功能流程的用户,视频可以作为上板调试和验收时的参考。

仿真图/仿真说明/设计文档图片

设计文档内容包含工程文件、程序文件、程序编译、RTL 图和管脚分配等说明,并配有相关文档图片。工程中包含 FinalDesign_tb 测试文件,可作为仿真和功能检查参考。

反应游戏 FPGA 设计 Verilog Quartus 设计文档图片 image1.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

部分代码

以下展示顶层模块 FinalDesign 的部分代码,完整源码请下载压缩包查看。

module FinalDesign (
    // 系统时钟与复位
    input         clk_50M,        // 50MHz系统时钟
    input         clear,          // 全局同步清零(高有效)
    // 功能控制按键(需去抖)
    input         start,          // 启动计数/运行(按键,上升沿有效)
    input         stop,           // 停止计数/运行(按键,上升沿有效)
    input         save,           // 保存数据(按键,上升沿有效)
    input         view,           // 切换查看模式(按键,上升沿有效)
    input         show_max_min,   // 切换最大/最小值显示(按键,上升沿有效)
    input         next_data,      // 查看下一个数据(按键,上升沿有效)
    input         sort,           // 触发数据排序(按键,上升沿有效)
    input         toggle_sorted,  // 切换原始/排序数据(按键,上升沿有效)
    // 排序模式选择(拨码开关,无需去抖)
    input         sort_mode,      // 0=升序,1=降序
    // 输出外设
    output wire   [7:0] DIG,      // 数码管位选
    output wire   [6:0] codeout,  // 数码管段选
    output wire   LED,            // 错误/状态LED
    output wire   LED_InRuning,   // 运行中LED
    output wire   LED_comp,       // 最大最小值提示LED
    output wire   LED_SortDone    // 排序完成LED(新增)
);

// -------------------------- 内部信号定义 --------------------------
// 计数器模块接口
wire [9:0]  CounterOut_wire;     // 计数器输出数据(10位)
wire [1:0]  CounterFlag_wire;    // 计数器状态标志
// 主逻辑模块接口
wire        ErrorFlag_wire;      // 错误标志(如计数越界、无效操作)
// 数据存储模块接口
wire [9:0]  display_data;        // 待显示数据
wire        display_error;       // 显示错误标志
wire [3:0]  data_count;          // 已存储数据个数
wire [9:0]  current_stored_data; // 当前查看的存储数据
wire [1:0]  display_mode_wire;   // 显示模式(00-正常 01-查看 10-最大值 11-最小值)
wire        sort_done;           // 排序完成标志(来自DataStorage)

// 按键去抖后信号(所有按键类输入均需去抖)
wire view_deb;
wire show_max_min_deb;
wire next_data_deb;
wire save_deb;
wire stop_deb;
wire start_deb;
wire sort_deb;               // 排序触发去抖后信号
wire toggle_sorted_deb;      // 切换原始/排序数据去抖后信号

// -------------------------- 按键去抖模块实例化 --------------------------
// 去抖模块:view按键
debounce_fsm deb_view(
    .clk(clk_50M),
    .rst(clear),
    .key_in(view),
    .key_out(view_deb)
);

// 去抖模块:show_max_min按键
debounce_fsm deb_show_max_min(
    .clk(clk_50M),
    .rst(clear),
    .key_in(show_max_min),
    .key_out(show_max_min_deb)
);

// 去抖模块:next_data按键
debounce_fsm deb_next_data(
    .clk(clk_50M),
    .rst(clear),
    .key_in(next_data),
    .key_out(next_data_deb)
);

// 去抖模块:save按键
debounce_fsm deb_save(
    .clk(clk_50M),
    .rst(clear),
    .key_in(save),
    .key_out(save_deb)
);

// 去抖模块:start按键
debounce_fsm deb_start(
    .clk(clk_50M),
    .rst(clear),
    .key_in(start),
    .key_out(start_deb)
);

// 去抖模块:stop按键
debounce_fsm deb_stop(
    .clk(clk_50M),
    .rst(clear),
    .key_in(stop),
    .key_out(stop_deb)
);

// 去抖模块:sort按键(新增)
debounce_fsm deb_sort(
    .clk(clk_50M),
    .rst(clear),
    .key_in(sort),
    .key_out(sort_deb)
);

// 去抖模块:toggle_sorted按键(新增)
debounce_fsm deb_toggle_sorted(
    .clk(clk_50M),
    .rst(clear),
    .key_in(toggle_sorted),
    .key_out(toggle_sorted_deb)
);

// -------------------------- 子模块实例化 --------------------------
// 1. 主逻辑模块:控制计数启停、错误标志生成
MainLogic ML(
    .clk_50M(clk_50M),
    .clear(clear),
    .start(start_deb),
    .stop(stop_deb),
// ... 以下代码略,完整源码请下载压缩包查看

代码文件(付费下载)

📥 付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 反应游戏 FPGA 设计 Verilog Quartus

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

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