Menu Close

什么是 ALU?CPU 到底怎样完成加减乘除?

ALU--算术逻辑单元

计算机可以执行复杂的数学计算,但它的底层硬件并不直接理解我们在纸上使用的十进制加减乘除。CPU 处理的是二进制数据,通过晶体管、逻辑门和数字电路完成各种运算。

在 CPU 内部,ALU(Arithmetic Logic Unit,算术逻辑单元)是执行整数算术和逻辑运算的重要硬件模块。

那么,ALU 究竟是什么?CPU 如何使用二进制完成加法、减法、乘法和除法?为什么简单的逻辑门能够构成如此强大的计算系统?

一、什么是 ALU?

ALU 是算术逻辑单元,负责执行 CPU 指令中的基本算术和逻辑操作。

典型 ALU 可以完成整数加法、减法、按位与(AND)、按位或(OR)、按位异或(XOR)以及大小比较等操作。

例如,程序需要计算 15 + 8,CPU 可以通过指令将两个操作数送入相应的执行单元,由 ALU 完成加法,再把结果保存到目标寄存器中。

现代 CPU 的执行结构通常比单个 ALU 复杂得多。处理器可能包含多个整数 ALU、移位单元、乘法器、除法器和浮点运算单元(FPU)。

因此,虽然 ALU 是 CPU 计算功能的核心组成部分,但并不是所有数学运算都必须由同一个 ALU 完成。

二、ALU 内部有哪些组成部分?

ALU 主要由各种组合逻辑电路构成。这些电路接收输入数据,根据控制信号选择需要执行的运算,并产生输出结果。

典型 ALU 包含以下功能模块。

加法器(Adder): 执行二进制加法,是整数算术运算的重要基础。

逻辑运算电路: 执行 AND、OR、XOR、NOT 等按位逻辑操作。

比较电路(Comparator): 比较两个二进制数是否相等,或者判断大小关系。

结果选择电路(Multiplexer): 根据控制信号选择不同运算模块产生的结果。

标志生成电路: 在部分处理器架构中,产生零标志、进位标志、溢出标志等状态信息。

某些 ALU 还集成移位功能,但在其他处理器设计中,移位器可能是独立的执行单元。

ALU 本身主要负责组合逻辑运算,输入输出的寄存器以及相关控制通常属于更完整的 CPU 数据通路。

三、CPU 为什么使用二进制进行计算?

计算机内部的数字电路通常使用两个逻辑状态表示信息,即二进制的 0 和 1。

这两个状态可以由不同的电压范围表示,因此适合使用晶体管构建稳定可靠的数字电路。

例如,十进制数字 5 可以表示为二进制 0101,而十进制数字 3 可以表示为二进制 0011。

如果 CPU 要计算 5 + 3,实际可以执行:

0101 + 0011 = 1000

结果 1000 对应十进制数字 8。

因此,CPU 并不需要把二进制数字转换为十进制后再计算。它直接使用二进制电路执行运算,而十进制通常只是程序和用户显示数值的一种形式。

四、CPU 如何完成二进制加法?

二进制加法的基本规则与十进制加法类似,但每一位只能表示 0 或 1。

主要规则如下:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10

最后一种情况表示结果为二进制 10,也就是当前位写入 0,同时向高一位进位 1。

实现二进制加法的基础电路包括半加器(Half Adder)和全加器(Full Adder)。

半加器可以计算两个二进制位的和与进位。

全加器则可以同时处理两个输入位和来自低一位的进位。

多个全加器组合在一起,就能够构成多位二进制加法器。

例如,32 位整数加法器可以处理两个 32 位操作数。

现代高性能处理器还会采用进位预测、前缀加法器等技术,减少进位传播带来的延迟。

五、CPU 如何完成减法?

CPU 执行减法时,通常不需要再设计一套完全独立的减法电路。

在现代计算机中,有符号整数一般采用二进制补码(Two’s Complement)表示。

利用补码,减法可以转换为加法。

基本关系是:

A – B = A + (-B)

对于固定 N 位二进制数,求 B 的补码负数,可以将 B 的每一位取反,再加 1。

例如,使用 8 位二进制表示:

5 = 00000101

3 = 00000011

将 3 按位取反:

11111100

再加 1:

11111101

这就是 -3 的 8 位补码表示。

随后执行:

00000101 + 11111101 = 1 00000010

在 8 位运算中,丢弃超出位宽的最高进位,得到:

00000010

结果就是十进制的 2。

因此,ALU 可以通过对第二个操作数取反、设置输入进位并使用加法器完成减法。

这也是补码在计算机体系结构中非常重要的原因。

六、CPU 如何完成乘法?

二进制乘法与十进制的竖式乘法具有相似原理。

例如,计算十进制 3 × 5:

3 的二进制是 0011。

5 的二进制是 0101。

乘法器可以根据乘数各位是否为 1,选择相应的部分积,然后通过移位和加法合并结果。

由于 0101 表示 4 + 1,因此:

3 × 5 = 3 × 4 + 3 × 1

结果为 15,对应二进制 1111。

在硬件中,可以使用移位加法、部分积阵列、Booth 编码以及乘法树等技术实现乘法。

简单的乘法器可以在多个周期中重复使用加法电路,而高性能 CPU 通常具有专门的硬件乘法单元。

因此,现代 CPU 的乘法通常不只是通过软件重复执行加法指令,而是由专用硬件完成。

七、CPU 如何完成除法?

二进制除法可以使用与手工长除法类似的方法实现。

例如:

13 ÷ 3 = 4,余数为 1。

对应二进制:

1101 ÷ 0011 = 0100,余数为 0001。

在一种简单的硬件除法算法中,处理器可以反复比较被除数的部分结果与除数,执行减法,并逐步产生商的各个位。

常见的整数除法实现方法包括恢复余数除法、非恢复余数除法,以及更复杂的迭代算法。

现代 CPU 可能使用专用整数除法器完成这些操作。

除法通常比简单整数加法更加复杂,在许多处理器中也需要更多执行周期。

不过,具体延迟取决于处理器架构和所采用的除法硬件。

另外,整数除法与浮点除法是不同的运算类型,通常具有不同的硬件实现方式。

八、ALU 如何完成逻辑运算?

除了算术计算,ALU 还负责多种逻辑操作。

例如,AND(与)运算要求两个输入位都为 1,结果才是 1。

OR(或)运算要求至少一个输入位为 1,结果就是 1。

XOR(异或)运算在两个输入位不同时产生 1,相同时产生 0。

例如:

1100 AND 1010 = 1000

1100 OR 1010 = 1110

1100 XOR 1010 = 0110

这些操作在位掩码、设备控制、数据处理和计算机安全算法中非常常见。

例如,嵌入式程序可以通过 AND 操作检查寄存器中的某一位,也可以通过 OR 操作设置某些控制位。

因此,逻辑运算是 ALU 与数字电子系统连接的重要基础。

九、ALU 与 CPU 寄存器如何配合工作?

CPU 执行算术指令时,ALU 通常需要从寄存器或执行数据通路获取操作数。

以 RISC-V 为例,可以使用以下指令:

add x5, x6, x7

这条指令表示将寄存器 x6 和 x7 的数值相加,并把结果写入寄存器 x5。

从简化的数据流来看,执行过程可以分成三个主要阶段。

首先,CPU 读取 x6 和 x7 对应的操作数。

接下来,整数 ALU 根据指令控制信息执行加法。

最后,运算结果写回目标寄存器 x5。

如果操作数原本保存在 RAM 中,处理器还需要通过加载指令将数据送入寄存器。

需要注意,现代 CPU 可能采用流水线、寄存器重命名和乱序执行,因此真实的硬件执行流程比这个例子复杂。

十、ALU 与 CPU Clock 有什么关系?

CPU Clock(时钟)用于协调同步数字电路中的状态更新。

ALU 通常包含组合逻辑电路。当输入数据和控制信号发生变化后,运算结果会经过一定的传播延迟逐渐稳定。

在一个同步 CPU 中,寄存器可以在指定时钟边沿接收已经稳定的计算结果。

因此,ALU 的逻辑延迟可能影响处理器能够达到的最高时钟频率。

例如,如果一条关键组合逻辑路径的传播时间过长,处理器就可能需要更长的时钟周期。

为了提高频率,现代 CPU 通常采用流水线设计,将复杂操作分配到不同执行阶段。

不过,一个时钟周期并不意味着一定完成一条指令,ALU 的运算延迟与整颗 CPU 的指令吞吐量也不是同一个概念。

十一、ALU 与 FPU 有什么区别?

ALU 通常主要用于整数算术和逻辑运算,而 FPU(Floating-Point Unit,浮点运算单元)用于处理浮点数计算。

例如,计算两个整数相加可以由整数 ALU 完成。

但是,计算包含小数的浮点运算,通常需要符合浮点数表示规则的专门硬件。

现代处理器广泛使用 IEEE 754 浮点数格式,例如 FP32 和 FP64。

浮点计算涉及指数、尾数、舍入和特殊数值处理,因此硬件实现通常比简单整数加法复杂。

此外,现代 CPU 还可能包含 SIMD、向量运算和专门的矩阵计算单元,以提高并行计算效率。

因此,ALU 只是现代处理器执行系统中的一部分。

十二、FPGA 可以自己设计 ALU 吗?

可以。ALU 是 FPGA 和数字逻辑设计中非常适合初学者学习的项目。

工程师可以使用 Verilog 或 VHDL 描述一个简单 ALU,让它支持加法、减法、AND、OR 和 XOR 等操作。

例如,可以设计一个 8 位 ALU,包含两个 8 位输入 A、B,以及一个用于选择运算类型的控制信号。

当控制信号选择加法时,输出 A + B。

当选择减法时,输出 A – B。

当选择 AND 时,输出 A & B。

经过逻辑综合后,FPGA 开发工具会把这些运算映射到查找表(LUT)、进位链以及其他适用的硬件资源中。

通过这个项目,可以进一步理解组合逻辑、二进制运算、控制信号和 CPU 数据通路。

ALU 也是学习 RISC-V 软核处理器设计的重要起点。

十三、ALU 是否决定 CPU 的全部性能?

ALU 的设计会影响 CPU 计算性能,但不能决定整颗处理器的全部性能。

现代 CPU 的速度还取决于指令获取、指令解码、流水线、缓存、分支预测、内存带宽和执行单元数量等因素。

例如,即使 CPU 拥有非常快的 ALU,如果程序经常等待 RAM 返回数据,处理器仍然可能出现性能瓶颈。

如果程序包含大量分支指令,分支预测准确率也可能影响执行效率。

此外,多核心 CPU 可以同时拥有多个独立的执行资源,从而提高适合并行处理的程序的吞吐量。

因此,分析 CPU 性能时,需要从完整的处理器架构出发,而不能只看 ALU 的速度。

总结

ALU(算术逻辑单元)是 CPU 内部执行整数算术和逻辑运算的重要硬件模块。

它利用加法器、逻辑门和控制选择电路完成基本运算。二进制加法依靠加法器实现,减法通常利用补码转换为加法,乘法和除法则可以由专门的硬件运算单元完成。

ALU 与寄存器、CPU Clock、控制单元和执行流水线共同工作,使处理器能够执行各种机器指令。

理解 ALU 的工作原理,是学习数字逻辑、计算机体系结构、Verilog、FPGA 和 RISC-V 处理器设计的重要基础。

Posted in 芯片基础知识