一、前言
常用乘法器设计,一般一个周期只能累加一次,所以出结果需要时间乘法的位宽,如果需要一个周期出结果就需要流水线操作。
二、原理
乘法每次执行之后变量保存,便于流线操作。
三、verilog code
单次累加设计
module mult_cell
#(parameter N=4,
parameter M=4)
(
input clk,
input rstn,
input en,
input [M+N-1:0] mult1, //被乘数
input [M-1:0] mult2, //乘数
input [M+N-1:0] mult1_acci, //上次累加结果
output reg [M+N-1:0] mult1_o, //被乘数移位后保存值
output reg [M-1:0] mult2_shift, //乘数移位后保存值
output reg [N+M-1:0] mult1_acco, //当前累加结果
output reg rdy );
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
rdy <= 'b0 ;