码迷,mamicode.com
首页 > 编程语言 > 详细

booth算法实现乘法器

时间:2014-12-13 21:46:44      阅读:422      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ar   os   sp   on   文件   数据   

booth算法充分的利用到了补码的重要性,使得我们在利用补码进行计算时减少了很多时序。下面的表格是我们假设2 作为乘数所进行的分析。接下来,我将用代码向大家阐述。

1、开始的时候在乘数2的‘负一位’加上一个默认0值 00100
 2、先判断[0:-1],结果是2‘b00,表示’0‘ 即没有操作 00100
 3、判断[1:0] 结果是2’b10,表示‘1’即‘-被乘数’操作 00100          
  4、判断【2:1】结果是2‘b10,表示’1‘即’+被乘数‘操作 00100
 5、判断【3:2】 结果是2’b00,表示‘0’即无操作 00100

本次试验进行两个八位数的乘法运算。

lways@(posedge clk or negedge rst_n)
if(!rst_n )
begin
i<=4‘b0;
a<=8‘b0;
b<=8‘b0;
s<=8‘b0;
p<=17‘b0;
X<=4‘b0;
isDone<=1‘b0;
end
else if(Start_sig)
case(i)
0:
begin
a<=A;
s<=(~A+1‘b1);
p<={8‘d0,B,1‘b0};
i<=i+1‘b1;
end
1:
if(X==8)
begin
X<=4‘d0;
i<=i+4‘d2;
end
else if(p[1:0]==2‘b01)
begin
p<={p[16:9]+a,p[8:0]};
i<=i+1‘b1;
end
else if(p[1:0]==2‘b10)
begin
p<={p[16:9]+s,p[8:0]};
i<=i+1‘b1;
end
else i<=i+1‘b1;
2:
begin
p<={p[16],p[16:1]};
X<=X+1‘b1;
i<=i+1‘b1;
end
3:
begin
isDone<=1‘b1;
i<=i+1‘b1;
end
4:
begin
i<=3‘b0;
isDone<=1‘b0;
end
endcase

以上是核心代码,这里我们将被乘数A放入两个寄存器中,一个存储源数据a,一个存储补码s。将乘数B放入p空间中,进行移位操作。

同时设置移位计数器X,当达到8位时停止执行。否则,我们将对数据的末两位进行判断如果p[1:0]是10,则对p[16:9]+s,低八位保持,如果p[1:0]=01,则进行p[16:9]+a,低八位保持。其余的全部保持。

在下一步中,进行移位操作,首位是什么就补什么,将数据进行右移。我们通过测试文件可以看到结果。

 

bubuko.com,布布扣

 

 

 

 

 

 

 

 

 

 

booth算法实现乘法器

标签:style   blog   http   ar   os   sp   on   文件   数据   

原文地址:http://www.cnblogs.com/54guge/p/4161880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!