矩阵键盘除法计算器 FPGA 设计 Verilog Quartus
名称:矩阵键盘除法计算器 FPGA 设计 Verilog Quartus
软件:Quartus
语言:Verilog
开发板/平台:Cyclone IV FPGA开发板
功能介绍
本设计实现一个基于 FPGA 的矩阵键盘除法计算器,用户通过 4x4 矩阵键盘输入数字、除号、确认和清除等按键,系统完成两个操作数的采集、运算状态切换、除法计算以及结果显示。设计面向 FPGA 课程设计、数字逻辑实验和 Verilog 综合项目,功能链路较完整,适合用于学习键盘扫描、按键上升沿提取、状态机控制、除法运算和数码管显示的综合应用。 工程以 calculator 作为顶层模块,外部接口包括系统时钟、复位信号、矩阵键盘行列信号,以及六位数码管的位选和段选输出。按键输入经过扫描与边沿处理后转换为数字键、ESC、除号和 Enter 等控制信号;状态控制模块根据功能键推进输入第一个操作数、输入第二个操作数、执行除法和显示结果等流程。 显示部分将操作数、运算结果和余数送至数码管显示模块进行动态刷新。除法计算不仅输出商,也保留余数信息,便于在硬件实验中观察整数除法结果。整体设计不是单一算法模块,而是包含输入、控制、计算、显示和板级接口的完整 FPGA 小系统。运行环境
开发语言:Verilog 开发软件:Quartus 工程顶层:calculator 适用方向:FPGA 数字系统设计、矩阵键盘输入控制、除法器设计、数码管动态显示实验。设计思路
系统采用模块化结构组织,顶层 calculator 负责连接时钟分频、矩阵键盘输入、状态控制、数字输入处理和数码管显示模块。外部 50MHz 时钟先通过分频模块得到 500kHz 工作时钟,用于键盘扫描、状态控制和输入处理,降低按键扫描与显示控制的实现复杂度。 矩阵键盘部分通过行列扫描识别 4x4 按键,并将按键事件转换成独立的上升沿脉冲信号。顶层中对键值进行了功能映射:数字键用于组成操作数,除号键用于选择除法运算,Enter 键用于确认输入或执行计算,ESC 键用于清除或返回初始状态。这样的映射方式使键盘输入与后级状态机解耦,便于调整按键布局。 控制核心由 state_ctrl 维护当前工作状态,并输出计算方式控制信号。num_in 模块根据当前状态接收数字键脉冲,分别形成操作数 A 和操作数 B,在进入运算阶段后输出结果与余数。Divider_32bit、BCD_16 等模块配合完成除法运算和显示数据处理,使计算逻辑与显示逻辑保持清晰分工。 数码管显示模块根据当前状态选择显示操作数、结果或余数,并通过位选 ABC 与段选 segment 驱动六位数码管动态显示。该结构便于在开发板上直接观察输入和计算过程,也方便在仿真中分别验证键盘输入、数据处理、控制状态和显示输出。模块结构
顶层模块:calculator,负责连接按键输入、状态控制、数字处理、除法计算与数码管显示。 主要模块包括: key_4x4:4x4 矩阵键盘扫描模块,输出各按键识别信号。 key_rise:按键上升沿检测模块,用于生成单周期按键触发脉冲。 data_input:键盘输入封装模块,将矩阵键盘按键转换为数字键和功能键脉冲。 state_ctrl:状态控制模块,根据 ESC、除号和 Enter 控制输入及运算流程。 num_in:数字输入与操作数管理模块,生成 OP_A、OP_B、OP_Result 和余数。 Divider_32bit:除法器模块,用于完成除法运算。 BCD_16:BCD 转换相关模块,用于配合数码管显示。 display:数码管显示模块,输出位选 ABC 和段选 segment。 div_clk:时钟分频模块,将输入时钟分频到 500kHz。 配套 Testbench 包括 tb_num_in、tb_data_input、tb_display、tb_key_4x4、tb_state_ctrl、Divider_32bit_tb 等,可用于对关键模块进行仿真验证。开发板验证
工程带有 Quartus 管脚约束文件,并配套 Cyclone IV FPGA 开发板相关图片,可用于开发板实物验证。板级接口覆盖矩阵键盘输入接口、系统时钟复位接口和六位数码管显示接口,适合在 Cyclone IV FPGA 开发板上观察按键输入、除法运算结果与余数显示效果。
演示视频
包含演示视频,可直观看到矩阵键盘输入与数码管显示的运行效果,便于下载前了解工程在硬件上的操作流程和显示结果。仿真图/仿真说明/设计文档图片
设计文档内容覆盖工程文件、程序文件、程序编译、RTL 图、管脚分配、仿真图和 Testbench 说明,并包含矩阵键盘控制模块、数字输入模块、除法器模块、控制模块、显示模块等说明图片。仿真资料可作为理解模块接口、验证输入流程和分析除法计算过程的参考。











部分代码
以下展示顶层模块 calculator 的部分代码,完整源码请下载压缩包查看。
module calculator( input clk,//时钟 input reset, //数字按键--P6 input [3:0] L_row,//行 output [3:0] H_col,//列 output [5:0] ABC,//数码管位选 output [7:0] segment//数码管段选 ); wire [2:0] current_state;//当前状态 wire [1:0] calcul;//计算 wire key_0_p; wire key_1_p; wire key_2_p; wire key_3_p; wire key_4_p; wire key_5_p; wire key_6_p; wire key_7_p; wire key_8_p; wire key_9_p; wire esc;//ESC键 //wire mul;//乘 wire div;//除 wire enter;//Enter键 wire [15:0] OP_A;//输入的操作数A wire [15:0] OP_B;//输入的操作数B wire [15:0] OP_Result;//结果 wire [15:0] remainder;//余数 wire clk_500KHz; //分频 div_clk i_div_clk( . clk(clk),//50M . clk_500KHz(clk_500KHz)//分频到500K ); //输入模块 data_input i_data_input( . clk_500KHz(clk_500KHz),//500KHZ . reset(reset), . L_row(L_row),//行 . H_col(H_col),//列 . key_0_rise(enter),//= . key_1_rise(),//- . key_2_rise(key_7_p),//7 . key_3_rise(key_3_p),//3 . key_4_rise(esc),//e . key_5_rise(),//+ . key_6_rise(key_6_p),//6 . key_7_rise(key_2_p),//2 . key_8_rise(div),/// . key_9_rise(key_9_p),//9 . key_A_rise(key_5_p),//5 . key_B_rise(key_1_p),//1 . key_C_rise(),//* . key_D_rise(key_8_p),//8 . key_E_rise(key_4_p),//4 . key_F_rise(key_0_p)//0 ); //状态控制模块 state_ctrl i_state_ctrl( . clk(clk_500KHz),//时钟 . esc(esc),//ESC键 . div(div),//乘 . enter(enter),//Enter键 . current_state(current_state),//当前状态 . calcul(calcul)//计算 ); //数字输入模块 num_in i_num_in( . clk(clk_500KHz),//时钟 . esc(esc),//ESC键 . key_0(key_0_p), . key_1(key_1_p), . key_2(key_2_p), . key_3(key_3_p), . key_4(key_4_p), . key_5(key_5_p), . key_6(key_6_p), . key_7(key_7_p), . key_8(key_8_p), . key_9(key_9_p), . current_state(current_state),//当前状态 . calcul(calcul),//计算方式,//00表示加//01表示减//10表示乘//11表示除 . OP_A(OP_A),//输入的操作数A . OP_B(OP_B),//输入的操作数B . OP_Result(OP_Result),//结果 . OP_rem(remainder) //余数 ); //数码管显示模块 display i_display( . clk_500KHz(clk_500KHz),// . clk(clk), . OP_A(OP_A),//输入的操作数A . OP_B(OP_B),//输入的操作数B . OP_Result(OP_Result),//结果 . OP_rem(remainder), //余数 . current_state(current_state),//当前状态 . ABC(ABC),//数码管位选 . segment(segment)//数码管段选 ); endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 矩阵键盘除法计算器 FPGA 设计 Verilog Quartus
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 矩阵键盘除法计算器 FPGA 设计 Verilog Quartus