32x32Booth乘法器

32x32Booth乘法器

本设计是一个简单的基于Booth算法的32位有符号数乘法器,Booth算法的原理是先判断P[1:0],然后操作P空间,最后P空间移位,根据P空间的最高位来给移位后的P选择补1 or 补0。
booth乘法器是一种位操作乘法器,与传统乘法器不同的是直接操作位。booth有一个重要的加码运算。

p[0]p[-1]加码结果
00无操作,右移一位
01+被乘数,右移一位
10-被乘数,右移一位
11无操作,右移一位
module booth(
    input [31:0]A,
    input [31:0]B,
    input clk,
    input rst,
    input sig,
    output [63:0]Booth,
    output done,
    output [5:0]X

    );
reg [5:0]i;
reg [64:0]p;
reg [31:0]a;
reg [31:0]s;
reg [5:0]x;
reg isdone;

always@(posedge clk or negedge rst)
  if(!rst)
   begin
     i<=6'b0;
     p<=65'b0;
     a<=32'b0;
     s<=32'b0;
     x<=0;
     isdone<=0;
   end
  else if(sig)
   begin
    case(i)
      0:
       begin
         a<=A;
         s<=~A+1'b1;
         p<={32'b0,B,1'b0};
         i<=i+1;
         isdone<=0;
       end
      1:
       begin
         if(x==32)
            begin
             x<=0;
             i<=i+2;
            end
         else if(p[1:0]==2'b01)
            begin
             p<={p[64:33]+a,p[32:0]};
             i<=i+1;
            end
         else if(p[1:0]==2'b01)
            begin
             p<={p[64:33]+s,p[32:0]};
             i<=i+1;
            end
         else
            begin
             p<=p;
             i<=i+1;
            end
      2:
      begin
        p<={p[64],p[64:1]};
        x<=x+1;
        i<=i-1;
   
      3:
       begin isdone<=1;i<=i+1;end
      4:
       begin isdone<=0;i<=0;end
     endcase
   end
assign done=isdone;
assign Booth=p[64:1];
assign X=x;
endmodule   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值