乐趣区

5算术逻辑单元ALU

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 没有专门的电路来处理乘法和除法,而是把乘法用多次加法来实现。例如:12×5,这和把 “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。

退出移动版