filter 不计算加法_35 计算机科学速成课 05:ALU、半加器、全加器、算术单元、逻辑单元...

目录:

一、ALU

二、算术单元(使用逻辑门)

三、半加器

四、全加器

五、8位加法器

六、逻辑单元


一、ALU

上一节介绍了如何用二进制来表示数字,表示存储数字是计算机的重要功能,但真正的目标是计算、有意义地处理数字这些操作由计算机的算术逻辑单元(Arithmetic and Logic Unit,ALU)处理。

ALU是计算机的数学大脑,是计算机里负责所有运算的组件,所以基本其他所有部件都会用到它

7121680bbc4f4203c06e758f0e3b4331.png
可能是最著名的ALU——Intel 74181

1970年发布时,它是第一个封装在单个芯片内的完整ALU,能够处理4位输入,使用了70个逻辑门,但不能执行乘除法

ALU有两个单元,一个算术单元(Arithmetic Unit),一个逻辑单元(Logic Unit)


二、算术单元(使用逻辑门)

算术单元:负责计算机里的所有数字操作,比如加减法、增量运算(给某个数字+1)等等。

首先关注一个最基本的问题——将两个数相加。这里使用逻辑门进行实现,包括AND门、OR门、NOT门和XOR门。


三、半加器

最简单的加法电路,就是拿2个bit加在一起。这里有两个输入A和B,以及一个输出就是这两个数字的和注意:A、B和输出都是单个bit的。将这个结果用真值表表示

4b6a1046496280530f18fee52eca476c.png
单个bit加法部分真值表

可以发现和XOR操作的真值表相同,所以可以把XOR门用作1位加法器(1-bit adder)。

前三个加法:0 + 0;0 + 1;1 + 0 这三个加法的真值表

16d1885936abddcda1f4252bd5b874d5.png
1位加法器

但其中一个特殊的结果是

,其中存在
进位,而使用XOR门的输出 只能表示加法的结果,还需要另一个电路 表示进位的结果,可以发现其真值表 和ADN门真值表相同,所以可以使用 AND门来表示进位,称为 半加器(Half adder)

13b194ab6febf87a5f371a15dc37d675.png
单个bit加法结果

c29593ee91d9fa312cc63cefe4e9763a.png
半加器

由于半加器是比较基础的部件,所以可以将其抽象成一个单独部件,其中有两个输入,并且输出相加后的总和和进位

4fdf8ab55785c7b9b027299b20a6a9bb.png
抽象的半加器

四、全加器

全加器与半加器的区别包含前一位的进位相加。

如果想要处理多位二进制数加法时,就需要全加器(Full Adder),因为半加器计算完当前位的结果后,会输出进位,意味着计算下一位的结果时,要将两个输入以及前一位的进位相加。

用门电路实现两个二进数相加并求出和的组合线路,称为一个全加器。

例如:111 +110 时 ,第三位的 1+1还需要加上第二位进位的1,所以最后此位的结果为1进位为0

02eb2c93468723f2cb45bd6775047311.png

全加器是能够计算低位进位二进制加法电路。

全加器真值表:

db98aa4bd764a3feb5587ad6a0e70c8b.png

我们这里可以使用半加器来实现全加器。我们可以将一个半加器结果当做是INPUT A 和INPUT B相加后的结果,然后将SUM当做是新的INPUT A,而PRE CARRY(前一位的进位)当做是新的INPUT B输入到新的半加器中,可以发现其半加器的SUM(此位的结果)结果和全加器SUM(此位的结果)结果相同。而全加器的CARRY(此位的进位)只要对这两个半加器的CARRY(前一位的进位)进行OR运算就可以了。(注意:这两个半加器不会同时出现进位

26415151a126637d0796cd06065a5bb5.png
半加器

同样我们也可以对全加器进行抽象,得到一个包含三个输入两个输出独立部件


五、8位加法器

由此我们可以进行两个8位数字相加,表示为A和B:A0A1A2A3A4A5A6A7+B0B1B2B3B4B5B6B7

  1. 对A和B的第一位进行相加时,由于不存在进位,所以值使用一个半加器就能实现,这个半加器的SUM就为该位的结果CARRY就为进位
  2. 后续的7位二进制相加,由于每一个都涉及了上一位的进位,所以后续需要7个全加器,并且每个全加器的CARRY要连接到下一个全加器的输入,而每个全加器的SUM就为该位的结果。
  3. 最后一个全加器有CARRY的输出,如果该CARRY为1,就表示相加结果太大了,超出了8位,所以出现了溢出(overflow)
溢出:一般来说 "溢出" 的意思是, 两个数字的和太大了,超过了用来表示的位数,这会导致 错误和不可预期的结果

由此,我们就构建出了一个8位加法器(8-bit adder)

802cf53dff68cc04c8d5e0c4f4efd8ce.png
8位加法器

通过连接1个半加器n-1个全加器,就能构建n位加法器

通过叠加更多的加法器,能够避免溢出的出现,但是会出现更多的逻辑门,而且每次进位都要一些时间,而计算是串行的,所以消耗的时间也越长,到如今的每秒几十亿次运算时就会造成影响.所以现代计算机用的加法电路有所不同,称为超前进位加法器(Carry-Look-Ahead Adder)。

ALU通常支持以下操作:加法、带进位的加法、减法、带借位的减法、取反、增1、减1、数字无改变通过。这些操作也是由逻辑门构成的。

注意:简单的ALU并不支持乘法,而是把乘法用多次加法来实现,而更好的处理器有专门做乘法的算数单元


六、逻辑单元

逻辑单元:执行逻辑操作,比如AND、OR和NOT操作,也能做简单的数值测试

比如:数字是不是负数。

比如:只有输入的数字全为0,输出才为1.

c46367cfdffe14c94307f428dd518b2e.png

对整个8位ALU进行抽象,用一个特殊的V形符号进行表示。

其中有两个8位输入,并且有一个4位操作码(Operation Code)来告诉ALU对输入执行什么操作,比如1000表示加法命令,1100表示减法命令,然后有一个8位输出

同时ALU会输出一系列1位标志(FLAG),来表示特定状态,比如我们可以计算A-B,然后通过ZERO来判断结果是否为零来判断A与B是否相等,通过NEGATIVE来判断A是否小于B;然后OVERFLOW连接到加法器的进位,来判断是否出现溢出

右下角的电路为全加器中对应的输出标志位的电路

4533bb2b48825bcd2f920d89b36b008e.png

已获授权:

感谢原创作者: @深度人工智障

笔记属于二次更改,并增添了一些内容


原创出处:

原创作者: @深度人工智障

原创出处:知乎文章

原创链接:https://zhuanlan.zhihu.com/p/103505660


帮忙点个赞,谢谢!

整理不易,给点鼓励,谢谢!

更多的《计算机科学速成课》,关注专栏~

PS:请关注专栏,不要关注我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值