乘法器的输入默认为负数为补码形式,正数为原码形式
举例说明
被乘数为32’b01010101010101010101010101010101,十进制为1431655765
乘数为负数为32’b10101010101010101010111111111111,十进制为-1431654401
准备好2*n+1位的寄存器p,此处n为32,以及两个32位的寄存器
将p初始化为p{32’b0,乘数,1’b0}
一个32位的寄存器x放被乘数本身
一个32位的寄存器y放被乘数的取反加一
然后开始进行循环判断
p[1:0] | 对p执行的操作 |
---|---|
00 | 右移一位 |
01 | 高32位加上x,右移一位 |
10 | 高32位加上y,右移一位 |
11 | 右移一位 |
右移一位后,最高位,补和原来的最高位相同的值。
设计中体现的将右移一位和加法分开,在每个小循环中执行判断加法,然后执行右移一位的操作,不断执行这个小循环32次,最后完成计算,所有时间比较长。
在这里插入代码片
module booth(
input wire clk,
input wire rstn,
input wire start,
input wire [31:0] data_a,
input wire [31:0] data_b,
output wire [63:0] result_o,
output wire done,
//output wire [31:0] int_o,
output wire finish
);
reg [4:0] i; //
reg [5:0] dint; //
reg [31: