简单的并行乘法
note:本文为双精度浮点的53bit尾数乘提供了一种高效的算法实现。
一个黑点表示一个bit位,一行黑点表示一个部分积。无符号数不考虑符号扩展。
可见,部分积压缩将产生多级延迟。
Booth算法
Booth算法对乘数进行编码,以其到达减少部分积深度的目的。
基2Booth算法
(修改:N=>N-1)
有无符号形成统一,但逻辑深度并未减少。
基4Booth算法
有符号数乘法时:
无符号数乘法可视为首位为0的有符号数处理,有无符号完成统一。
上式中A为偶数项。若原乘数为奇数项则需要进行偶数扩展。
所以,上图16bit无符号数相乘,乘数先进行符号扩展,高位补0,在进行偶数扩展,高位再补0,形成18bit(不含A[-1]=0),编码后产生9级逻辑深度。
此外,图左侧被乘数符号扩展被预编码后消去左侧三角区。
当部分积为正时,S=0(表中前四行);当部分积为负时S=1(表中后四行)。其中每行部分积前的s、s 和1 均为经过符号扩展预编码后的值,行尾后
缀s 则是因为乘数编码中值为负时需要将部分积取反+1。