前言:

      二进制13乘以9应该怎么算呢?

乘法计算器Python 乘法计算器教具说明_逻辑电路

一、顺序乘法:

      上图中可以看到,二进制计算乘法比较简单,由于每一位上只有0和1,乘法计算其实就简化成了位移和加法,乘数每一位和被乘数相乘,结果不是完全复制就是0,只不过对应着不同的位移。

      为了节约晶体管,不需把四个位移运算的结果都保存,只需从低位开始将被乘数逐次左移一位,乘数逐次右移一位,不断将计算结果加在上一步的结果上,直到乘数不能再右移为止。

      这种方式虽然节约了电路但由于下一步加法依赖上一步加法计算结果,下一步位移也依赖上一步位移结果,因此只能顺序进行,结果就是运算比较慢。32位数的计算就比4位数运算多八倍执行时间。

二、并行加速方法:

      上面这种计算方式,多少位数字计算就需要将多少个位移结果相加,而这些加法是可以并行计算再汇总的,只不过需要更多ALU并联和寄存器。

乘法计算器Python 乘法计算器教具说明_乘法计算器Python_02

三、电路并行乘法:

      以上顺序加法的弊端是后一个加法器必须依赖前一个加法器的计算结果,由于逻辑电路存在门延迟,假设一个门延迟为T,则一次全加器运算门延迟为3T,四位运算就是9T,64位则需要3*63=189T延迟。除此之外,由于CPU时钟频率的影响保存和读取中间结果也需要多个CPU时钟周期,耗时进一步急剧增加。

      解决这个问题的关键在于,我们知道加法中只要计算的两个数字是确定的,高位计算进位的结果也是固定的,因此我们只需将进位部分的电路完全展开即可,如此高位的进位和计算结果可以和低位的计算结果同时获得。

乘法计算器Python 乘法计算器教具说明_加法器_03