定点乘法器
- 定点乘法器
目录
1乘法的基本规律
2第一代乘法器
3第二代乘法器
4第三代乘法器
1乘法的基本规律
首先看一下十进制数的乘法。为了方便起见,假定十进制数的各位要么为 1要么为0,例如 (1000) ×(1001) :
从上面的步骤我们可以看到:
(1)从右到左用乘数的每一位乘以被乘数,每一次乘得的中间结果比上一次的结果往左移一位。
(2)积的位数比被乘数和乘数的位数要多得多。因此,乘法必须像加法那样处理溢出问题,如果两个32 位的数相乘,积也只有32 位的时候,就会出现溢出。在上面的例子中,我们把十进制数的各位限制为0 或1。因此,每一步的乘法相当简单:
(1) 如果乘数位是 1,则简单的复制被乘数到合适的位置(ix 被乘数);
(2) 如果乘数位是 0,则在合适的位置置0
因为二进制数的各位是0 或1,所以与上面情况类似。
既然已经知道了乘法的基本规律,下一步就是设计高度优化的乘法器硬件。为了更明了乘法器的原理,在此一一列举乘法器的3 个版本的改进。我们先假定被乘数和乘数都是正数。
2第一代乘法器
初始的设计模拟我们刚才提到的乘法流程,硬件结构如图 1.14 所示。假定乘数在32 位乘数寄存器里,64 位的积寄存器初始化为0,显然每一步需要把被乘数左移一位。左移32次之后,被乘数的32 位会被移到左边,因此我们需要64 位的被乘数寄存器,初始状态为低32 位是被乘数,高32 位是0。这个寄存器每一步左移一位,和中间结果对齐,进行相加,相加的结果存在被积寄存器里。同时,乘数寄存器右移以决定是×1 还是×0。
3第二代乘法器
经过仔细观察我们可以发现,被乘数寄存器的大部分时间有一半位数是 0,W,也就是说只有一半的位数是有用的。在第一代乘法器中,被乘数左移后的位置添0,因此移位后的乘数和中间结果积相加,不影响结果,那么我们可以保持被乘数不动,将中间结果积右移,因此,被乘数寄存器只要32 位即可。图2.15 和图2.16 说明了以上改进,图2.16 是第二代乘法器的硬件结构,图2.17 是在硬件结构基础之上的工作流程。
4第三代乘法器
比较善于节省空间的人们发现,积寄存器浪费的空间正好和乘数寄存器浪费的空间一样,因此,在第三代乘法器中,将积寄存器的右半部分和乘数寄存器结合起来。由图2.18硬件结构可见,乘数寄存器消失了,初始化时将乘数放在积寄存器的右半部分,左半部分是0。图2.19 是建立在图2.18 之上的运算流程。
开放分类
贡献者