计组-booth乘法-谈原理和实现

在这里插入图片描述

那么如何实现这个变换?

X × Y X \times Y X×Y,皆为 n bit

如果Y是无符号数,可作如下展开;如果Y是有符号数,亦可,因为其即使再参与运算,最后会由于取模而表现负数功能(可理解为对负数使用了新的具有可加性的编码方式,而乘除正是加操作的累计)

Y = 2 n − 1 y n − 1 + 2 n − 2 y n − 2 + 2 n − 3 y n − 3 + . . . + 2 2 y 2 + 2 1 y 1 + 2 0 y 0 Y=2^{n-1}y_{n-1}+2^{n-2}y_{n-2}+2^{n-3}y_{n-3}+...+2^{2}y_{2}+2^{1}y_{1}+2^{0}y_{0} Y=2n1yn1+2n2yn2+2n3yn3+...+22y2+21y1+20y0

2 Y = 2 n y n − 1 + 2 n − 1 y n − 2 + 2 n − 2 y n − 3 + . . . + 2 3 y 2 + 2 2 y 1 + 2 1 y 0 2Y=2^{n}y_{n-1}+2^{n-1}y_{n-2}+2^{n-2}y_{n-3}+...+2^{3}y_{2}+2^{2}y_{1}+2^{1}y_{0} 2Y=2nyn1+2n1yn2+2n2yn3+...+23y2+22y1+21y0

Y = 2 Y − Y = 2 n ( y n − 1 − 0 ) + 2 n − 1 ( y n − 2 − y n − 1 ) + 2 n − 2 ( y n − 3 − y n − 2 ) + . . . + 2 3 ( y 2 − y 3 ) + 2 2 ( y 1 − y 2 ) + 2 1 ( y 0 − 0 ) + 2 0 ( 0 − y 0 ) Y=2Y-Y=2^{n}(y_{n-1}-0)+ 2^{n-1}(y_{n-2}-y_{n-1})+ 2^{n-2}(y_{n-3}-y_{n-2})+...+2^{3}(y_{2}-y_{3})+ 2^{2}(y_{1}-y_{2})+ 2^{1}(y_{0}-0) + 2^{0}(0-y_{0}) Y=2YY=2n(yn10)+2n1(yn2yn1)+2n2(yn3yn2)+...+23(y2y3)+22(y1y2)+21(y00)+20(0y0)

原始乘法思路:从低位到高位遍历处理乘数,1则加被乘数,部分积右移,右移出的位不再参与之后运算;0则不加,直接右移。

booth算法套用这种定位加再右移的框架,但重构了乘数Y。也是对乘数从低位到高位遍历。从低位后虚补一位0开始,到最高位结束(实际上到次高位即可结束)。每次遍历。当前位与相邻高位的差值作为该权下的bit值,为1则加被乘数,为0则不加,为-1则加被乘数的变形补码(减被乘数,可用乘法分配率拆分乘数理解),之后则右移,更新位权,完成一轮操作。

为什么Y的最低位的后一位要虚补一位0?

由错位相减式得知要如此;虚补0捕捉最低位的纯1子串;补0原式值不变。

遍历Y的最高位的前一位一定要补0吗?是否遍历到乘数Y的次高位即可?

由错位相减后的Y知, 2 n ( y n − 1 − 0 ) 2^{n}(y_{n-1}-0) 2n(yn10)象征bit位中第n+1位的权,处在溢出范围,故无论乘数该权值为何皆算溢出而无影响。另外,事实上,由于此处0是把Y看做无符号数对最高位的0拓展(正常思维),也可以这样理解,如果把Y看做有符号数对最高位作符号拓展,则拓展符号位,始终和原符号位 y n − 1 y_{n-1} yn1保持一致,故差值一定是0,不影响乘法。

由于移位是为了下一次加法能对准位权,而第n+1次遍历不加,故最后一次(第n次)遍历完后不需右移部分积。但是,完成 X × Y X \times Y X×Y,结果为n位高位部分积(每次遍历时处理的部分积),n位低位部分积(接受高位右移溢出的bit位,同步作右移),为了使低位部分积“完全入座”,接收n个有效bit值(第n次遍历做完可能的加法后,高位部分积共有n位有效bit值,低位部位积有n-1为有效bit值和最低位的1位空值),还需对整体进行一次算术右移(可以发现一个特点:高位部分积的最高两位会是相等的)。故:总共做n次遍历,若干次加法,n次移位。

顺便说一句,高位部分积应采取n+1位的双符号位形式,防止加法溢出。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值