2

1、ALU

ALU 就是计算机里负责运算的组件, 用于有意义的处理数字,比如把两个数字相加。基本其他所有部件都用到了它。
ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元。

2、第一个ALU

英特尔 74181,发布于1970 年,是第一个封装在单个芯片内的完整 ALU。
图片描述

3、制作算术单元

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

原料:
AND,OR,NOT 和 XOR 逻辑门。

目的:
最简单的加法电路, 例如: 2 个 bit 加在一起(bit 是 0 或 1)

思路:
有 2 个输入:A 和 B; 1 个输出:A、B两个数字的和。 (注意的是:A, B, 输出,这3个都是单个 Bit ( 0 或 1 ))

输入只有四种可能:
(1)前三种可能是: 0 + 0 = 0 , 1 + 0 = 1 , 0 + 1 = 1。
特点:这三种的输入和输出,和 XOR 门的逻辑完全一样,所以可以把 XOR 用作 1 位加法器(adder)。
实现:XOR门
图片描述

(2)第四个可能, 1+1=2,是个特例;
特点:
二进制里没有 2。二进制 1+1 的结果是0,1进到下一位,和是 10 (二进制)。
XOR 门的输出,只对了一部分, 1+1 输出 0,需要一根额外的线代表 "进位"。
实现:XOR门 + AND门
只有输入是 1 和 1 时,进位才是 "true"。使用两个逻辑门抽象成组件 "半加器" 。
图片描述

半加器:
特点:两个输入 A 和 B 都是 1 位 ,两个输出 "总和" 与 "进位"
图片描述

全加器:

背景:如果想处理超过 1+1 的运算,半加器 输出了进位,意味着,我们计算之后每一列的时候,我们得把3 个位加在一起,并不是 2 个。这就需要"全加器"。
特点:
有 3 个输入:A, B, C (都是 1 个 bit);
最大的可能是 1 + 1 + 1"总和"1, "进位"1 , 要两条输出线: "总和"和"进位"。

实现:
可以用 半加器 做 全加器
先用半加器将 A 和 B 相加,然后把 C 输入到第二个半加器,最后用一个 OR 门检查进位是不是 true。

图片描述

图片描述
8位行波进位加法器:
图片描述

溢出:
如果第 9 位有进位,代表着 2 个数字的和太大了,超过了 8 位,这叫 "溢出" (overflow)。
特点:两个数字的和太大了,超过了用来表示的位数。
如何避免溢出:可以加更多全加器,可以操作 16 或 32 位数字,让溢出更难发生,但代价是更多逻辑门和更长的时间(因为每次进位都要一点时间)。

超前进位加法器:更快,但是原理是一样的 ,都是 把二进制数相加。

各种ALU的区别:
简单的 ALU :该类ALU没有专门的电路来处理乘法和除法,而是把乘法用多次加法来实现。例如: 12x5,这和把 "12" 加 5 次是一样的,所以要 5 次 ALU 操作来实现这个乘法。很多简单处理器都是这样做的,比如恒温器,电视遥控器和微波炉。
更好的处理器:比如笔记本和手机中,有专门做乘法的算术单元,乘法电路比加法复杂,但只是更多逻辑门。

4、逻辑单元

逻辑单元执行逻辑操作,比如之前讨论过的 AND,OR 和 NOT 操作,它也能做简单的数值测试,比如一个数字是不是负数。
图片描述

5、ALU的抽象

(1)使用 大 “”表示ALU
图片描述
(2)8 位 ALU 的输入与输出

  • 两个输入:A和B,都是 8 位 (bits);
  • 操作代码:用 4 位的操作代码告诉 ALU执行什么操作。例如加法或减法,"1000"可能代表加法命令 ,"1100"代表减法命令。
  • 输出结果: 8 位。
  • 一堆标志位:输出一堆标志(Flag),"标志"是1位的,代表特定状态。例如:如果想知道A 是否小于 B,可以用 ALU 来算 A 减B,看负标志是否为 true,如果是 true,我们就知道 A 小于 B。

图片描述


二丽
280 声望8 粉丝