【计算机组成 课程笔记】4.2 除法器的硬件实现

news2024/11/29 12:34:39

 课程链接:

计算机组成_北京大学_中国大学MOOC(慕课)

4 - 5 - 405-除法的运算过程(09-'43--)_哔哩哔哩_bilibili

在加减乘除这样的基本算数运算中,除法是最为复杂的,因此我们想要实现硬件的除法器,还是从最简单的情况开始说起。

1. 除法的运算过程

回想一下手算除法的过程。这里是两个由0和1组成的被除数和除数。首先将除数和被除数从高位开始对齐,将对齐的部分进行减法,当我们发现减完的结果是一个正数,也就是够减的时候,我们就在商的对应位标一个1,然后把减完的差放在下面。再从被除数后面的位中拿一位下来(10),继续判断是否够减。我们发现在这个例子中它不够减,于是我们在商的对应位标一个0。再多拿一位也还不够(101),所以再标1个0。然后再拿一位下来(1010),够减了,于是标1,然后把减完的差放在下面,减完的结果已经没有多余的被除数位可以拿下来了,所以这个数就是余数。

我们仔细观察上面的运算过程,其实中间忽略了一些步骤,完整的运算相当于是把除数每次右移1位,与被除数的对应位数进行比较,如果被除数大,则商为1,如果除数大,则商为0,被除数减掉除数以后剩下的就是当前轮次的余数。而商是从最高位开始计算,直到最低位,这也可以看成是一个左移的操作。

好,我们整理一个除法器的工作流程。以32位除法器为例:

2. 除法器的硬件实现

为了简便起见,我们以4位的除法器来进行说明。一个4位的除法器,需要1个8位的余数寄存器,需要1个8位的除数寄存器,且带右移功能,还需要一个4位的商寄存器,且带左移的功能。最后需要1个8位的ALU,支持加法和减法的运算。这里需要支持加法运算,主要是因为2b中有一个回退的操作。最后还需要1个控制逻辑控制这几个寄存器和ALU的工作。

现在我们就有了一个完整的除法器,我们就来看一下这个除法器是如何工作的。

0. 初始化

初始化各个寄存器,将8位的被除数放入余数寄存器;将4位的除数放入除数寄存器的高4位,并将低4位补上0;将4位的商寄存器置为0。

1. 减法运算

初始化后正式进入计算的过程。第一步是进行减法运算,将当前余数寄存器的内容减去除数寄存器的内容,得到结果是11100111。这时控制逻辑还会向余数寄存器发出写入的信号,在下一个时钟上升沿到来的时候,11100111就会写入余数寄存器。

2. 检查余数

现在余数寄存器已经更新了,第二步就是检查这个余数寄存器,如果大于等于0,就执行2a分支,否则执行2b分支。对于当前这个例子,我们发现余数寄存器的最高位是1,表示小于0,所以执行的是2b分支。

2b. 当余数<0

因为余数<0,意味着我们不应该进行刚才那次减法,所以我们这里就要回退刚才第1步的操作,即执行加法运算。控制逻辑会给ALU一个加法信号,让它进行计算,同时也会给余数寄存器一个写入的信号,在下一个时钟上升沿到来的时候,00000111就又会写入余数寄存器,这样就完成了回退的工作。

另外,我们还需要做的是将商寄存器左移1位,并将新的最右位设为0。这样这一步的内容就完成了。

2a. 当余数>=0

当余数>=0时,我们不需要进行回退的操作。举例,在第5轮的时候,第2步的运算结果得到的余数寄存器中的值时00000001,由于最高位是0,说明余数是1个正数。

那么此时要做的事情就是将商寄存器左移1位,新的最右位置为1。

3. 对除数进行右移

为了下一步运算做准备,我们现在要把除数寄存器右移1位。

4. 判断是否进行下一轮

因为这是1个4位的除法器,所以我们需要检查的是当前是不是第5轮循环。那经过检查,如果现在还不是第5轮,所以我们还需要进行下一轮计算,即重复上述1~4步的过程。

如果已经是最后1轮,则结束。结果如下图所示。所以对于这个例子来说00000111 / 0010 = 7 / 2 = 3,余1,与下面寄存器中的结果相符。

3. 除法器的优化1

这是我们已经有了的一个除法器的实现,我们称它为第1版。

我们首先来考虑面积方面的优化,目前有的问题是,除数寄存器实际只使用了其中的一半,商寄存器初始时是空的,从右到左逐位填满,余数寄存器初始时是满的,有实际意义的位从左到右逐渐减少。

从这些问题出发,我们可以进行如下的优化:

4. 除法器的优化2

除了面积优化以后,从乘法器那边得到启发,是不是还能做一些性能方面的优化呢?

但是乘法的特点是每个部分积是独立的,可以并行计算各个部分的积。而对于除法来说,需要检查上一轮做完以后的余数,并且如果余数<0,还需要进行回退,这样的话它每一轮的运算就不是相互独立的了,因此无法进行并行。所以在这个除法器的大框架下,很难进行进一步的性能优化。

当然,正是由于除法的优化非常困难,也引来了很多人对除法运算进行深入的研究,如果对此有兴趣,可以进一步深入地探索。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/967551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

yolov2相较于yolov1的改进

目录 前言 BN层取代了Dropout 使用了高分辨率分类器 K-means选定先验框的尺寸 网络结构—darknet19 细粒度的特征 前言 yolov2是在yolov1的基础上进行改进的&#xff0c;主要解决了yolov1定位不准确以及检测重叠的物体极差的情况&#xff0c;总的来说&#xff0c;它有以下…

使用pip命令安装python第三方库有效方法合集

本文摘要&#xff1a;本文提出了4种实用的pip命令安装python第三方库有效方法合集 &#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智…

【代码技巧】深度学习参数管理方案(1)

方法概述 利用argparse工具包进行参数管理 创建BaseOptions类进行基础参数的管理&#xff0c;在建立TrainOptions和TestOpetions继承BaseOptions的基础参数&#xff0c;然后可以再添train或者test阶段的新的参数。 文件结构 创建三个文件如图&#xff0c;分别管理BaseOption…

机器学习之 Jupyter Notebook 使用

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

msvcr120.dll文件丢失的解决方法,四种快速解决发方法分享

你是否曾经在使用电脑时遭遇过 msvcr120.dll 文件丢失的困扰&#xff1f;如果你对此感到茫然无措&#xff0c;那么请跟随我的脚步&#xff0c;让我们一起探索这个问题的根源。当我一如既往地打开电脑&#xff0c;准备开始一天的工作时&#xff0c;突然发现许多应用程序无法正常…

数学建模:回归分析

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;回归分析 文章目录 数学建模&#xff1a;回归分析回归分析多元线性回归案例 多项式回归一元多项式回归多元二项式回归 非线性回归逐步回归 回归分析 多元线性回归 案例 首先进行回归分…

用C语言,编写一个这样的程序,满足五日均线,十日均线,二十日均线,六十天六日均线调头向上的选股代码

用C语言&#xff0c;编写一个这样的程序&#xff0c;满足五日均线&#xff0c;十日均线&#xff0c;二十日均线&#xff0c;六十天六日均线调头向上的选股代码&#xff0c;我来做个案例。 #include <stdio.h> #include <stdlib.h> #define MAX_ROWS 1000 // 假设数…

【小吉送书—第一期】Kali Linux高级渗透测试

文章目录 &#x1f354;前言&#x1f6f8;读者对象&#x1f388;本书资源&#x1f384;彩蛋 &#x1f354;前言 对于企业网络安全建设工作的质量保障&#xff0c;业界普遍遵循PDCA&#xff08;计划&#xff08;Plan&#xff09;、实施&#xff08;Do&#xff09;、检查&#x…

【Kubernetes理论篇】2023年最新CKA考题+解析

文章目录 第一题&#xff1a;RBAC授权访问控制第二题&#xff1a;Node节点维护第三题&#xff1a;K8S集群版本升级第四题&#xff1a;ETCD数据库备份恢复第五题&#xff1a;NetworkPolicy网络策略第六题&#xff1a;Service四层负载第七题&#xff1a;Ingress七层负载第八题&am…

day-07 I/O复用(select)

一.I/O复用 &#xff08;一&#xff09;基于I/O复用的服务器端 1.多进程服务器 每次服务都需要创建一个进程&#xff0c;需要大量的运算和内存空间 2.复用 只需创建一个进程。 3.复用技术在服务器端的应用 &#xff08;二&#xff09;select函数实现服务器端 &#xff08;…

JVM学习(四)--内存问题分析思路

linux获取jvm当前dump文件 命令行为&#xff1a;jmap -dump:file[文件名] [pid] 然后等待生成dump文件&#xff0c;生成的dump文件就在当前目录下。如下图&#xff1a; 然后就可以下载到本地&#xff0c;用本地jdk里自带的jvisualvm来解析文件。 在用本地的jvisualvm解析之前…

uniapp 微信小程序 获取用户头像和昵称

一、背景 自2022年10月25日后&#xff0c;小程序 wx.getUserProfile 接口 被收回&#xff0c;通过 wx.getUserInfo 接口获取用户头像将统一返回默认灰色头像&#xff0c;昵称将统一返回 “微信用户”。如需获取用户头像昵称&#xff0c;可以手动获取&#xff0c;具体步骤&…

七、性能测试之内存分析

性能测试之内存分析与实战 一、内存知识1、理解&#xff1a;2、内存的组成&#xff1a;内存地址、存储单元3、内存---树形结构1、链表2、二叉树 4、数据结构 二、内存使用1、典型案例&#xff1a;JVM&#xff08;java虚拟机&#xff09;包含程序计数器&#xff0c;java虚拟机栈…

探索图像数据中的隐藏信息:语义实体识别和关系抽取的奇妙之旅

探索图像数据中的隐藏信息&#xff1a;语义实体识别和关系抽取的奇妙之旅 1. 简介 1.1 背景 关键信息抽取 (Key Information Extraction, KIE)指的是是从文本或者图像中&#xff0c;抽取出关键的信息。针对文档图像的关键信息抽取任务作为OCR的下游任务&#xff0c;存在非常…

LNMP架构:搭建Discuz论坛

文章目录 1. 编译安装Nginx1.1 前置准备1.2 编译安装1.3 添加nginx系统服务 2.编译安装MySql2.1 前置准备2.2 编译安装2.3 修改mysql 配置文件2.4 设置路径环境变量2.5 初始化数据库2.6 添加musql系统服务2.7 修改MySql登录密码 3. 编译安装PHP3.1 前置准备3.2 编译安装3.3 复制…

【前端demo】倒计时器 可选择时间 原生实现

文章目录 效果过程日历与获取时间居中背景与字计时器清空计时器 代码HTMLCSSJS 其他demo 效果 效果预览&#xff1a;倒计时器 可选择时间 (codepen.io) 参考&#xff1a; Simple Clock/Countdown timer (codepen.io) 前端页面实现倒计时效果的几种方法_前端倒计时__Boboy的…

安卓逆向 - Frida反调试绕过

本文仅供学习交流&#xff0c;只提供关键思路不会给出完整代码&#xff0c;严禁用于非法用途&#xff0c;谢绝转载&#xff0c;若有侵权请联系我删除&#xff01; 本文案例 app&#xff1a;5Lqs5LicYXBwMTEuMy4y 一、引言&#xff1a; Frida是非常优秀的一款 Hook框架&#…

iperf 测试网络性能

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能&#xff0c;具有多种参数和UDP特性&#xff0c;可以根据需要调整&#xff0c;可以报告带宽、延迟抖动和数据包丢失。 官网&#xff1a;iperf.fr https://iperf.fr 支持参数 参数说明-p, --port #Server 端监…

设计模式入门(二)观察者模式

设计模式入门 本系列所有内容参考自《HeadFirst设计模式》。因为书中的代码是采用java语言写的&#xff0c;博主这里用C语言改写。 这里采用讲故事的方式进行讲解。若有错误之处&#xff0c;非常欢迎大家指导。 设计模式&#xff1a;模式不是代码&#xff0c;而针对设计问题的…

A Mathematical Framework for Transformer Circuits—Part (1)

A Mathematical Framework for Transformer Circuits 前言Summary of ResultsREVERSE ENGINEERING RESULTSCONCEPTUAL TAKE-AWAYS Transformer OverviewModel SimplificationsHigh-Level ArchitectureVirtual Weights and the Residual Stream as a Communication ChannelVIRTU…