乘法器--计算机组成与设计
作者:互联网
引言
源于对CPU与计算机组成的兴趣,学习了经典教材COMPUTER ORGANIZATION AND DESIGN —— THE HARDWARE/SOFTWARE INTERFACE 这本书,现记录下学习内容与心得。
本书基于MIPS指令集。MIPS指令是忽视溢出情况的,需要软件来进行检测是否积大于32位宽的存储空间。
乘法器
无符号乘法器Ver.1
硬件电路的设计应该从实际出发,计算机语言使用二进制进行运算,因此我们首先关注二进制乘法的实现,并且先考虑无符号数的计算。计算流程如下图所示:
因此仅需判断乘数当前位是0或是1即可,若为0则不改变积,若为1则将被乘数与积进行加法运算。关键点在于将乘数进行右移,将被乘数进行左移。
对应这种算法的硬件结构:
考虑到资源消耗的情况,MIPS中所有寄存器都是32位宽,因此在进行32位乘法运算时被乘数每次运算需要左移,初始化32位被乘数放在移位寄存器的右32位,左32位置0。
控制部分决定何时进行被乘数的左移和乘数的右移,以及何时写入新的积值。
考虑运算时长,如果一次移位算1个时钟周期,这样一次32位的乘法运算需要消耗上百个时钟周期,大大限制了时钟频率。
因为被乘数移位寄存器一半的空间都是0,因此设计64位是浪费了大量空间的;并且当被乘数移位后,积空间的LSB是保持一直不变的。因此需要考虑对这种结构进行优化。
无符号乘法器Ver.2
这种版本的乘法器采用32位的ALU,32位的被乘数和乘数,大大节约了计算资源。
将32位的被乘数保持不动,右移的乘数和积结合在一起形成一个64位的移位寄存器,因为乘数需要右移,经32个时钟周期后移出。积也因此拥有了64位的空间。
这里的算法同样结合笔算比较清晰:
乘数右移同时积也右移,相当于第一次计算得到红框的结果,第二次计算得到绿框的结果,第三次计算得到蓝框的结果。
或者看下图中的运算解释,被乘数0010,乘数0011。随着运算进行积空间右移移出乘数同时得到积的结果。
有符号乘法器
有符号数的乘法运算遵守两个规则
Rule1:计算时对被乘数进行符号位扩展
Rule2:乘数的符号位若为0则用0作为积,若为1则用-1来乘被乘数。
运算的例程如图所示:
总结
实际上上文仅仅提到了基本的乘法器结构,现今的发展使得乘法运算有了更多的算法与架构进行加速,有待后续学习。
标签:右移,计算机,--,32,被乘数,乘数,乘法器,运算 来源: https://www.cnblogs.com/Achilles7/p/15846150.html