「Section 4」定点数的乘除法实现

本文详细介绍了定点乘法和除法的原理,包括原码运算步骤、硬件实现的计数器和CAS阵列方法。讨论了原码一位乘法的竖式计算转换,以及原码恢复余数法和原码不恢复余数法的除法算法,特别强调了阵列乘除法器在提升运算效率中的作用。
摘要由CSDN通过智能技术生成

☙ 定点乘法运算

Σ 原码一位乘法

,其中 为符号位。

  1. 符号位单独运算:

  2. 绝对值部分的数值运算

    • 我们平常列竖式计算的方式实质上可以看成等式

      只不过平常我们列竖式的对象是十进制。在列竖式的过程中,我们用 的每一位去乘 ,但无需去关注 ,这是因为我们通过每次将部分积( )左移一位并且省去了末尾的0才实现的,左移的过程就是 ,而末尾的0对结果无影响因此可以省略,如下图所示

    • 我们如何让计算机实现上述操作呢?首先我们可以将第一个乘数 保存下来,然后我们需要让 的每一位去乘 ,乘完之后就将 右移一位,从而可以保证每次都用 的最小位去乘 。另外我们需要将部分积进行累加,累加的结果就存放在 ,然而每一次乘出来的部分积都是 位,并没有” ”,即末尾的0。在手列竖式时我们通过将部分积左移来体现” ”,同样的,我们可以将累加结果 右移然后直接加上4位部分积来实现,这只是一个相对运动。

    • 注意到上述过程中有两个值是需要右移的,其一是 ,其二是 ,因此我们可以将它们两个连在一起进行右移,接下来是 的原码一位乘法说明

      • 部分积之和与乘数是连在一起右移的
      • 部分积运算时的符号位不是最终的符号位,但放在这里可以保留溢出位,当整体右移时溢出位会到最高位(见最后一步)
      • 考虑符号位后最终结果的原码就应该是
  3. 硬件实现

    • 计数器来控制循环次数,从 减到0说明完成原码一位乘法
    • 当计数器减到0时,连接着的清零端 使D触发器归0从而 与clock的与门输出为0,此时电路不工作
    • 的最后一位 决定部分积是 还是 ,因此控制逻辑即是 与被乘数 的与门

Π 阵列乘法器

这个乘法器思想比较单纯,直接上图

这个样子就非常符合我们手列竖式的样子了,事实上也确实是这样的一个想法。上图是两个四位无符号定点整数的乘法。

  1. 将两个乘数的任意两位进行相乘得到位乘积 ,由于只是二进制个位数的乘法,因此用与门即可解决
  2. 传递进位的方式与列竖式不同,每一个全加器FA都将自己的进位传递给下一层的隔壁位,本质上跟竖式差不多
  3. 全加器共有 个,每个FA计算上面FA的输出,当前位乘积还有右上角的进位之和,因此每一列最上面的位乘积不需要FA
  4. 每一层之间存在延时,因为需要等待进位数,一层中的FA是同步的
  5. 相对原码一位乘法来说效率更高

☙ 定点除法运算

除法与乘法类似,符号位单独运算,只考虑绝对值的除法。而除法中我们时常需要比较余数添0后与除数的大小,在计算机中只能通过减法进行比较,当减法结果为负数时我们又根据是否恢复余数将除法细分为原码恢复余数法原码不恢复余数法。接下来是用两种方法计算 的说明,这里 位(不带符号位)定点小数。

α 原码恢复余数法

  1. 初始余数 ,计算

  2. ❶ 若 则商0并 重新得到 (⚠️本次余数依然为 ,只是余数为负),并将 (可以视为 的正版)乘2(左移一位)减去 得到新的余数

    ❷ 若 则商1,然后将 乘2(左移一位)减去 得到

    本质上,上述两个操作都是余数左移一位减去除数。

    ❸ 另外,若 则结束运算。

    总的来说就是 比较→上商→左移→比较

  1. 上述过程总共循环 次(最后一次无需左移),得到 个商(1个整数位+ 位小数),其中第一次循环得到的商是整数位上的,最后左移会将其移到符号位上(但会被真正的符号位替换掉),因此如果是一个大数除以一个小数将会发生溢出。

  2. 如果商的最后一位为0可知当前余数为负,因此想要得到余数还需要加上除数

  3. 实际操作过程中,余数和被除数、除数均采用双符号位:在运算时可以保留溢出的最高位

  4. 这个算法中恢复余数的次数是未知的从而导致预算时间也是未知的

  5. Example:X=0.1011,Y=-0.1101

    ⚠️注意到商 的每一位都是在最右端产生的,然后不断左移过来,而每次余数也需要左移,因此这里也是将余数和商连在一起左移的

β 原码不恢复余数法(加减交替法)

显然,后者存在的原因就是为了改进前者。事实上,前面原码恢复余数的式子已经体现了原码不恢复余数的思想,我们稍加整理可得

可见两者的形式非常的统一,不论哪种情况我们都无需恢复余数,而且只要运算2次即可得到下一个余数。由此我们便可以解决运算时间不可预测的问题了。

Σ 原码不恢复余数除法的硬件实现

  • 处放每次运算得出的余数,其中 为符号位
  • 的初始值为
  • 处则存放商的结果, 则是每次运算的上商位
  • 初始值需要为1,保证第一次做的是减法
  • 说明余数>0, 位商1;反之商0
  • 位商1下一步则需要左移减 位商0则需要左移加
  • 中存储的是 ,加 则无需对 操作( ),减 则需要对 取补码( )
  • 控制逻辑决定异或对象, 决定是否+1

Π 阵列除法器

同样基于阵列乘法器的思想,我们可以应用于除法从而加快运算速度。阵列乘法器中的核心部件是CAS可控加减法单元。

CAS有8个引脚,4个输入端4个输出端。P控制加减操作, 时CAS执行加法,否则执行减法(依旧用异或与 配合进行取反+1,注意到最低位的进位端是与 相连的); 为进位/借位输入/输出信号;斜向输入和输出的 为除数,斜向输出连到下一个CAS单元,相当于手动除法中的右移;垂直输入的是被除数 ,垂直输出余数

代入全加器的逻辑表达式,CAS单元的输出和输入之间的关系可以表示为

下图为字长为3的阵列除法器基本结构,其中被除数 (双字长),除数 ,商 ,余数

  • 阵列除法器采用的是原码不恢复除法的思想
  • 初始情况 保证第一次运算做减法,另外要求 ,否则运算结果将会溢出
  • 可以看到 连接到最低位的进位输入端 ,从而当 时对除数进行取反+1生成补码,随后完成 运算
  • 斜向传递的是除数 的每一位,因此每一层均不会改变
  • 原码不恢复余数除法的运算过程采用的是双符号位,双符号位中的第一位是真正的符号位,而第二位则可以视为溢出保留位,即实际运算中的最高有效位(本质上来说双符号数只是多了一位的单符号数)。但在阵列乘法器中仅有双符号位的第二位(每一层最左侧的CAS),这是因为余数为正时(符号位0)需要 (符号位1),余数为负时(符号位1)需要 (符号位0),即在不考虑第二位符号位进位时符号位始终为1,因此我们只需关注每一层最左侧CAS的进位输出端即可。
  • 当最左侧CAS的进位输出端为0时,符号位为1,说明余数为负,商0并在下一次运算中移位 ;当进位输出端为1时,说明余数为正,商1并在下一次运算中移位 。从中可以看出最左侧CAS的进位输出端不仅等于每一层的商值,同时决定了下一层的加减操作。因此将每一层最左侧CAS的进位输出端连至下一层的加减控制端 ,另外通过CAS排布的右移来完成余数的左移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值