乘法操作CPU设计过程中 很重要的环节。相比加减法器等简单操作的电路,乘法电路的设计更加复杂,对面积和延时的影响也更加突出。无符号数乘法的实现,类似于手算乘法,可以通过移位和加法操作完成。有符号数的乘法操作要复杂一些。一种最容易的想法是,把有符号数的绝对值按照无符号数相乘,再用乘数和被乘数的符号位异或得到乘法结果的符号位。但这种算法实现是消耗的面积和延时十分严重,我们必须寻找面积延时消耗更少的算法。
Booth算法是一种计算有符号数乘法运算的简单算法。下面描述一下Booth算法实现的具体步骤:
把L位的乘数A和L位的被乘数B表示成补码形式,用2L位的W存储运算结果。把B填充到W的低L位,从B的最低位开始,依次根据和当前操作位低一位的值对W进行相应的操作,如下表所示,其中.
为了简单起见,用8位有符号数的乘法0x8E×0x9F演示一下Booth算法的具体过程:
最后,给出16位有符号数Booth乘法的MIPS实现代码:
(在博客中字符对齐实在是太难了,还是截成图片传上来省事儿)