浮点乘法分为两个部分,部分积,部分积累加和乘加,这一节主要讲部分积的运算以及部分积的累加。
要做好乘法器非常重要的一点是理解 浮点数相乘的推导公式。胡伟武的体系结构这本书上讲的比较详细,建议阅读。这里我就不推导了。
Booth算法与乘法器的一般结构 乘法器工作的基本原理是首先生成部分积。再将这些部分积相加得到乘积。在眼下的乘法器设计中,基4Booth算法是部分积生成过程中普遍採用的算法。
对于N位有符号数乘法A×B来说,常规的乘法运算会产生N个部分积。假设对乘数B进行基4Booth编码。每次需考虑3位:相邻高位、本位和相邻低位,编码后产生部分积的个数能够降低到[(N+1)/2]??
([X]取值为不大于X的整数),确定运算量0、±1A、±2A。
对于2A的实现。仅仅须要将A左移一位。因此,对于符号数乘法而言。基4 Booth算法既方便又快捷。而对于无符号数来说,仅仅需对其高位作0扩展。而其它处理方法同样。尽管扩展后可能导致部分积的个数比有符号数乘法多1,可是这样的算法非常好地保证了硬件上的一致性。有利于实现。
可以说BOOTH 算法是计算乘法最快的一种方法,但是你想真正做的好,还是有点难度。真正在设计CPU时,单精度32位和双精度64位用的是一条通路,怎么把数据通路复用,是你真正要考虑的。另外就是部分积的符号位需要扩展。算出部分积分以后,怎么对部分积进行压缩呢,现在主要用的就是华莱士树。压缩器主要使用2种,3-2压缩和4-2压缩。3-2压缩就是全加器,产生进位和和,4-2压缩实际是5-3压缩,上一级的进位输出作为下一级的进位输入。
浮点乘法的算法和步骤是比较成熟的,真正的难点就是你怎么复用通路,怎么压缩部分积,和intel AMD 就这个模块而言的CPU差距并不大。
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。



