矩阵键盘除法计算器 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 开发板上观察按键输入、除法运算结果与余数显示效果。

矩阵键盘除法计算器 FPGA 设计 Verilog Quartus 开发板验证图片 开发板.png

演示视频

包含演示视频,可直观看到矩阵键盘输入与数码管显示的运行效果,便于下载前了解工程在硬件上的操作流程和显示结果。

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

设计文档内容覆盖工程文件、程序文件、程序编译、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 设计文档图片 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

部分代码

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

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

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