码迷,mamicode.com
首页 > 其他好文 > 详细

booth乘法器原理

时间:2014-10-18 22:26:33      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:booth

微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理关键部件乘法器完成一次操作的周期基本上决定了微处理器的主频。乘法器的速度和面积优化对于整个CPU的性能来说是非常重要的。为了加快乘法器的执行速度,减少乘法器的面积,有必要对乘法器的算法、结构及电路的具体实现做深入的研究。

 Booth算法与乘法器的一般结构
乘法器工作的基本原理是首先生成部分积,再将这些部分积相加得到乘积。在目前的乘法器设计中,基4Booth算法是部分积生成过程中普遍采用的算法。对于N位有符号数乘法A×B来说,常规的乘法运算会产生N个部分积。如果对乘数B进行基4Booth编码,每次需考虑3位:相邻高位、本位和相邻低位,编码后产生部分积的个数可以减少到[(N+1)/2]?? ([X]取值为不大于X的整数),确定运算量0、±1A、±2A。对于2A的实现,只需要将A左移一位。因此,对于符号数乘法而言,基4 Booth算法既方便又快捷。而对于无符号数来说,只需对其高位作0扩展,而其他处理方法相同。虽然扩展后可能导致部分积的个数比有符号数乘法多1,但是这种算法很好地保证了硬件上的一致性,有利于实现。对于32位乘法来说,结合指令集的设计,通常情况下需要相加的部分积不超过18个

booth乘法器是一种位操作乘法器,与传统乘法器不同的是直接操作位。传统乘法器依靠加法,不断累加,在这里就不说了。

------------------------------------------------------------------------------------------------------------------------------------------------------------

booth乘法器有个重要的加码运算。来看一下

bubuko.com,布布扣

 B[-1]就是B的零位右边的位,是假想的位。如0010  0  B[-1]就是0。

  做booth乘法器又引入了p空间。

bubuko.com,布布扣
上图的左移一位或者右移一位指的是p空间。什么是p空间呢?我们以7(0111)和2(0010)相乘为例。他们位数n均为4位。所以p空间大小为n*2+1=9。
p空间是如何做乘法运算的呢?
bubuko.com,布布扣
bubuko.com,布布扣

 

代码如下:

module product ( input CLK, input RSTn,

input Start_Sig, input [7:0]A, input [7:0]B,

output Done_Sig, output [15:0]Product,

output [7:0]SQ_a, output [7:0]SQ_s, output [16:0]SQ_p );

/*************************/

reg [3:0]i; reg [7:0]a; // a的寄存器 reg [7:0]s; // a的补码加1 a非 reg [16:0]p; // p空间存储器 reg [3:0]X;   //操作次数 reg isDone;

always @ ( posedge CLK or negedge RSTn )  if( !RSTn )   begin        i <= 4‘d0;    a <= 8‘d0;    s <= 8‘d0;    p <= 17‘d0;    X <= 4‘d0;    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 isDone <= 1‘b0; i <= 4‘d0; end       endcase

/*************************/

assign Done_Sig = isDone; assign Product = p[16:1];

/*************************/

assign SQ_a = a; assign SQ_s = s; assign SQ_p = p; /**************************/ endmodule


booth乘法器原理

标签:booth

原文地址:http://blog.csdn.net/u013467442/article/details/40217749

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