首页/计算机组成原理/02-data-representation/算术逻辑单元ALU 🔗 在 Obsidian 中打开
计算机组成原理 · 02-data-representation

算术逻辑单元ALU

难度 ★★★重要度 ★★★★ 考查频率 低 加法器并行进位74181运算器
速查
ALU 是 CPU 核心运算部件,执行算术逻辑运算;74181 为 4 位 ALU 芯片(16 种算术/逻辑运算);进位链有串行进位并行进位(先行进位)两种。

速查

项目
功能算术运算 + 逻辑运算
741814 位 ALU 芯片,16 种算术/逻辑运算
进位链串行进位 / 并行进位(先行进位)

概述

ALU(Arithmetic Logic Unit)是 CPU 的核心运算部件,负责执行算术运算(加减乘除)和逻辑运算(与或非异或)。ALU 的设计直接影响 CPU 的性能。

ALU 的基本功能

算术运算

  • 加法、减法
  • 加 1、减 1
  • 取负(求补)
  • 乘法、除法(通常由专门的乘除法器实现)

逻辑运算

  • 与(AND)、或(OR)、非(NOT)、异或(XOR)
  • 移位操作(左移、右移、循环移位)

ALU 的输入输出

输入:操作数A、操作数B、功能选择信号(ALUop)
输出:运算结果F、标志位(CF/ZF/OF/SF)

标志位(Flags)

标志位名称含义
CF进位/借位标志无符号运算溢出
ZF零标志结果为 0
OF溢出标志有符号运算溢出
SF符号标志结果为负(最高位为 1)

加法器

全加器(Full Adder, FA)

输入:Ai, Bi, Ci(进位输入)
输出:Si(和), Ci+1(进位输出)

Si = Ai ⊕ Bi ⊕ Ci
Ci+1 = Ai·Bi + (Ai⊕Bi)·Ci

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

C0 → FA0 → C1 → FA1 → C2 → ... → Cn
特点:进位逐级传递,速度慢
延迟:O(n),n为位数

并行进位加法器(先行进位/超前进位)

基本思想

  • 同时计算所有进位信号,避免逐级等待
  • 定义两个辅助函数:
    • $Gi = Ai\cdot Bi$(进位生成信号)
    • $Pi = Ai⊕Bi$(进位传递信号)

进位公式

C1 = G0 + P0·C0
C2 = G1 + P1·C1 = G1 + P1·G0 + P1·P0·C0
C3 = G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0
...
所有进位可以同时计算!延迟仅O(1)(理论上)

实际实现

  • 4 位一组使用超前进位(CLA)
  • 组间使用两级超前进位
  • 74181 就是 4 位 ALU + 超前进位的典型芯片

74181 ALU

功能

  • 4 位并行 ALU
  • 能执行 16 种算术运算和 16 种逻辑运算
  • 有进位输入 Cn 和进位输出 Cn+4

配合 74182 超前进位发生器

  • 74182 提供组间超前进位
  • 可级联多个 74181 实现 16 位、32 位 ALU

运算器的组织方式

总线结构

A总线 ──→ ┌────────┐
           │  ALU   │ ──→ 结果总线
B总线 ──→ └────────┘
           ↑
        功能选择

专用数据通路

  • ALU 直接连接寄存器堆
  • 不经过总线,速度更快

ALU 设计的关键考虑

速度优化

  1. 超前进位(最常用)
  2. 组间超前进位
  3. 流水线化 ALU
  4. 多级流水线乘法器

功耗优化

  1. 门控时钟
  2. 操作数隔离
  3. 动态电压频率调节

定点乘法器

串行乘法器

  • 逐位处理,需要 n 个时钟周期
  • 面积小,速度慢

阵列乘法器

  • 所有部分积同时生成
  • 用加法器阵列求和
  • 速度快,面积大

Booth 乘法器

  • 减少部分积数量
  • 对连续的 1 编码,减少加法次数

定点除法器

恢复余数法

  • 每步试减,不够减则恢复
  • 速度慢

不恢复余数法

  • 不够减时不恢复,下一步加回来
  • 速度更快

SRT 除法

  • 每步商多位(非 1 位)
  • 高性能处理器常用

浮点运算单元(FPU)

结构

浮点加法器:对阶→加法→规格化→舍入
浮点乘法器:指数相加,尾数相乘→规格化→舍入
浮点除法器:指数相减,尾数相除→规格化→舍入

流水线化

  • 现代 CPU 的 FPU 通常多级流水线
  • 支持单周期吞吐(多周期延迟)

易错点

必记
  1. 超前进位不能完全消除延迟,只是减少到 O(log n)
  2. 74181 是 4 位 ALU,不是完整的 CPU
  3. CF 是无符号溢出,OF 是有符号溢出,两者独立
  4. 减法通过加法器实现:$A-B = A + (~B) + 1$
  5. 浮点加法器比浮点乘法器复杂(需要对阶和规格化)
  6. ALU 不只做加法,还做逻辑运算和移位

交互动画 · 串行进位 vs 并行进位

C0 FA0 FA1 FA2 FA3 C4 CLA 先行进位
选择一种进位方式,观察进位信号如何传递到各个全加器
串行进位:进位逐级传递,延迟 O(n);并行进位:所有进位同时计算,延迟约 O(1)

相关知识点

fixed-point-arithmetic number-conversion-and-bcd

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。