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乘法器有个重要的加码运算。来看一下

BOOTH乘法器——看到别人解说的booth乘法器,能够作为booth,借鉴下 - 成 - 学海泛舟

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

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

BOOTH乘法器——看到别人解说的booth乘法器,能够作为booth,借鉴下 - 成 - 学海泛舟
上图的左移一位或者右移一位指的是p空间。什么是p空间呢?我们以7(0111)和2(0010)相乘为例。他们位数n均为4位。所以p空间大小为n*2+1=9。
p空间是怎样做乘法运算的呢?
BOOTH乘法器——看到别人解说的booth乘法器,能够作为booth,借鉴下 - 成 - 学海泛舟
BOOTH乘法器——看到别人解说的booth乘法器,能够作为booth,借鉴下 - 成 - 学海泛舟

 

代码例如以下:

 
  

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


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
0、 约定 …………………………………………………………………………………………… 5 1、 无符号数一位乘法 …………………………………………………………………………… 7 2、 符号数一位乘法 ……………………………………………………………………………… 8 3、 布思算法(Booth algorithm) ……………………………………………………………… 9 4、 高基(High Radix)布思算法 ……………………………………………………………… 10 5、 迭代算法 …………………………………………………………………………………… 14 6、 乘法运算的实现——迭代 ………………………………………………………………… 18 7、 乘法运算的实现——阵列 ………………………………………………………………… 20 8、 乘加运算 …………………………………………………………………………………… 24 9、 设计示例1 —— 8位、迭代 ……………………………………………………………… 26 1、 实现方案1 —— 一位、无符号 ………………………………………………… 26 2、 实现方案2 —— 一位、布思 …………………………………………………… 33 3、 实现方案3 —— 二位 …………………………………………………………… 39 10、设计示例2 —— 16位、阵列 …………………………………………………………… 45 11、设计示例3 —— 32位、 迭代、阵列 …………………………………………………… 55 1、 实现方案1 —— 乘、加一步走 ………………………………………………… 56 2、 实现方案2 —— 乘、加两步走 ………………………………………………… 67 后记 ……………………………………………………………………………………… 77 个人介绍 ………………………………………………………………………………… 79

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值