**要点速览:**小型 ALU 是一条组合数据通路:候选算术、逻辑和移位功能对相同输入字并行运算,再由多路选择器选出可见结果。只有明确规定操作编码、进位/借位语义、溢出行为和标志写入策略,设计才算完整。
算术逻辑单元是处理器变换数据的地方。ADD 与 SUB 需要加法器;AND、OR 与 XOR 需要并行逻辑门通道;移位需要布线或移位器网络;结果多路选择器则决定哪项候选值抵达目的端。
这幅框图可用四位或八位数据通路实现,并能揭示若干实际工程决策:
- 减法报告借位,还是非借位?
- 右移以零填充,还是复制符号位?
- 哪些操作定义溢出输出?
- ALU 自己存储标志,还是由独立寄存器捕获?
- 先并行计算所有大型功能再选择,还是共享逻辑以减少面积?
本文构建一套内部约定一致的 4 位教学 ALU,并标出其他体系结构可能作出不同选择的位置。
从接口约定开始
除非某项操作明确要求有符号解释,否则假定输入都是无符号位向量:
| 端口 | 宽度 | 方向 | 含义 |
|---|---|---|---|
A | 4 | 输入 | 第一操作数 |
B | 4 | 输入 | 第二操作数 |
OP | 3 | 输入 | 操作选择 |
Y | 4 | 输出 | 选定结果 |
C | 1 | 输出 | ADD 的进位;SUB 的借位 |
Z | 1 | 输出 | Y == 0000 时为 1 |
N | 1 | 输出 | Y[3] |
V | 1 | 输出 | ADD 或 SUB 的有符号溢出 |
一种可行的操作映射是:
OP | 功能 | 定义 |
|---|---|---|
000 | ADD | |
001 | SUB | |
010 | AND | 逐位 |
011 | OR | 逐位 |
100 | XOR | 逐位 |
101 | NOT A | |
110 | 逻辑左移 | 零进入第 0 位 |
111 | 逻辑右移 | 零进入第 3 位 |
这是一份教学规格,而不是标准编码。真实指令集可能会把移位、乘法、地址生成与比较分配到其他执行单元,也可能包含能力不同的多套 ALU。
这里描述的 ALU 没有内部状态。输入变化后,信号传播过组合网络,输出随之稳定。操作数寄存器、目的寄存器和标志寄存器都是独立的时序元件。
模块一:一只加法器完成加法与减法
波纹进位加法器连接四级全加器。对于第 位:
使用控制位 SUB 变换 B 与初始进位:
当 SUB=0 时,网络计算 。当 SUB=1 时,它计算:
加法器的最终进位输出随操作而有不同解释:
- ADD 之后, 表示无符号和超过 15;
- SUB 之后, 表示无符号减法无需借位。
DigiSim ALU 在 ADD 后将未反相的进位输出作为 C,在 SUB 后则输出其反相值:
因此,减法后 C=1 表示无符号减法发生了借位()。结果位仍由同一个模 加法产生,改变的只是标志极性。
溢出并不等于进位
有符号溢出针对的是二进制补码范围 到 ,进位针对的则是无符号范围 0 到 15。
对于加法:
对于减法:
对于这套加/减器,也可以写成 。把 C 与 V 分开,才能让同样的四个结果位正确支持无符号与有符号解释。
模块二:并行逐位逻辑
每条位通道独立计算其逻辑:
在概念实现中,四条候选总线全部并行存在。综合工具可以自由共享项、把功能映射到查找表,或选择复合标准单元。“每位一只门”描述的是布尔结构,并不能保证晶体管数量或物理延迟。
逐位功能没有跨字进位依赖,但它们选中的结果仍需穿过逻辑门、布线与输出多路选择器,因此并不是瞬间完成。
模块三:移位
固定移动一个位置的逻辑移位可以直接表示为布线:
SHL(A): Y3=A2, Y2=A1, Y1=A0, Y0=0
SHR(A): Y3=0, Y2=A3, Y1=A2, Y0=A1
如果 ISA 如此规定,被移出的比特可以保留为进位候选:
SHL carry candidate = A3
SHR carry candidate = A0
算术右移只有最高位不同:它把 A3 复制到 Y3,从而扩展符号。可变距离移位需要桶形移位器等可选择路由网络;固定左移或右移一位则不需要。
模块四:结果多路选择器
输出多路选择器赋予 OP 含义。概念上:
case OP
000: Y = arithmetic_sum
001: Y = arithmetic_difference
010: Y = bitwise_and
011: Y = bitwise_or
100: Y = bitwise_xor
101: Y = bitwise_not_a
110: Y = shift_left
111: Y = shift_right
在四位实现中,可以为每个结果位绘制一只 8 选 1 多路选择器。在可编程逻辑中,它可能映射到查找表与路由资源;在 ASIC 中,则可能实现为多路选择单元、AOI/OAI 结构,或由综合选择的其他因式分解网络。
结果选择属于关键时序路径:
这个表达式是设计估算,而不是签核方程。物理时序取决于单元、扇出、布线、电压、温度与具体实现。
结果标志
选中的 Y 值会产生两个与操作无关的候选信号:
C 与 V 则取决于操作。适用于这套教学 ALU 的一致策略如下:
| 操作 | C | V |
|---|---|---|
| ADD | 最终进位输出 | 加法溢出 |
| SUB | 借位(),即最终进位输出的反相值 | 减法溢出 |
| SHL | 从最高有效位移出的比特 | 0 |
| SHR | 从最低有效位移出的比特 | 0 |
| AND/OR/XOR/NOT | 0 | 0 |
另一种设计可以在逻辑操作期间保留 C 与 V,而不是清零。这属于 ISA 与控制策略选择。组合 ALU 可以提供候选信号,由时钟驱动的标志寄存器决定装载、保留或选择性更新哪些存储位。
符号标志 N 是结果最高有效位,但减法后不能只凭它正确判断有符号小于关系:应使用 补偿有符号溢出。
4 位计算示例
6 - 3
A = 0110
B = 0011
~B = 1100
A + ~B+1 = 1 0011
保存的结果为 0011(3)。未反相的进位输出为 1,因此没有发生借位,DigiSim 按借位编码的 C 输出为 0:
Y=0011, Z=0, C=0, N=0, V=0
3 - 6
A = 0011
B = 0110
A + ~B+1 = 0 1101
1101 作为无符号数是 13,作为有符号数是 -3。未反相的进位输出为 0,因此无符号减法发生了借位,C 为 1:
Y=1101, Z=0, C=1, N=1, V=0
7 + 1
0111 + 0001 = 1000
没有无符号进位,但 +8 无法装入 4 位有符号二进制补码:
Y=1000, Z=0, C=0, N=1, V=1
15 + 1
1111 + 0001 = 1 0000
无符号结果回绕并产生进位。作为有符号算术,-1 + 1 = 0 是有效结果:
Y=0000, Z=1, C=1, N=0, V=0
最后两组向量证明 C 与 V 并不是同一信号的别名。
ALU 位于 CPU 的什么位置
一条小型单周期数据通路可以按如下顺序工作:
- 源寄存器给出 A 与 B;
- 控制单元选择
OP; - ALU 与标志生成逻辑稳定;
- 目的寄存器在有效时钟边沿捕获 Y;
- 如果使能,标志寄存器捕获选定的状态位。
最高时钟频率取决于最长的完整寄存器到寄存器路径,而不只取决于 ALU。该路径可能包含寄存器时钟到 Q 延迟、操作数选择、ALU 逻辑、结果路由、目的寄存器建立时间、时钟不确定性与偏斜。ALU 可能是关键路径,但在另一种微架构中,缓存访问、旁路网络、译码或其他逻辑也可能占主导。
优化加法器并不会自动让系统频率等比例提升。只有布局布线后该路径确实构成瓶颈,并且恢复的裕量没有被其他部分消耗时,优化才会带来收益。完整时序背景可参阅传播延迟与时钟偏斜。
74181:一个历史参照
4 位 74181 系列是很有价值的示例,因为它的接口明确暴露功能选择、模式选择、进位输入、进位输出与组进位信号。它支持一组算术和逻辑功能,并可借助超前进位支持组合成更宽字长。
不应把它当作现代 CPU 的晶体管级蓝图。现代处理器可能使用多个专用整数执行单元、独立的向量与浮点数据通路、分布式分支比较逻辑,以及实现相关的加法器结构。持续不变的是体系结构模式:变换操作数字、选择结果,并报告定义精确的状态信息。
构建并验证 4 位版本
可以把 DigiSim 的 8 位 ALU 模板作为更大的参考,也可以直接搭建四位接口:
- 使用
B XOR SUB与c0=SUB构建四级加/减器。 - 添加并行 AND、OR、XOR 与 NOT 通道。
- 连接逻辑移位;如果 C 需要使用被移出的比特,则予以保留。
- 用一个八路四位多路选择器选择结果。
- 从选定结果生成 Z,从其最高有效位生成 N。
- 按照操作表选择 C 与 V。
- 探测 A、B、OP、Y、C、Z、N 与 V。
先用普通数值验证每一个操作码,再针对边界情况测试:
- 零结果;
- 全 1 加一;
- 最大有符号正数加一;
- 最小有符号负数减一;
- 发生借位与不发生借位的减法;
- 移出位为 1 的左移与右移;
- 在不同操作类别之间切换时的标志行为。
功能仿真器能够验证真值表与控制顺序,却无法证明物理芯片的最高频率、模拟亚稳态行为,或工艺及环境角落下的时序。
数据通路工作后,把它连接到时钟驱动的 CPU 标志寄存器与分支译码器。组合计算从这一刻成为持久的体系结构状态,并能够改变程序计数器的方向。



