☙ 定点乘法运算

Σ 原码一位乘法

原 原 ,其中 为符号位。

  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排布的右移来完成余数的左移。

「Section 4」定点数的乘除法实现相关推荐

  1. 「自控原理」3.1 时域分析法、一阶系统时域分析

    本节介绍时域分析法.典型输入信号.常用性能指标 本节介绍一阶系统的时间响应和动态性能指标 文章目录 概述 时域法 时间响应 四个常用的典型输入信号 五个常用的性能指标 一阶系统的时间响应及动态性能 单 ...

  2. 第二弹,坐地铁就能学会的3种「非常有趣」的 Python 玩法

    作者 | 黄伟呢 来源 | 数据分析与统计学之美 本文说明 为什么要学习python?是因为不仅很多工作需要用到python,同时我们可以利用python做很多好玩儿的事儿. 比如说下面的3种用法: ...

  3. 回溯法遵循深度优先吗_闲来刷下「回溯算法」

    定义 ❝ 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路径.回溯法是一种选优搜索法,按选优条件向 ...

  4. 「C#」异步编程玩法笔记-WinForm中的常见问题

    目录 1.异步更新界面 1.1.问题 1.2.解决问题 1.3.AsyncOperationManager和AsyncOperation 1.4.Invoke.BeginInvoke.EndInvok ...

  5. 「六一端午」双节|营销人必看的新玩法

    六月伊始,紧密相连的儿童节.端午节即将掀起夏日里的新一波消费浪潮,品牌商家也即将迎来借势营销的发力节点. 一个是童趣满满的「儿童节」,亲子.母婴.文娱等行业能天然施展的营销舞台.其实,儿童节早已拥有了 ...

  6. 「天猫代运营」精准标签玩法,引爆新品手淘搜索流量

    「天猫代运营」精准标签玩法,引爆新品手淘搜索流量 首先不管怎么样,做电商都是要讲事实,看数据的我们先看下以下几个案例,以下几个案例都是近期在操作的新品,并且都刚刚经历第一波流量爆发期 案例一:06-1 ...

  7. 拍乐云首发音视频「分组讨论」开放能力,开启线上群聊互动新玩法

    苹果CEO库克近日宣布,因疫情反复,苹果将无限期推迟员工重返办公室计划.疫情常态化之下,在线工作.在线学习.在线娱乐也都变得常态化,我们似乎开始接受这种"All-in在线"的模式, ...

  8. 蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰

    自iOS 12.1.4 系统更新之后,苹果就增加了「快捷指令」这一功能.熟练使用这个功能的小伙伴,可以让平时的生活工作效率大大提升,将一系列复杂的流程变得简单化:对于不熟悉这个功能的小伙伴而言,它只藏 ...

  9. AI扮演Linux虚拟机,能管理文件编程开浏览器,还能跟自己「套娃」聊天 | ChatGPT新玩法...

    詹士 发自 凹非寺 量子位 | 公众号 QbitAI ChatGPT能运行docker了? 还可以自己连接到OpenAI网站,查查自己? 被玩出花的OpenAI聊天AI ChatGPT,又被整出新活了 ...

最新文章

  1. c语言和其他高级语言一样也要经过编译,C语言和其他高级语言的最大的区别是什么?...
  2. MongoDB学习笔记~管道中的分组实现group+distinct
  3. 开源网站统计程序 oracle,利用百夫长统计程序源码免费搭建独立网站统计软件工具...
  4. 电脑下载的M4A格式文件怎么转换为MP3格式
  5. 进程控制块包含的信息
  6. WebSocket科普
  7. 阿里云数据库产品专家胡航丽:数据库自动驾驶平台DAS重磅助力数据库领域智能未来...
  8. 【Level 09】U1 The way I see it L3 At your service
  9. 一周第一次课(10月16日)安装linux
  10. CE教程步骤8操作指南
  11. coreldraw怎么打印荣誉证书_使用Word 2010制作并打印荣誉证书的方法
  12. crm系统是什么很棒ec实力_哪个CRM系统好
  13. el-input 正则,非负数且只有一个小数点
  14. 阿里云服务器 云对象存储OOS(一) ---入门级操作
  15. 第二篇 第三章防火防烟分区检查(一)
  16. Java多线程复习整理(二)
  17. 怎样删除Github中的项目
  18. Opus:IETF低延迟音频编解码器:API和操作手册
  19. url去重的几种方式
  20. 电位器和编码器的区别

热门文章

  1. 如何清理占用计算机内存,电脑内存不足怎么清理
  2. Ubuntu14联合安装opencv与opencv_contrib踩过的坑
  3. 百度资深架构师总结微服务化的不同阶段 Kubernetes 的不同玩法
  4. 乖离水机器人攻略_乖离性百万亚瑟王幽蓝机器人卡牌推荐 超弩幽蓝机器人攻略...
  5. EXCEL-分组排名(中美)
  6. html5 java 实现微信公众号自动分享功能(自定义文案和图标)
  7. Mac苹果电脑如何一键清理磁盘内存空间?
  8. 斯诺克台球比赛规则 (Snooker)
  9. NNDL 实验六 卷积神经网络(5)使用预训练resnet18实现CIFAR-10分类
  10. 养成记账好习惯,分享我的记账经验