Appearance
算术逻辑单元(ALU)
2026 大纲 二(二)1 基本运算部件(加法器,算术逻辑部件 ALU)。
整个运算体系压在一个加法器上
减法靠求补、乘法靠"移位
加法器的原子是一位全加器,两个式子:
其中
🔴 串行进位慢的唯一原因是"高位进位依赖低位进位"。 全加器内部从进位输入到进位输出是 2 级门,
位就是 级,延迟与位数成正比。先行进位的做法是把这个递推式一层层代入,使每个 只依赖 、 和 ,于是全部进位可以并行产生——4 位全先行进位的关键路径是 6 级门延迟(异或按 3 级计),与位数无关。
⚠️ 先澄清一组只差一个字的名词:串行加法器
交互可视化
一、一位全加器:唯一的原子
全加器(Full Adder, FA)三个输入
进位表达式读起来就是两句人话:
二、串行进位:慢在一根链条上
把
最低位的进位像投进水面的石头,涟漪一圈圈往外扩——所以这种结构叫行波进位加法器(Carry Ripple Adder, CRA)。延迟
| 串行加法器 | 串行进位加法器(行波) | |
|---|---|---|
| 全加器数量 | 1 个 | |
| 数据怎么进 | 每个时钟周期送 1 位 | |
| 进位怎么传 | 存进触发器,下个周期用 | 沿导线逐级传到高位 |
| 1 个时钟周期内的 | ||
| 硬件成本 | 最低 | 中等 |
串行加法器是分时复用一个全加器,串行进位加法器是空间上排开
三、先行进位:把依赖链拆成一层展开式
把递推式一层层代入,直到每个
现在每个
| 4 位全先行进位的关键路径(异或门按 3 级门计) | 门延迟 |
|---|---|
| 由 | 1 |
| 由 | 2 |
| 由 | 3 |
| 合计 | 6(与位数无关) |
🔴 全先行做不大,卡的是扇入。 理论上 32 位也能做成一级全先行进位、还是 6 级门延迟,但那样的
需要三十多个输入端的与门和或门,物理上做不出来。所以实际一律分组分层:
| 结构 | 说明 | 延迟 |
|---|---|---|
| 组内串行 + 组间串行 | 纯行波加法器 | |
| 组内并行 + 组间串行 | 4 位一组 CLA,组间行波 | 约 |
| 组内并行 + 组间并行 | 两级先行进位 | 与位数无关 |
🔴 两级 CLA 里,组内其余进位比组进位晚一级。 组间 CLU 只算出各组的进位输入
、 、 ;组内其余进位( )必须等组进位回灌之后再算一级。漏掉这一级,是估算延迟时最典型的错法。
⚠️ 顺带一处符号约定:
把进位生成函数与传递函数真算一遍:4 位 CLA 代入一组数(想确认四个进位式确实同时求值、没有先后时展开)
| 0 | 0 | 1 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
| 2 | 0 | 1 | 0 | 1 |
| 3 | 1 | 0 | 0 | 1 |
代入展开式:
核对:
注意这四个式子没有先后顺序——它们同时求值。行波加法器里必须先有
16 位两级先行进位的 8T 是怎么一级一级数出来的(想核对自己有没有漏掉组进位回灌那一级时展开)
16 位加法器采用 4 位一组的两级先行进位结构,设一级门延迟为
| 阶段 | 延迟 | 说明 |
|---|---|---|
| 各位产生 | 由 | |
| 组内 CLU 产生组级 | 与、或两级 | |
| 组间 CLU 产生各组的进位输入 | 由 | |
| 组进位回灌后,各组内部再算其余进位 | ← 最容易漏的一级 | |
| 求和 | ||
| 合计 | 对比 16 位行波约 |
组间 CLU 只算出每一组的进位输入(
另外注意本例把异或门按
四、从加法器到 ALU
第一步:带标志加法器
一个纯粹的
- 求补通路:
输入端串一排反相器接二选一多路器,控制端 同时作为最低位进位送入, 时电路算 - 标志生成逻辑:从进位链和结果上引出四条信息

(袁春风《计算机组成与系统结构》第 3 版,见文末教材出处)
| 标志 | 表达式 | 从哪儿引出 | 对谁有意义 |
|---|---|---|---|
| ZF | 结果全零检测(一个或非门) | 两者都有 | |
| SF | 结果最高位,直接引线 | 带符号数 | |
| OF | 进位链最高两级,一个异或门 | 带符号数 | |
| CF | 进位输出与 | 无符号数 |
标志位的完整推导、减法版 OF 的独立表达式与三种溢出判别方法的统一,见 补码加减运算与溢出判别。
教材图中用全加器画加法器只是为了讲清标志怎么产生;真正的电路一定用多级先行进位方式。
第二步:加上逻辑运算
一位 ALU 的内部结构很朴素:一个全加器算加法,若干逻辑门分别算「与」「或」,再用一个多路选择器按 ALUop 挑一路输出。
由此可以给 ALU 下一个准确的定义,也顺带分清它与加法器的边界:
🔴 ALU
带标志加法器(核心) 逻辑运算门 多路选择器,是一种组合逻辑电路。对照之下:纯加法器只出和与进位;带标志加法器能加能减、能出四个标志,但不做逻辑运算。
🔴 ALUop 的位数决定操作种类的上限:3 位最多 8 种。题面给出 ALU 支持几种运算,就能反推控制字段至少几位(
)。
第三步:移位器为什么在 ALU 外面
桶形移位器(barrel shifter)用大量多路选择器直接把每一位选到目标位置,一次完成任意位数的移位,而不是移一位重复若干次。
🔴 一次移多位不在 ALU 内部做。 ALU 顺带能移一两位,但一次移任意位数要用 ALU 外部的桶形移位器。放在外面有两点理由:简化 ALU 的控制逻辑、以及让移位与 ALU 运算可以并行。数据通路图上 ALU 旁边那个独立的方块就是它。
移位规则本身见 定点数的移位运算。
考点速记
- 加法器是整个运算体系的瓶颈;串行进位慢的唯一原因是高位进位依赖低位进位(
级门),先行进位把递推式展开成只依赖 、 、 的两级与或式,4 位全先行进位 6 级门延迟且与位数无关。 - 全先行进位受扇入限制做不大,实际是组内并行 + 组间并行的两级结构;两级 CLA 中组内其余进位要等组进位回灌后再算一级,不与组进位同时产生。
- ALU
带标志加法器 逻辑运算门 多路选择器,ALUop 位数决定操作种类上限;四个标志从进位链与结果上引出,其中 ;一次移多位由 ALU 外部的桶形移位器完成,好处是简化控制逻辑并支持移位与运算并行。
这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那几道):
- 给一条减法指令与两个操作数,问执行后 CF 与 OF 各是多少:按
实做,CF 取 的反(够减不置借位),OF 用 。两个标志分别算,别互相推。 - 给一组数据下的 OF 与 CF,问换一组数据后是多少:考的是两者互相独立,重算一遍即可。
- 问某条件转移指令的转移条件表达式:先分清无符号比较还是带符号比较——无符号用 CF 与 ZF("大于"是
),带符号用 SF、OF 与 ZF。 - 大题里问 SF 与 OF 的逻辑表达式:
就是结果最高位 ;加法的 (同号相加、和却异号),减法版要单独写(异号相减、差与被减数异号)。题目要求"输入变量为 、 、 "时,答的就是这两个式子。 - 大题里问 ALUop / 移位控制信号至少几位:
。
易错:减法直接把
当 CF。要取反。
易错:把加法的 OF 表达式照抄到减法上。同号项要换成异号项。
易错:估算两级 CLA 延迟时,把组内其余进位当成与组进位同时产生。它们要晚一级。
易错:把桶形移位器算进 ALU 内部。它在 ALU 外面,为的是简化控制并支持并行。
教材出处
- 全加器公式、
/ 的定义与含义、串行进位加法器(行波进位)延迟为 级门:袁春风《计算机组成与系统结构》第 3 版 §3.2.1~§3.2.2,印刷页 p56–p57 - 先行进位表达式展开、4 位全先行进位加法器关键路径 6 级门延迟、32 位全先行进位因扇入过大不现实、两级先行进位延迟与位数无关:同书印刷页 p57–p58
- 带标志加法器电路(图 3.6)与四个标志表达式:同书 §3.2.3 带标志加法器,印刷页 p58
- ALU 以带标志加法器为核心、ALUop 位数决定操作种类、一位 ALU 结构、桶形移位器置于 ALU 之外的两点理由:同书 §3.2.4 算术逻辑部件,印刷页 p59
- 补码加减运算部件(图 3.9)中
同时控制反相器与最低位进位输入:同书 §3.3.1,印刷页 p60
相关知识
补码加减运算与溢出判别|定点数的移位运算|乘除运算的基本原理与实现结构