简单串行乘法器与和并行乘法器

 串行乘法器:

 串行乘法非常类似于小学学的乘法原理,即,拿被乘数去乘以乘数的每一对应位的数字,并将被乘数在乘数对应位移位,然后相加:

   如 

   那么实际计算机中的计算就是如此:

      以下图为例:计算64bit的乘法

      将被乘数的64bit的数,存放在一个128bit被乘数寄存器的右半边,左半边全部为0,方便之后进行移位。

      然后取乘数寄存器最右边的位的值,对被乘数进行相乘,乘数寄存器再进行右移。

      将乘积与积寄存器的值相加然后写入积寄存器,不断循环。

      直至循环64次。

     每次对乘数右移实际是不断提取从低到高提取位的乘数,然后和左移后,也就是的值移位后的数值去相乘,就能得出对应位的乘积,最终与积寄存器的值相加然后写入积寄存器。

(小)并行乘法器:

  
  并行乘法器采用比较巧妙的办法同时将积与乘数一同移位:
  
  将乘数存储到积寄存器的右半边,并每次提取积寄存器的最右位的值,然后与被乘数相乘,将其结果加到积寄存器的左64位。然后再对积寄存器进行移位,以此类推。
   此过程中,实际是将被乘数与乘数对应位的值的乘积先放大,然后通过右移位的方式不断回归其本身的位:
  如: 以4bit乘法为例(以下均为无符号数):
                           乘数:           1111
          那么积寄存器应为:00001111
                          被乘数:         1000
           那么第一次运算后,积寄存器的结果应为:10000111
                  第二次后为:                                     11000011
                  第三次后为:                                     11100001
                  第四次后为:                                     11110000 
    一开始虽然是乘数最低位的1去乘以被乘数并且被加到了最高位,但是由于每次新加的值都会加到最高位,而旧最高位的值会右移,所以最终的结果恰好是高位的积加到了高位,低位的积加到了低位。
      此过程中,实现了乘数寄存器与积寄存器的并行计算。

带符号乘法:

要注意乘数和被乘数之间符号是否异同,如相同则去除符号位后正常计算即可,因为结果必是正数。如符号位不同,则暂时去除符号位进行乘法,然后对结果增加符号位。


快速乘法:

由于现代设计中,一个chip中可以添加的门很多,所以便可通过增加许多加法器的方法来实现快速乘法:
以64位为例,

不必进行串行计算,而是同时将乘数的64位都串接到不同的加法器上,直接对每一位进行乘法计算,一个加法器的两个输入分别是:被乘数与一个乘数位的相与结果(0则直接相与0,1则将信号改为对应位数的1,然后相与,结果是被乘数的左移),另一个输入则是当前位的上一位的相与输出,这样不断连接各个乘数位,最终算出乘法。

可以将加法器的输出直接导入到输入,循环计算,也可以通过以下形式计算:
































Comments

Popular posts from this blog

托福 TPO词汇题汇总

浮点数

缓存