4路抢答器 FPGA 设计 Verilog Quartus

4路抢答器 FPGA 设计 Verilog Quartus 名称4路抢答器 FPGA 设计 Verilog Quartus软件Quartus语言Verilog开发板/平台DE2-115功能介绍本设计实现一个基于 FPGA 的 4 路抢答器系统使用 Verilog 编写工程软件为 Quartus目标开发板为 DE2-115。系统包含抢答开始、复位、4 名选手抢答输入、抢答指示、超时指示、分数加减和倒计时数码管显示等功能适合 FPGA 入门实践、数字逻辑课程设计和抢答器类综合实验。 系统通过 4 个选手按键完成抢答输入抢答成功后对应 LED 点亮用于直观显示当前抢答选手超时状态通过独立 LED 输出提示。分数显示使用 HEX0-HEX3分别显示 4 位选手的分数倒计时显示使用 HEX4-HEX5显示倒计时十位和个位。 工程结构较简洁顶层模块 qiangdaqi 连接 control 控制模块和 display 显示模块便于学习 Verilog 模块划分、按键输入处理、状态控制、数码管动态/段码显示以及 FPGA 开发板外设约束配置。运行环境开发语言Verilog 开发软件Quartus 目标开发板DE2-115 工程包含 Quartus 工程文件、Verilog 源码、管脚约束文件、编译输出结果和 ModelSim 仿真相关目录可用于综合、编译、仿真参考和开发板验证。设计思路设计采用顶层模块统一连接控制逻辑与数码管显示逻辑系统时钟为 50MHz外部按键输入完成复位、开始抢答、加分、减分以及 4 路选手抢答操作。顶层模块只负责信号组织和模块例化核心业务由控制模块处理显示输出由显示模块完成结构清晰便于阅读和二次修改。 控制部分围绕抢答流程展开开始键触发一轮抢答4 路选手按键作为抢答输入抢答成功后通过对应 LED 给出选手指示同时输出倒计时数据和各选手分数。加分键、减分键用于对分数进行调整适合课堂实验、竞赛抢答器和 FPGA 综合课程设计等场景。 显示部分负责将 4 位选手分数和倒计时结果转换到数码管接口。HEX0-HEX3 用于显示各选手分数HEX4 和 HEX5 用于显示倒计时十位、个位使抢答状态、比分和时间信息能够同时在开发板上显示。模块结构顶层模块qiangdaqi负责连接系统输入输出、例化控制模块和显示模块。 控制模块control负责抢答开始、复位、4 路选手抢答、加分减分、倒计时、选手 LED 指示和超时 LED 输出。 显示模块display负责将 4 位选手分数和倒计时数据输出到 HEX0-HEX5 数码管接口。开发板验证工程面向 DE2-115 开发板进行了硬件验证适配包含 DE2-115 相关管脚约束与管脚分配内容可直接用于按键、LED 指示灯和 6 位数码管等板载外设连接。 按键部分用于复位、开始抢答、加分、减分以及 4 路选手抢答输入LED 用于显示抢答成功选手和超时状态HEX0-HEX3 显示 4 位选手分数HEX4-HEX5 显示倒计时。工程还配有开发板实物验证图片便于对照硬件连接和显示效果。演示视频配套演示视频展示了抢答器在开发板上的运行效果可用于观察开始抢答、选手按键响应、LED 指示、分数显示和倒计时显示等功能表现。演示视频请关注公众号后获取对应资料查看。仿真图/仿真说明/设计文档图片设计文档内容包含工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图、Testbench、整体仿真图、控制模块和显示模块等说明图片。文档图片可用于查看工程组织、编译结果、RTL 结构、仿真波形和模块划分情况。部分代码以下展示顶层模块qiangdaqi的部分代码完整代码可关注下方公众号卡片获取。module qiangdaqi( input clk,//50M input reset_n,//复位 input start_key,//抢答开始 input add_score_key,//加分键 input sub_score_key,//减分键 input player_1_key,//抢答按键 input player_2_key,//抢答按键 input player_3_key,//抢答按键 input player_4_key,//抢答按键 output led_1,//抢答指示灯 output led_2,//抢答指示灯 output led_3,//抢答指示灯 output led_4,//抢答指示灯 output led_out,//超时指示灯 output [7:0] HEX0,//数码管显示分数 output [7:0] HEX1,//数码管显示分数 output [7:0] HEX2,//数码管显示分数 output [7:0] HEX3,//数码管显示分数 output [7:0] HEX4,//数码管显示倒计时十位 output [7:0] HEX5 //数码管显示倒计时个位 ); wire [3:0] score_1; wire [3:0] score_2; wire [3:0] score_3; wire [3:0] score_4; wire [7:0] down_time; //控制模块 control i_control( . clk(clk),//50M . reset_n(reset_n),//复位 . start_key(start_key),//抢答开始 . add_score_key(add_score_key),//加分键 . sub_score_key(sub_score_key),//减分键 . player_1_key(player_1_key),//抢答按键 . player_2_key(player_2_key),//抢答按键 . player_3_key(player_3_key),//抢答按键 . player_4_key(player_4_key),//抢答按键 . led_1(led_1),//抢答指示灯 . led_2(led_2),//抢答指示灯 . led_3(led_3),//抢答指示灯 . led_4(led_4),//抢答指示灯 . down_time(down_time),//倒计时 . led_out(led_out),//超时指示灯 . score_1(score_1), . score_2(score_2), . score_3(score_3), . score_4(score_4) ); //显示模块 display i_display ( . clk(clk), . down_time(down_time), . score_1(score_1), . score_2(score_2), . score_3(score_3), . score_4(score_4), . HEX0(HEX0),//数码管段选 . HEX1(HEX1),//数码管段选 . HEX2(HEX2),//数码管段选 . HEX3(HEX3), //数码管段选 . HEX4(HEX4),//倒计时十位 . HEX5(HEX5) //倒计时个位 ); endmodule代码获取点击下方公众号卡片