☙ 定点乘法运算
Σ 原码一位乘法
,其中 为符号位。
符号位单独运算:
绝对值部分的数值运算
我们平常列竖式计算的方式实质上可以看成等式
只不过平常我们列竖式的对象是十进制。在列竖式的过程中,我们用 的每一位去乘 ,但无需去关注 ,这是因为我们通过每次将部分积( )左移一位并且省去了末尾的0才实现的,左移的过程就是 ,而末尾的0对结果无影响因此可以省略,如下图所示
我们如何让计算机实现上述操作呢?首先我们可以将第一个乘数 保存下来,然后我们需要让 的每一位去乘 ,乘完之后就将 右移一位,从而可以保证每次都用 的最小位去乘 。另外我们需要将部分积进行累加,累加的结果就存放在 ,然而每一次乘出来的部分积都是 位,并没有” ”,即末尾的0。在手列竖式时我们通过将部分积左移来体现” ”,同样的,我们可以将累加结果 右移然后直接加上4位部分积来实现,这只是一个相对运动。
注意到上述过程中有两个值是需要右移的,其一是 ,其二是 ,因此我们可以将它们两个连在一起进行右移,接下来是 的原码一位乘法说明
- 部分积之和与乘数是连在一起右移的
- 部分积运算时的符号位不是最终的符号位,但放在这里可以保留溢出位,当整体右移时溢出位会到最高位(见最后一步)
- 考虑符号位后最终结果的原码就应该是
硬件实现
- 计数器来控制循环次数,从 减到0说明完成原码一位乘法
- 当计数器减到0时,连接着的清零端
使D触发器归0从而
-
Π 阵列乘法器
- 将两个乘数的任意两位进行相乘得到位乘积
- 传递进位的方式与列竖式不同,每一个全加器FA都将自己的进位传递给下一层的隔壁位,本质上跟竖式差不多
- 全加器共有
- 每一层之间存在延时,因为需要等待进位数,一层中的FA是同步的
- 相对原码一位乘法来说效率更高
☙ 定点除法运算
α 原码恢复余数法
初始余数
补 ❶ 若
❷ 若
本质上,上述两个操作都是余数左移一位减去除数。
❸ 另外,若
总的来说就是 比较→上商→左移→比较
上述过程总共循环
如果商的最后一位为0可知当前余数为负,因此想要得到余数还需要加上除数
实际操作过程中,余数和被除数、除数均采用双符号位:在运算时可以保留溢出的最高位
这个算法中恢复余数的次数是未知的从而导致预算时间也是未知的
Example:X=0.1011,Y=-0.1101
⚠️注意到商
β 原码不恢复余数法(加减交替法)
Σ 原码不恢复余数除法的硬件实现
-
-
-
-
-
-
-
- 控制逻辑决定异或对象,
Π 阵列除法器
- 阵列除法器采用的是原码不恢复除法的思想
- 初始情况
- 可以看到
- 斜向传递的是除数
- 原码不恢复余数除法的运算过程采用的是双符号位,双符号位中的第一位是真正的符号位,而第二位则可以视为溢出保留位,即实际运算中的最高有效位(本质上来说双符号数只是多了一位的单符号数)。但在阵列乘法器中仅有双符号位的第二位(每一层最左侧的CAS),这是因为余数为正时(符号位0)需要
- 当最左侧CAS的进位输出端为0时,符号位为1,说明余数为负,商0并在下一次运算中移位