16位串行乘法器 Verilog FPGA
名称:16位串行乘法器 Verilog FPGA
语言:Verilog
功能介绍
Multiplier_16bit 是一个16位乘法器,输入为 mult_A 和 mult_B,输出为32位乘积 mult_product,并通过 Done 信号指示本次计算完成。start 用于启动运算;启动后,设计逐位处理乘数,并把对应的被乘数移位值累加到部分积中。 该设计以移位相加算法和三状态控制流程实现乘法运算,适合用于学习串行乘法器、有限状态机控制及部分积累加的 Verilog 实现。设计文档列出了多组乘法仿真数据,可用于了解不同输入下的计算结果。运行环境
设计语言:Verilog。设计思路
设计采用移位相加算法完成两个16位操作数的乘法运算,按照乘数 mult_A 的位序逐位处理。每轮根据当前乘数位决定是否将被乘数的移位值累加到部分积中,再将被乘数左移一位,以对应乘数位权重的递增。经过16轮处理后,结果写入32位乘积输出。 控制逻辑由 INIT、ADD、SHIFT 三个状态组成。INIT 等待 start 启动并装载 mult_B;ADD 检查 mult_A 当前位并按需累加;SHIFT 更新移位数据及计数器。计数达到16时,状态机回到 INIT,置位 Done,并输出计算结果。该结构为串行、非流水线计算方式,文档给出的计算过程为每次乘法处理16个时钟周期。模块结构
工程包含乘法器模块 Multiplier_16bit 和仿真测试模块 testbench。Multiplier_16bit 接收两个16位操作数及 clk、start 控制信号,内部使用状态机、移位寄存器、计数器和部分积寄存器完成运算,并输出 mult_product 与 Done。演示视频
下方提供演示视频,可直接播放查看运行效果。
仿真图/仿真说明/设计文档图片
设计文档包含仿真说明及仿真图,列出5组乘法结果:0×0=0、255×38=9690、65530×4287=280927110、31136×3548=110470528、257×268=68876。文档还介绍了计算周期、吞吐量及非流水线特性。





部分代码
以下展示顶层模块 Multiplier_16bit 的部分代码,完整源码请下载压缩包查看。
module Multiplier_16bit(mult_A,mult_B,clk,start,Done,mult_product);
input [15:0] mult_A,mult_B; //mult_A是乘数,mult_B是被乘数
input clk,start;//start高电平时输入乘数
output Done;//乘积计算完成
output [31:0] mult_product;//乘积
reg Done;
reg [31:0] mult_product=32'd0;
reg [31:0] mult_product_buf=32'd0;
parameter INIT=2'd0;
parameter ADD=2'd1;
parameter SHIFT=2'd2;
reg[1:0] state=INIT;//初始状态为INIT
reg[31:0] mult_B_buf=32'd0; //临时变量
integer Count=0;
always@(posedge clk)
begin
case(state)
INIT://初始状态
if(start)begin
state=ADD; //start有效跳转到下一个状态ADD
mult_B_buf[15:0]=mult_B; //取被乘数
mult_B_buf[31:16]=16'd0; //临时变量的高16位置0
end
else
begin
mult_product_buf=0;
Count=0;
Done=0; //运算未完成
state=INIT; //初始状态
end
ADD://相加状态
begin
if(mult_A[Count]) //判断乘数的第Count位是否为1
mult_product_buf=mult_product_buf+mult_B_buf; //若为1则把乘数左移一位相加
state=SHIFT; //完成相加后跳到SHIFT状态继续左移
end
SHIFT://移位状态
begin
mult_B_buf={mult_B_buf[30:0],1'b0}; //左移一位,最低位补0
Count=Count+1; //计数器加一
if(Count==16) //循环16次
begin
state=INIT;
Done=1;
mult_product<=mult_product_buf;
end
else
state=ADD;
end
endcase
end
endmodule
代码文件(付费下载)
📥
付费后此处显示完整工程压缩包下载链接。
1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 16位串行乘法器 Verilog FPGA
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 16位串行乘法器 Verilog FPGA