简单串行乘法器与和并行乘法器
串行乘法器:
串行乘法非常类似于小学学的乘法原理,即,拿被乘数去乘以乘数的每一对应位的数字,并将被乘数在乘数对应位移位,然后相加:
如
那么实际计算机中的计算就是如此:以下图为例:计算64bit的乘法
将被乘数的64bit的数,存放在一个128bit被乘数寄存器的右半边,左半边全部为0,方便之后进行移位。
然后取乘数寄存器最右边的位的值,对被乘数进行相乘,乘数寄存器再进行右移。
将乘积与积寄存器的值相加然后写入积寄存器,不断循环。
直至循环64次。
每次对乘数右移实际是不断提取从低到高提取位的乘数,然后和左移后,也就是的值移位后的数值去相乘,就能得出对应位的乘积,最终与积寄存器的值相加然后写入积寄存器。
(小)并行乘法器:
并行乘法器采用比较巧妙的办法同时将积与乘数一同移位:
将乘数存储到积寄存器的右半边,并每次提取积寄存器的最右位的值,然后与被乘数相乘,将其结果加到积寄存器的左64位。然后再对积寄存器进行移位,以此类推。
此过程中,实际是将被乘数与乘数对应位的值的乘积先放大,然后通过右移位的方式不断回归其本身的位:
如: 以4bit乘法为例(以下均为无符号数):
乘数: 1111
那么积寄存器应为:00001111
被乘数: 1000
那么第一次运算后,积寄存器的结果应为:10000111
第二次后为: 11000011
第三次后为: 11100001
第四次后为: 11110000
一开始虽然是乘数最低位的1去乘以被乘数并且被加到了最高位,但是由于每次新加的值都会加到最高位,而旧最高位的值会右移,所以最终的结果恰好是高位的积加到了高位,低位的积加到了低位。
此过程中,实现了乘数寄存器与积寄存器的并行计算。
带符号乘法:
要注意乘数和被乘数之间符号是否异同,如相同则去除符号位后正常计算即可,因为结果必是正数。如符号位不同,则暂时去除符号位进行乘法,然后对结果增加符号位。
快速乘法:
由于现代设计中,一个chip中可以添加的门很多,所以便可通过增加许多加法器的方法来实现快速乘法:
以64位为例,
不必进行串行计算,而是同时将乘数的64位都串接到不同的加法器上,直接对每一位进行乘法计算,一个加法器的两个输入分别是:被乘数与一个乘数位的相与结果(0则直接相与0,1则将信号改为对应位数的1,然后相与,结果是被乘数的左移),另一个输入则是当前位的上一位的相与输出,这样不断连接各个乘数位,最终算出乘法。
可以将加法器的输出直接导入到输入,循环计算,也可以通过以下形式计算:
Comments
Post a Comment