精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

算术逻辑单元(ALU)

大纲定位

二(二)1 基本运算部件:加法器、算术逻辑部件(ALU)

要求:理解一位全加器如何串成多位加法器,看懂串行进位与先行进位的差别在哪、为什么后者更快,并知道 ALU 除结果外还输出哪几个标志。

标志位的具体表达式与用法补码加减运算与溢出判断,本篇只讲它们从电路的哪个位置引出。

考情分析

ALU 相关内容在 408 中以选择题为主,考察加法器的进位传播方式、CLA 的基本思想和延迟分析,以及 ALU 产生的标志位含义。偶尔大题会要求写出先行进位的逻辑表达式。

ALU 概述

ALU(Arithmetic Logic Unit)是 CPU 中执行算术运算和逻辑运算的核心部件。

ALU 执行的操作包括:

  • 算术运算:加、减(通过求补转换为加法)、乘、除
  • 逻辑运算:AND、OR、NOT、XOR
  • 移位运算:逻辑移位、算术移位、循环移位

ALU 的标志位输出

大纲二(二)2 明写「标志位的生成」,综合应用题按逻辑表达式给分。设结果为 FCn 为符号位产生的进位(即 Cout),Cn1 为最高数值位向符号位的进位,Sub 为加/减控制信号:

标志位名称表达式对谁有意义
ZF零标志ZF=1F=0两者
SF(N)符号标志SF=Fn1带符号数
OF(V)溢出标志OF=CnCn1带符号数
CF进位/借位标志CF=SubCout无符号数

CF 不等于 Cout

减法在硬件上是 X+Y+1,最高位往往会产生进位。直接令 CF=Cout 是错的——减法的 CF 语义是「借位」,够减时不该置位,所以要把 Cout 取反。加法时 CF=Cout、减法时 CF=Cout,合起来即 CF=SubCout

CF 和 OF 的区别:CF 对无符号数有意义,OF 对有符号数有意义,同一次运算可以 CF=1 而 OF=0。四个标志存入标志寄存器 FR,其输出连到 CU 的输入端,供条件转移指令决策。

完整推导、减法版 OF 的独立表达式与算例,见 补码加减运算 · 标志位的生成

一位全加器

全加器(Full Adder, FA)是加法器的基本构建单元。三个输入 Ai,Bi,Ci,两个输出 Si,Ci+1

Si=AiBiCiCi+1=AiBi+(AiBi)Ci

定义两个辅助量:

  • 生成量(Generate):Gi=AiBi,本位无论低位进位如何都产生进位
  • 传播量(Propagate):Pi=AiBi,低位进位能通过本位继续传播

则进位公式简化为:Ci+1=Gi+PiCi

串行加法器

最简结构:只用 1 个全加器,每个时钟周期处理 1 位,进位通过触发器存储并传递到下一周期。

  • 优点:硬件成本最低
  • 缺点:n 位加法需要 n 个时钟周期

串行进位加法器(行波进位)

n 个全加器级联,第 i 位进位输出直接连到第 i+1 位进位输入。

C1=G0+P0C0C2=G1+P1C1Cn=Gn1+Pn1Cn1

进位像波浪一样从低位逐级传播到高位,因此也叫行波进位加法器(Ripple Carry Adder)。

延迟分析:设每个 FA 的进位延迟为 tn 位加法器总延迟 =nt,与位数成正比

先行进位加法器(CLA)

CLA(Carry Lookahead Adder)的核心思想:所有进位并行计算,消除逐级等待。

将递推公式展开,消去对低位进位的依赖:

C1=G0+P0C0C2=G1+P1G0+P1P0C0C3=G2+P2G1+P2P1G0+P2P1P0C0C4=G3+P3G2+P3P2G1+P3P2P1G0+P3P2P1P0C0

每个 Ci 都只依赖 Gj,Pj(一级门延迟内同时算出)和 C0。因此所有进位可以在固定门延迟内并行求出。

CLA 的层次结构

实际应用中,4 位一组做 CLA,组间可以串行或再做一级 CLA:

层次结构n 位延迟
组内串行 + 组间串行纯行波加法器O(n)
组内并行 + 组间串行4 位 CLA + 行波O(n/4)
组内并行 + 组间并行两级 CLAO(1)

加法器对比总结

类型硬件成本延迟适用场景
串行加法器(1 个 FA)最低n 个周期低速场合
行波进位(n 个 FA)中等O(n)一般场合
CLA(组内+组间并行)O(1)高速处理器

交互可视化

加载可视化中...
加载可视化中...

例题

例 1:4 位 CLA,已知 A=1010B=0111C0=0,求各位进位和结果。

先算 GiPi

iAiBiGi=AiBiPi=AiBi
00101
11110
20101
31001
C1=G0+P0C0=0+10=0C2=G1+P1G0+P1P0C0=1+0+0=1C3=G2+P2G1+P2P1G0+P2P1P0C0=0+1+0+0=1C4=G3+P3G2+P3P2G1+=0+0+1+0+0=1

Si=AiBiCiS=0001C4=1

验证:1010+0111=10001,正确。

例 2:16 位加法器采用 4 位一组的两级 CLA,设门延迟为 T,估算总延迟。

阶段延迟说明
计算各位 Gi,Pi1TXi,Yi 经一级门
组内 CLU 产生组级 G,P2T与、或两级
组间 CLU 产生 4 个组进位 C4,C8,C122TG,P,C0 算出
组进位回灌后,各组内部再算其余进位2T← 最容易漏的一级
求和 Si=PiCi1T

总延迟 =1+2+2+2+1=8T,而 16 位行波加法器约 32T

别把这一级漏掉

组间 CLU 只算出了每组的进位输入C4C8C12),组内其余各位的进位(C1,C2,C3,C5,)必须等组进位回来之后再算一级才产生——小组内的其他进位与小组的最高位进位并不是同时产生的。少算这 2T 会得到 6T 的错误结果。

考点清单

  • [ ] ALU 的输入(操作数 + 功能选择)和输出(结果 + 标志位)
  • [ ] ZF、SF、CF、OF 四个标志位的含义及区别
  • [ ] 全加器公式:S=ABCCout=AB+(AB)Cin
  • [ ] 生成量 G=AB,传播量 P=AB
  • [ ] 行波进位延迟 O(n),与位数成正比
  • [ ] CLA 核心:展开进位表达式,所有进位只依赖 Gi,Pi,C0
  • [ ] 组内并行 + 组间并行可实现常数级延迟

真题练习