16位原码乘法器 FPGA 设计 Verilog Vivado

名称:16位原码乘法器 FPGA 设计 Verilog Vivado

软件:Vivado

语言:Verilog

功能介绍

本项目实现的是一个基于 FPGA 的 16 位原码乘法器系统,工程语言为 Verilog,开发环境为 Vivado。设计通过矩阵键盘输入乘数和被乘数,使用加法与移位思想完成原码乘法运算,并将输入数据及运算结果输出到数码管显示,形成一个可交互的硬件乘法计算系统。 系统不仅包含乘法器运算逻辑,还包含完整的人机交互链路:矩阵键盘扫描、按键上升沿检测、数字输入管理、状态控制、时钟分频以及数码管动态显示。顶层模块 calculator 将这些功能模块连接起来,适合用于理解 FPGA 中从输入采集到运算处理再到显示输出的完整设计流程。 该设计适用于数字逻辑、FPGA 课程设计、Verilog RTL 练习以及 16 位乘法器实验。项目已包含 Vivado 工程、RTL 源码、测试平台、管脚约束和板级相关材料,可用于综合实现、仿真验证和开发板下载测试。

运行环境

开发语言:Verilog 开发软件:Vivado 工程类型:FPGA RTL 工程 顶层模块:calculator 主要接口:系统时钟、复位、4x4 矩阵键盘行列信号、数码管位选信号、数码管段选信号 工程文件:Calculator.xpr 约束文件:pins.xdc

设计思路

本设计采用“键盘输入、状态控制、乘法运算、数码管显示”的结构组织方式。矩阵键盘负责输入两个 16 位原码操作数,并提供乘号、确认、清除等控制按键;状态控制模块根据按键事件切换当前输入与运算阶段;运算模块完成 16 位原码乘法处理;显示模块将输入值和结果转换为适合数码管动态扫描显示的形式。 16 位原码乘法器的核心思路是利用加法和移位完成乘法计算。该方法适合在 FPGA 中用 RTL 描述实现,结构清晰,便于观察中间流程,也便于后续根据资源、速度或时序要求继续优化。相比直接把所有功能写入一个大模块,分模块设计可以让键盘扫描、按键上升沿识别、状态切换、数据输入、乘法计算和显示刷新各自独立,工程可读性和调试效率更高。 系统在交互上更接近一个简易乘法计算器。用户先通过矩阵键盘输入操作数 A,再输入操作数 B,之后选择乘法并确认计算,最终由数码管显示运算结果。顶层模块统一连接时钟分频、输入处理、状态控制、数值寄存与显示输出,使各模块之间的信号关系比较直观,适合作为 FPGA 数字系统课程设计、原码乘法器实验和板级验证项目参考。

模块结构

顶层模块:calculator,负责连接时钟、复位、矩阵键盘接口、状态控制、输入数据、乘法结果和数码管显示接口。 主要功能模块包括: key_rise:按键上升沿检测模块,用于将按键动作转换为有效脉冲信号。 key_4x4:4x4 矩阵键盘扫描模块,完成行列扫描并输出按键状态。 data_input:键盘输入处理模块,将矩阵键盘按键映射为数字键和功能键。 state_ctrl:状态控制模块,根据 ESC、乘号和 Enter 等按键控制输入及运算状态。 num_in:数字输入与运算数据管理模块,维护操作数 A、操作数 B 和计算结果。 Multiplier_16bit:16 位原码乘法器模块,实现核心乘法运算逻辑。 BCD_16:数值转换相关模块,用于配合显示输出。 display:数码管显示模块,负责位选、段选和动态刷新。 div_clk:时钟分频模块,将输入时钟分频得到键盘与控制逻辑使用的 500KHz 时钟。 testbench:仿真测试文件,用于功能验证参考。

开发板验证

工程包含 Vivado 管脚约束文件,并配套开发板相关图片,可用于进行板级验证。设计面向 FPGA 开发板外设实现,矩阵键盘用于输入乘数、被乘数及控制按键,数码管用于显示输入数据和乘法结果。 板级运行时,用户通过键盘输入 16 位原码操作数,按乘号键进入乘法运算流程,按确认键后由顶层控制逻辑完成结果输出。约束文件对矩阵键盘行列信号、数码管位选和段选等接口进行了连接约束,便于在 Vivado 中综合、实现并生成 bit 文件后下载到开发板验证。

16位原码乘法器 FPGA 设计 Verilog Vivado 开发板验证图片 .jpg

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

配套设计说明内容包含 16 位原码乘法器的设计要求、体系结构、RTL 编码、功能仿真、板级验证、资源消耗与功耗评估等要求说明。工程中包含 testbench 仿真测试文件以及 Vivado 仿真目录,可作为功能仿真和波形观察的参考。

部分代码

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

module calculator(
input clk,//时钟
input reset,
//数字按键
input [3:0] L_row,//行
output [3:0] H_col,//列
output [2: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 enter;//Enter键

wire [15:0] OP_A;//输入的操作数A
wire [15:0] OP_B;//输入的操作数B
wire [31:0] OP_Result;//结果
wire [31: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(),///
. key_9_rise(key_9_p),//9
. key_A_rise(key_5_p),//5
. key_B_rise(key_1_p),//1

. key_C_rise(mul),//*
. 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键
. mul(mul),//乘
. 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)//结果
);

//数码管显示模块
display i_display(
. clk_500KHz(clk_500KHz),//
. clk(clk),
. OP_A(OP_A),//输入的操作数A
. OP_B(OP_B),//输入的操作数B
. OP_Result(OP_Result),//结果
. current_state(current_state),//当前状态
. ABC(ABC),//数码管位选
. segment(segment)//数码管段选
);

endmodule

代码文件(付费下载)

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

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

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