1.5 ALU 算术逻辑单元 (How Computers Calculate)

2022-10-02
3分钟阅读时长

ALU 算术逻辑单元(Arithmetic and Logic Unit)是计算机中负责运算的组件。

最著名的 ALU 之一是 Intel 74181,其于 1970 年发布,是第一个封装在单个芯片中的完整 ALU。 Intel 74181 使用了 70 个逻辑门,但无法执行乘除运算。

 Intel 74181

ALU 由 1 个算术单元(arithmetic)和 1 个逻辑单元(logic unit)组成,算术单元可用于进行加减法运算或是增量运算(x+1),逻辑单元执行逻辑操作(如布尔代数中的基本运算)。

1.5.1 算术单元

半加器

半加器(half adder)由异或门和与门组成,仅能计算 1 位加法。两个输入(0 或 1)有 4 种可能的输出(1 = true,0 = false),不计进位的情况(1+1=0,高位舍弃)可用「异或门」搭建:

一位加法器

当且仅当两个输入均为 1 时需要进位,该规则和「与门」相同,两者连接则为半加器:

半加器

全加器

使用半加器做两个三位二进制数加法时,需要多加一个进位上的数字(共计 3 个数相加)。

全加器的真值表如下:

全加器真值表

全加器的逻辑门电路如下:

全加器电路图

8 位行波进位加法器

全加器可以处理两个三位二进制数的加法运算,两个八位二进制数的加法可以从低位逐列相加,用 1 个半加器和 7 个全加器搭建:

八位行波进位加法器

当计算结果的位数大于可用于表示的位数,则会出现「溢出」(overflow),这会导致 error 和不可预期的结果。

为防止溢出,可以使用更多的全加器来完成 16 位或是 32 位数字的操作。但使用更多的逻辑门会提高造价,同时进位计算的耗时也更多,在每秒几十亿次的运算下该延迟仍然会造成影响。所以现代计算机所采用的加法电路为「超前进位加法器」(carry-look-ahead),其速度更快。

乘除法

ALU 的算术单元基本都支持下图中的 8 种操作,简单 ALU 可以通过累加/累减来实现四则运算中的乘除法(慢但有效),复杂 ALU 会用更多的逻辑门构建乘法电路。

ALU算术单元支持的八种操作

1.5.2 逻辑单元

逻辑单元(logic unit)用于执行逻辑操作,比 AND、OR 和 NOT 操作,也可以用于进行简单的数值测试。注意此处的 0 和 1 遵守布尔代数的逻辑运作,而非算术加减。

下图的逻辑单元门电路用于检测输出是否为 0(可用于确认两数字是否相等),OR 或门遇 1 出 1,最后用 NOT 非门取反后,凡有 1 则为 0,检测结果为 False 假,意为输出不为 0(其中至少有一位是 1)。

检测输出是否为 0 的逻辑单元电路

1.5.3 ALU 抽象

8 位 ALU 需要用上百个逻辑门搭建,因此工程师用镂空大 V 符号来表示 ALU 组件:

简图如下:

8 位 ALU 基本图形

除了两个 8 位的输出和一个输入之外,8 位 ALU 还需要用 4-bits「操作码」(Operation Code)确认执行操作类型,同时还会输出一些 1-bit 的标志位(Flags)表示特定状态,常见类型如下:

  • 溢出位(Overflow)检测是否发生溢出情况。
  • 零标志位(Zero):检测输出是否为零。
  • 负标志位(Negative):检测输出是否为负数。