【计算机组成原理】加法器原理及其优化

                                                                            苏泽 

本专栏纯个人笔记作用 用于记录408 学习的笔记记录(敲了两年码实在不习惯手写笔记了)

                                                         如果能帮助到大家当然最好   

但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试

希望大家挑选自己喜欢的口味食用    仅供参考


这章在王道书里好像没有专门讲,估计不是考纲 但觉得对后面的理解还是有帮助的 故记录学习

算术逻辑单元

这是运算器当中重要的组成部分  从我的角度来看 这就像是一个封装好的

这个类最主要用于--计算   也就是能理解成一个计算类

那么这张图是在描述ALU他大概会做些什么事情  

我的理解它就像是这个类的父类(还是个抽象父类)  它定义了这个类的抽象方法  他正在描述这个类 会做些什么事情:其实无非就是 输入了三个参数 其中两个参数是操作数 还有一个参数是指令  输出的那个就是结果罢了

那么我们来看这个类他的实例是怎么样的

这个图咋一看很复杂  其实就是一个类 它里面有非常多的构造方法 然后我们可以发现 这里面的构造方法指名道姓的使用哪个 是靠的什么? 靠的是控制单元所输出的 右边那一列S、M的东西  其实就是个参数  他不同的参数类型 指向了不同的 实现方法(M告诉ALU我要进行算术还是逻辑运算、然后S那几个就告诉ALU要进行哪一种的算术/逻辑运算) 

这样 我们就能 把这个算术逻辑单元想象成一个类  右边那一列是一种参数   下面那一排a和b又是两种参数        我们会发现 输入的A0~3他的位数是跟F的位数是相等的  所以这就是他的机器字长 也就是他一次性能处理多少位的数

然后再根据箭头不难发现 输出有两种 上面的F 和左边的那一堆 也是输出

基本的逻辑运算

这里我们首先来确认逻辑运算  因为这是ALU实现功能的基础

这里细心的兄弟发现了 其实 这里面就是我们平时写if语句的时候的&&   ||  和!

其实没啥差别 毕竟连C语言都这么写了 说明他底层就是这么来实现的  

电路也一样

所以这个事情就变得很简单了 
&&:只要有一方是0 结果就是0

||:只要有一方是1 结果就是1

!:就是取反嘛

来看看门电路

也没啥 无非就认得谁脑袋比较圆  谁脑袋毕竟方

其中 你们有没有发现 其实与就是乘法  因为:你把这块的A和B带入乘法进去  算  结果是不是就是Y?包括那个或 :

或就是加法啊 你带进去一算 你就知道到底谁是谁了  所以就直接记:与是乘  或为加

再根据小学生都知道的道理 :先乘除后加减  所以与优先级大于或 就那么简单

既然是加和乘  那就自然有小学生的定理:乘法分配率  乘法结合律  

在此基础上  延展

复合逻辑

其实就是小学生的数学题

与非 可以分解成 两个数先非  再与

或非 可以分解成 两数先非 再或

但是异或其实就是咱们初中最爱出的自定义运算题里面的那个了

就是看a和b同不同   a、b异则输出1 否则输出0  所以这个玩意他叫异或 就是字面意思

public int 异或(int A,int B){
    if(A==B)
        return 0;
    return 1;
}

呐就是这么个玩意 叫异或

他其实可以拆分成异和或

  

电路就是根据表达式画出来的而已

然后就是同或  就是把刚才的异改成了同->同就是1  否则是0  依旧是字面意思

好了终于到加法器了

在此之前 先学习一位全加器

一位全加器

分解一下 二进制当中做加法的步骤

其实就只有这四个东西 AB两个是要加的数 C是进位  S是和 

他们有各自的名字 本位 低位 进位 其实都是字面意思  然后i就是他们的序列 跟我们玩的算法题一个道理

进位有两种可能是会进一的  一种是AB都是1 则进1  一种是A和B其中有一个1 然后低位有一个1 也是进1

所以Ci就有这样的表达式  其实就是把两种情况的可能性加到了一起 (刚才我们说过 加其实就是或)

然后我们根据表达式可以画出电路图

那么我们就可以吧这个  一位全加器的函数签名写下来

就是这样 

两个一位的数相加已经解决了 一旦有很多位 的数呢

两种方案:串行加法器和并行加法器

串行加法器

串行就是将他们无脑一条线串起来

串行进位的并行加法器:把n个全加器串接起来,就可进行两n位数的相加。

并行加法器

那么这块 就不得不提到 动态规划的思想了

我们发现 第i个数的结果由第i-1来推到 则可以得到

最后会一直到C0

像这样的递推  有兴趣的小伙伴可以看一下我之前写过的动态规划的文章 正好是这一篇文章的上一篇

那么我们发现 这样的递推 每一次都会参考先前的数

也就是说:第i位向更高位的进位Ci可根据被加数、加数的第1~位,再结合C0即可确定

这样子做的好处就是 到C4为止 几乎所有的参数都是同时产生的  所以速度就会大大提高

但是越这样分解 到后面的式子就会越复杂 所以  一般来说就是把这样的做法 实现位四个位数 

那么这里的A1到A4和B1到B4就是像上面那种做法来处理的 这就是并行加法器的实现过程了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器人的非接触式充电和无线充电有什么区别?

文 | BFT机器人 在日新月异的技术浪潮中,接触式与非接触式无线充电之间的微妙差异变得愈发重要,这如同在纷繁复杂的迷雾中增添了一层难以捉摸的迷离。而今,一些所谓的“无线”充电站纷纷涌入市场,它们自诩为无需线缆束缚的新时代…

FAT16文件系统

FAT16 大端存储:高位字节放在低地址端,低位字节放在高地址端。 小端存储:低位字节放在低地址端,高位字节放在高地址端。 举一个例子,比如数字0x12 34 56 78在内存中的表示形式为: 大端模式: 低地…

2024年软件开发行业的薪资水平在下滑的原因?

下降的原因主要包括: 科技行业竞争加剧:随着科技行业竞争的加剧,企业为了压缩成本,开始降低程序员的薪资水平。 人才供应过剩:在计算机成为热门学科的同时,社会上出现了对IT业泡沫和虚假繁荣的质疑。大量…

【ROS2笔记七】ROS中的参数通信

7.ROS中的参数通信 文章目录 7.ROS中的参数通信7.1使用CLI工具调整参数7.2参数通信之rclcpp实现7.2.1创建节点7.2.2rclcpp参数API Reference ROS2中的参数是由键值对组成的,参数可以实现动态调整。 7.1使用CLI工具调整参数 启动turtlesim功能包的环境 ros2 run …

java算法day56 | 动态规划part15 ● 392.判断子序列 ● 115.不同的子序列

392.判断子序列 动规五部曲: 确定dp数组(dp table)以及下标的含义 dp[i][j] 表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。确定递推公式 在确定递推公式的时候,…

第21天:信息打点-公众号服务Github监控供应链网盘泄漏证书图标邮箱资产

第二十一天 一、开发泄漏-Github监控 1.短期查看 1.密码搜索 根据攻击目标的域名在GitHub上进行搜索密码,如果目标网站的文件与搜索到的源码相关,那就可以联想目标网站是否使用这套源码进行开发 原理就是开发者在上传文件的时候忘记更改敏感文件或者…

探索VR数字展厅,对企业未来展示新模式

在数字化浪潮的推动下,企业展示也在经历着一场革命,VR数字展厅正在以一种全新的方式重塑我们的生活和工作空间,不仅重塑了客户的观展体验,也为企业营销打开了新的渠道。 VR数字展厅作为实体展厅的数字化延伸,正以其沉浸…

SpringBoot框架——7.整合MybatisPlus

这篇主要介绍Springboot整合MybatisPlus,另外介绍一个插件JBLSpringbootAppGen,以及一个经常用于测试的基于内存的h2数据库。 Mybatisplus是mybatis的增强工具,和tk-mybatis相似,但功能更强大,可避免重复CRUD语句,先来…

JWT的使用

0、JWT原理 header JWT第一部分是header,header主要包含两个部分,alg指加密类型,可选值为HS256、RSA等等,typJWT为固定值,表示token的类型。 Payload JWT第二部分是payload,payload是token的详细内容,一般包括iss (发行者), exp (过期时间),…

速看!2024中国(厦门)国际康复医疗展览会

2024中国(厦门)国际康复医疗展览会 2024 China (Xiamen) International Rehabilitation Medical Exhibition 时 间:2024年8月13-15日 August 13-15, 2024 地 点:厦门国际会展中心 Xiamen International Conference & Exh…

分布式调度器timer和spring task

1. Timer(了解) 一、Timer使用方式 Task1 public class Task1 extends TimerTask {Overridepublic void run(){System.out.println("com.aware.Task run");} } Task2 public class Task2 extends TimerTask {Overridepublic void run(){…

外包干了18天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

【研发管理】产品经理知识体系-产品创新管理

导读: 产品创新管理对企业的发展具有深远的影响,它不仅是企业保持竞争优势的关键,也是推动企业持续稳定发展的重要动力。因此,企业应高度重视产品创新管理,并采取有效的策略和方法来推动产品创新活动的开展。对于产品经…

开关原理(验证码开关、IP开关)

开关原理(验证码开关) 我们的项目具有验证码功能,旧版不支持关闭,新版已经支持关闭了。 我们打开页面“参数管理”,所谓参数管理,就是在系统运行起来的时候,可以动态修改一些值,这些…

java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体育馆使用预约平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 体育馆使用预约平台的…

IDEA中SVN 的使用

文章目录 前言一、svn安装二、IDEA集成SVN总结 前言 svn可以老牌的代码仓库了 说实话svn还是和git无法相比的,毕竟git有本地仓库的概念,可以很好的处理冲突,然而svn是没有本地仓库的概念的,所以只能拉取别人的代码,然后处理冲突后,才能提交代码; 由于最近的工作换成了用svn仓…

找不到api-ms-win-crt-runtime-l1-1-0.dll文件5种解决方法

在日常使用计算机的过程中,我们时常会遭遇各类意想不到的问题,其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中,它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常…

LLamaSharp加载llama.cpp转化好的模型

新建.net8控制台项目 安装依赖包 LLamaSharp和LLamaSharp.Backend.Cpu 准备好转化好的模型 没有的话参考这篇文章https://blog.csdn.net/qq_36437991/article/details/137248622 编写代码 using LLama; using LLama.Common; using LLama.Native;namespace llamasharpstu…

【Java开发指南 | 第十三篇】Java条件语句

读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 if 语句if...else 语句if...else if...else 语句嵌套的 if…else 语句switch 语句 Java 中的条件语句用于根据条件来执行不同的代码块。条件语句允许程序根据表达式的结果选择性地执行代码。 条件语句分为if 语…

中拔出溜的公司如何实施DEVOPS

虽然推进起来很艰难,但在这类公司也并非一无是处:只要让各方尤其是领导曾看到了成效,大范围铺开很容易,你也非常容易因此变得出众。 0. 标题 1. 中拔出溜公司的特点2. 循序渐进2.1 从研发团队开始2.2 先CI(持续集成&am…