hypermesh 连接单元_[读书笔记]《计算机科学速成课》—5 算术逻辑单元-ALU

上一节介绍了如何用二进制来表示数字,表示和存储数字是计算机的重要功能,但真正的目标是计算、有意义地处理数字,这些操作由计算机的算术逻辑单元(Arithmetic and Logic Unit,ALU)处理。ALU是计算机的数学大脑,是计算机里负责所有运算的组件,所以基本其他所有部件都会用到它。

798723ac1608b58c41235789a2e08795.png
可能是最著名的ALU——Intel 74181

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

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

1 算数单元

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

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

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

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

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

2221b97ffd78a4d70bf415d19d18a4c7.png
1位加法器

但其中一个特殊的结果是

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

c928a46db217b7346cadbb27b84be5f8.png
单个bit加法结果

51952029ed3d441b67b2aab0e3ebee81.png
半加器

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

1d1502d5db75482070939426779bcfa0.png
抽象的半加器

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

0c6fa6d114b23d467360b26c26eaa0db.png
全加器真值表

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

0935003454e55cfc468f7cb2dc3522f1.png
全加器

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

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

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

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

f7accd3bbef15e9831787b7726000f1a.png
8位加法器

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

ALU通常支持以下操作:加法、带进位的加法、减法、带借位的减法、取反、增1、减1、数字无改变通过。这些操作也是由逻辑门构成的。注意:简单的ALU并不支持乘法,而是把乘法用多次加法来实现,而更好的处理器有专门做乘法的算数单元。

2 逻辑单元

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

对整个8位ALU进行抽象,用一个特殊的V形符号进行表示。其中有两个8位输入,并且有一个4位操作码(Operation Code)来告诉ALU对输入执行什么操作,比如1000表示加法命令,1100表示减法命令,然后有一个8位输出。同时ALU会输出一系列1位标志(FLAG),来表示特定状态,比如我们可以计算A-B,然后通过ZERO来判断结果是否为零来判断A与B是否相等,通过NEGATIVE来判断A是否小于B;然后OVERFLOW连接到加法器的进位,来判断是否出现溢出。

f232355ab0eaf153adee1ce625d97bf8.png
ALU抽象表示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值