逻辑与计算机系统设计
合并九章数字系统笔记与复习补充,从逻辑门、编码和运算器到存储系统、指令与 CPU。
把同一课程目录中的笔记放在一起,沿着“信息如何表示—逻辑如何实现—数据如何运算和存取—CPU 如何执行指令”的路线阅读。课程中的简化模型会注明适用条件。
第1章 · 数字系统与信息
知识结构
第1章 · 数字系统与信息
├── 数字系统:处理离散量的电子系统
│ ├── 三特征:离散性、抗干扰性、可复现性
│ └── vs 模拟系统:连续 vs 离散
├── 信号类型
│ ├── 模拟信号:时间+幅值均连续
│ ├── 数字表示使用离散符号;不能据此一概断言实际电压波形的时间也离散
│ └── ADC/DAC:采样→量化→编码
│ └── 采样定理:带限与理想重建条件下 fs > 2fmax
├── 信息论基础
│ ├── 自信息量:I = −log₂P
│ ├── 信息熵:H = −Σ P·log₂P
│ └── 固定有限字母表下等概率时熵最大;编码效率还取决于具体编码方案
└── 数制回顾:r进制 = Σ aᵢ×rⁱ一、数字 vs 模拟
| 维度 | 数字系统 | 模拟系统 |
|---|---|---|
| 信号 | 离散(0/1) | 连续(电压/电流) |
| 抗干扰 | 强 | 弱 |
| 精度 | 可通过位宽扩展,但受实现成本和物理条件限制 | 受器件限制 |
| 复制 | 无损 | 逐次劣化 |
| 编程 | 天然适合 | 困难 |
🔑 在正确判决逻辑电平、满足时序和噪声容限的前提下,数字表示便于复制和处理,精度可通过位宽扩展。
二、ADC/DAC
ADC 三步
采样 → 量化 → 编码采样定理 (Nyquist-Shannon)
CD音质:fmax≈20kHz → fs=44.1kHz
逻辑电平(典型 5 V TTL 输入阈值示例)
| 逻辑值 | 电压 |
|---|---|
| 0 (L) | 0~0.8V |
| 1 (H) | 2.0~5.0V |
| 逻辑不保证区间 | 0.8~2.0V |
三、信息论基础
自信息量
- P=1/2 → I=1 bit(等概率的0/1事件)
- P→1 → I→0(确定事件无信息)
信息熵
- 等概率→H最大(不确定性最大)
- 熵 = 无损压缩的理论极限
- n位数字信号最多携带 n bit 信息
四、考点速查
| 考点 | 核心 |
|---|---|
| 数字vs模拟 | 离散vs连续; 抗干扰/可复制/精度可扩展 |
| 采样定理 | 带限信号采样需满足条件,通常取 fs > 2×fmax |
| 逻辑电平 | TTL: 0=0 |
| 自信息量 | I=−log₂P |
| 信息熵 | H=−ΣPlog₂P; 等概率最大 |
第2章 · 逻辑代数
知识结构
第2章 · 逻辑代数
├── 基本运算:AND(·) / OR(+) / NOT(⁻)
├── 复合门:NAND / NOR / XOR(⊕) / XNOR(⊙)
│ └── NAND和NOR是万能门
├── 布尔代数定律
│ ├── 交换/结合/分配律
│ ├── 吸收律:A+AB=A, A(A+B)=A, A+ĀB=A+B
│ ├── De Morgan:¬(A+B) = Ā·B̄, ¬(A·B) = Ā+B̄
│ └── 冗余律:AB+ĀC+BC = AB+ĀC
├── 表示方法
│ ├── SOP(与项之和;标准式是最小项之和):F = Σm(1处编号)
│ ├── POS(或项之积;标准式是最大项之积):F = ΠM(0处编号)
│ └── 真值表/表达式/卡诺图/逻辑图
├── 对偶 vs 反演
│ ├── 对偶:仅换·↔+ 和 0↔1
│ └── 反演:换·↔+、0↔1、变量取反
└── 卡诺图化简
├── 格雷码排列 → 物理相邻=逻辑相邻
├── 圈大、圈少、矩形、边界相邻
└── 无关项×可作0或1扩大圈一、基本逻辑门
| 门 | 表达式 | 口诀 | 特色 |
|---|---|---|---|
| AND | F=A·B | 有0出0 | |
| OR | F=A+B | 有1出1 | |
| NOT | F=Ā | 取反 | |
| NAND | F=¬(A·B) | 全1出0 | 万能门 |
| NOR | F=¬(A+B) | 全0出1 | 万能门 |
| XOR | F=A⊕B=AB̄+ĀB | 同0异1 | 半加器 |
| XNOR | F=A⊙B=AB+ĀB̄ | 同1异0 | 等值比较 |
🔑 NAND/NOR 万能性: 只用 NAND(或只用 NOR)可实现任意逻辑函数。集成电路工艺的核心价值。
二、布尔代数核心定律
| 定律 | 公式 |
|---|---|
| 吸收律 | A+AB=A; A(A+B)=A; A+ĀB=A+B |
| De Morgan | ¬(A+B) = Ā·B̄; ¬(A·B) = Ā+B̄ |
| 冗余律 | AB+ĀC+BC = AB+ĀC |
🔑 De Morgan: 长杠变短杠,加变乘、乘变加。最常用的电路变换工具。
三、对偶 vs 反演(易混淆!)
| 运算符 | 常量 | 变量 | 结果 | |
|---|---|---|---|---|
| 对偶 | ·↔+ | 0↔1 | 不变 | 对偶式 |
| 反演 | ·↔+ | 0↔1 | 取反 | 反函数 F̄ |
四、SOP vs POS
| SOP | POS | |
|---|---|---|
| 形式 | 与项之和,标准式用最小项 | 或项之积,标准式用最大项 |
| 符号 | F=Σm(1处编号) | F=ΠM(0处编号) |
| 选用 | 1少时 | 0少时 |
五、卡诺图化简规则
- 圈住所有 1(至少一次)
- 圈尽可能 大(2,4,8,16…方格)
- 圈数尽可能 少
- 矩形,可重复覆盖
- 边界相邻(上↔下、左↔右、四角)
- 无关项× 可自由当0或1来扩大圈
🔑 卡诺图中变量既0又1→消去;全0→反变量;全1→原变量。
六、考点速查
| 考点 | 核心 |
|---|---|
| 基本门 | AND/OR/NOT/NAND/NOR/XOR/XNOR真值表 |
| NAND/NOR万能性 | 只用一种门可实现所有逻辑 |
| De Morgan | ¬(A+B)=Ā·B̄, ¬(A·B)=Ā+B̄ |
| 对偶vs反演 | 对偶只换算符,反演还翻变量 |
| SOP/POS | Σm vs ΠM; 选1少或0少的方向 |
| 卡诺图 | 圈大圈少矩形,边界相邻,×作1扩大圈 |
第3章 · 数据表示
知识结构树
第3章 · 数据表示
├── 数制与编码
│ ├── 进制转换(二/八/十/十六)
│ └── 进位计数制原理(基数×位权)
├── 常见编码方案
│ ├── 8421码 → 有权码,直观,需+6修正
│ ├── 2421码 → 权值可有歧义;选定 Aiken 码表后每个数字有确定码字,对9自补
│ └── 余3码 → 无权码,=8421+0011,对9自补
├── 可靠性编码
│ ├── 格雷码 → 相邻仅1位变,Gᵢ = Bᵢ₊₁ ⊕ Bᵢ
│ ├── 奇偶校验 → 码距=2,检奇错
│ ├── 汉明码 → 可纠1位错,校验位在2ᵏ位
│ └── CRC → 模2除法,生成多项式
└── 机器数值表示
├── 定点数 → 原码/反码/补码
├── 标志位 → OF/CF/SF/ZF
└── 浮点数 → IEEE 754(S+E+M)一、数制与编码
1.1 进位计数制
- r = 基数,rⁱ = 位权
- 二进制 r=2,八进制 r=8,十进制 r=10,十六进制 r=16
1.2 进制转换速查
| 方向 | 方法 | 示例 |
|---|---|---|
| r→10 | 按权展开求和 | (1011.01)₂ = 8+2+1+0.25 = 11.25 |
| 10→r(整数) | 除r取余,逆序 | 13÷2 → 1101 |
| 10→r(小数) | 乘r取整,顺序 | 0.375×2 → 0.011 |
| 2↔8 | 每3位一组 | (10110101)₂ → (265)₈ |
| 2↔16 | 每4位一组 | (10110101)₂ → (B5)₁₆ |
🔑 重点: 十六进制 1 位 = 4 位二进制,1 字节 = 8 位 = 2 个十六进制位。
二、常见编码方案
2.1 三种 BCD 码对照
| 十进制 | 8421码 | 2421码 | 余3码 |
|---|---|---|---|
| 0 | 0000 | 0000 | 0011 |
| 1 | 0001 | 0001 | 0100 |
| 2 | 0010 | 0010 | 0101 |
| 3 | 0011 | 0011 | 0110 |
| 4 | 0100 | 0100 | 0111 |
| 5 | 0101 | 1011 | 1000 |
| 6 | 0110 | 1100 | 1001 |
| 7 | 0111 | 1101 | 1010 |
| 8 | 1000 | 1110 | 1011 |
| 9 | 1001 | 1111 | 1100 |
2.2 核心特性对比
| 特性 | 8421码 | 2421码 | 余3码 |
|---|---|---|---|
| 有权/无权 | 有权(8,4,2,1) | 有权(2,4,2,1) | 无权 |
| 单值性 | ✅ 唯一 | 权值表示可有歧义,实际编码需指定码表 | ✅ 唯一 |
| 对9自补 | ❌ | ✅ | ✅ |
| 无效状态 | 1010~1111 | 0101~1010 | 0000 |
| 加法修正 | 低四位大于9或产生十进制修正所需进位时加6 | — | 有进位+0011,无进位-0011 |
🔑 重点:
- 8421码的 +6 修正原理:4位二进制模16,BCD模10,差值为6
- 2421码的对9自补:按位取反 → 9−原值
- 余3码 = 8421码 + 0011,也对9自补
三、可靠性编码
3.1 码距
定义: 同一编码体系中任意两个合法码之间,不同位的最小个数。
| 码距 d | 检错能力 | 纠错能力 |
|---|---|---|
| 1 | ❌ 无法检错 | ❌ |
| 2 | 检 1 位错 | ❌ |
| 3 | 检 2 位错 | ✅ 纠 1 位错 |
| 4 | 检 3 位错 | 纠 1 位 + 检 2 位 |
通式:检错 d−1 位,纠错 ⌊(d−1)/2⌋ 位。
3.2 格雷码(Gray Code)
核心性质: 相邻两数之间,仅 1 位不同。
二进制 → 格雷码:
格雷码 → 二进制:
🔑 为什么重要: 数字电路中,二进制多位同时翻转会产生竞态中间态(如 0111→1111→1000)。格雷码每次只变 1 位,减少多位同时变化带来的中间码风险,不能据此保证整个电路无冒险。
典型应用: 旋转编码器、卡诺图、异步 FIFO。
3.3 奇偶校验
| 奇校验 | 偶校验 | |
|---|---|---|
| 1的个数 | 奇数 | 偶数 |
| 校验位 | P = D₀⊕D₁⊕…⊕Dₙ₋₁⊕1 | P = D₀⊕D₁⊕…⊕Dₙ₋₁ |
| 能力 | 检奇数位错 | 检奇数位错 |
| 局限 | 偶数位错漏检 | 偶数位错漏检 |
💡 注意: 码距 = 2,只能检错不能纠错。但硬件开销极小(仅一个异或门链)。
3.4 汉明码(Hamming Code)
定位原理: 校验位放在 2ᵏ 位置,按位号二进制分组。接收端重新计算,错误位号 = 失败校验组号之和。
🔑 核心公式(n 位数据,k 位校验): 2ᵏ ≥ n + k + 1
3.5 CRC 校验
流程: 数据 D(k 位) → 左移 r 位 → 模2除以 G(x) → 余数 R 即为 CRC 校验码
🔑 模2加减法 = 异或运算(无进位/借位)。
四、机器级数值表示
4.1 三种定点数编码对比
| 原码 | 反码 | 补码 | |
|---|---|---|---|
| 正数 | 符号0+绝对值 | 同原码 | 同原码 |
| 负数 | 符号1+绝对值 | 绝对值按位取反 | 反码+1 |
| 零的个数 | 2个(±0) | 2个(0000/1111) | 1个(仅0000) |
| 8位范围 | -127~+127 | -127~+127 | -128~+127 |
| 符号位参与运算 | ❌ | 需循环进位 | ✅ |
| 加减法统一 | ❌ | ❌ | ✅ |
🔑 补码的实用优势: 零唯一、符号参与运算、加法减法同一电路 → 常见通用计算机的有符号整数表示采用补码;这里讨论固定字长整数。
4.2 补码核心公式
快速求补: 从右向左找第一个1,该位不变,左方全取反。
4.3 四个标志位
| 标志 | 含义 | 判断 |
|---|---|---|
| SF | 符号标志 | = 结果最高位 |
| ZF | 零标志 | 结果 = 0? |
| OF | 有符号溢出 | Cₙ⊕Cₙ₋₁ 或 正+正=负 / 负+负=正 |
| CF | 无符号进位/借位 | 超出 0~2ⁿ-1 |
4.4 OF 溢出检测三种方法
- 符号位法:
- 进位位法:
- 双符号位法:
💡 注意: OF 看有符号,CF 看无符号,各自独立!
五、IEEE 754 浮点数
5.1 单精度(32位)结构
┌────┬──────────┬─────────────────────────┐
│ S │ E(8) │ M(23) │
│1位 │ 偏移127 │ 隐含1.xxxx │
└────┴──────────┴─────────────────────────┘5.2 特殊值编码
| E | M | 含义 |
|---|---|---|
| 全0 | 全0 | ±0 |
| 全0 | 非0 | 非规格化数(隐含位=0,值=0.M×2⁻¹²⁶) |
| 1~254 | 任意 | 规格化数(隐含位=1) |
| 全1 | 全0 | ±∞ |
| 全1 | 非0 | NaN(非数值) |
5.3 计算流程
例:-6.625 → IEEE 754
- S = 1(负)
- 6.625 = 110.101₂
- 规格化:1.10101 × 2²
- E = 2 + 127 = 129 = 10000001₂
- M = 1010100…0(隐含1不存)
- 结果:
1 10000001 10101000000000000000000
🔑 隐含位设计精妙之处: 规格化后整数部分恒为1 → 不存储 → 白白多1位精度。
💡 浮点精度陷阱: 0.1+0.2≠0.3,需要精确十进制语义时应选用适当的数值表示,大数吃小数(1e20+1-1e20=0)。
六、考点速查表
| 考点 | 核心 |
|---|---|
| 进制转换 | 整数除r取余逆序,小数乘r取整顺序,二↔十六分组 |
| BCD编码 | 8421有权+6修正,2421自补,余3=8421+3自补 |
| 格雷码 | Gₙ₋₁=Bₙ₋₁,Gᵢ=Bᵢ₊₁⊕Bᵢ,相邻仅1位变 |
| 码距 | 检d-1位错,纠⌊(d-1)/2⌋位错 |
| 补码 | 负数取反+1,范围-2ⁿ⁻¹~2ⁿ⁻¹-1,零唯一 |
| 溢出OF | 正+正=负,负+负=正,Cₙ⊕Cₙ₋₁,双符号位异或 |
| IEEE 754 | S+E+M,偏移127/1023,隐含1,阶全0非规格,阶全1特值 |
| CRC | 模2除法,余数为校验码,生成多项式决定检错能力 |
- BCD三兄弟:八四二一有权直观,二四二一自补不单,余三无权加三也补
- 溢出:正正得负溢,负负得正溢,正负永不溢
- 补码:正照抄,负取反加一
- 浮点:一符二阶三尾,隐含不存白赚精度
第4章 · 组合逻辑电路设计
知识结构树
第4章 · 组合逻辑电路设计
├── 概述:输出仅取决于当前输入(无记忆)
├── 分析方法:逐级推导→表达式→真值表→功能
├── 设计方法
│ ├── 真值表 → 表达式 → 卡诺图化简 → 电路图
│ ├── 最小项(mᵢ)与最大项(Mᵢ)
│ ├── 卡诺图(≤6变量,格雷码排列,圈1/圈0)
│ └── 无关项(Don't Care)利用
├── MSI组合器件
│ ├── 译码器(n→2ⁿ): 74LS138, 实现任意函数
│ ├── 编码器(2ⁿ→n): 74LS148优先编码器
│ ├── MUX(2ⁿ选1): 香农展开,LUT原理
│ ├── DEMUX(1→2ⁿ)
│ ├── 加法器:半加/全加/RCA/CLA
│ └── 比较器:74LS85
└── 竞争与冒险
├── 静态/动态冒险
├── 卡诺图检测(相切)
└── 消除(冗余项/选通/滤波)一、组合逻辑基本概念
1.1 定义
组合逻辑电路: 任意时刻输出仅取决于该时刻输入,与电路过去状态无关。无反馈、无存储。
| 组合逻辑 | 时序逻辑(第6章) | |
|---|---|---|
| 输出 | = f(当前输入) | = f(当前输入, 当前状态) |
| 记忆 | ❌ | ✅(触发器) |
| 反馈 | ❌ | ✅ |
1.2 分析步骤
① 逐级写出每个门输出的逻辑表达式
② 化简得到最简表达式
③ 列出所有输入组合的真值表
④ 从真值表归纳逻辑功能二、逻辑函数的表示方法
2.1 四种等价表示
| 方法 | 用途 |
|---|---|
| 真值表 | 最直观,设计起点 |
| 逻辑表达式 | 代数化简与推导 |
| 卡诺图 | 图形化简(≤6变量) |
| 逻辑图 | 最终电路实现 |
2.2 最小项与最大项
- 最小项 mᵢ: n 变量的与项,每个变量恰好出现一次(原或反)。函数 = Σm(函数值为1的编号)
- 最大项 Mᵢ: n 变量的或项。Mᵢ = m̄ᵢ。函数 = ΠM(函数值为0的编号)
🔑 关键: 标准 SOP 可写为 Σm,标准 POS 可写为 ΠM;一般 SOP/POS 不要求每项包含所有变量。可分别考察圈 1 或圈 0 的化简结果,再比较实现成本。
2.3 卡诺图化简规则
- 圈住所有 1(至少被圈一次)
- 圈尽可能 大(2,4,8,16…个方格)
- 圈数尽可能 少
- 圈必须是 矩形,可重复覆盖
- 注意 边界相邻(最左↔最右、最上↔最下)
- 无关项 × 可视为 1 来扩大圈(非必须覆盖)
2.4 蕴含项层次
| 概念 | 定义 |
|---|---|
| 蕴含项 | 能使函数为1的与项 |
| 质蕴含项(PI) | 不能再扩大的圈 |
| 必要质蕴含项(EPI) | 包含独有1的圈(必选) |
💡 最简 SOP = 所有 EPI + 最少量的其他 PI
三、常用 MSI 组合器件
3.1 译码器 (Decoder, n→2ⁿ)
- 74LS138 (3-8译码器):3位输入 → 8路低有效输出
- 对低有效 74LS138,启用时各输出对应最小项的反相;正逻辑译码器的相应高有效输出才直接对应最小项
🔑 通用函数实现: n-2ⁿ 译码器 + 一个多输入门 = 任意 n 变量组合逻辑函数。
3.2 编码器 (Encoder, 2ⁿ→n)
- 普通编码器: 至多一个输入有效
- 优先编码器 (74LS148): 多个输入有效→输出优先级最高的编号
3.3 多路选择器 (MUX, 2ⁿ选1)
- 2ⁿ路数据 + n 位选择线 → 1 路输出
- 香农展开: F = x̄F(0) + xF(1),可递归应用
- LUT 原理: 任意 n 变量函数可用 2ⁿ⁻¹选1 MUX 实现:n−1 个变量接选择端,数据端按剩余变量接 0、1、该变量或其反相
3.4 加法器
| 类型 | 输入 | S(和) | C(进位) |
|---|---|---|---|
| 半加器 HA | A, B | A⊕B | AB |
| 全加器 FA | A, B, Cᵢₙ | A⊕B⊕Cᵢₙ | AB + (A⊕B)Cᵢₙ |
行波进位 (RCA)
n 个 FA 级联,进位逐位传递。延迟 = O(n),面积小。
超前进位 (CLA)
并行计算进位,延迟 = O(log n)。
展开:
- C₁ = G₀ + P₀C₀
- C₂ = G₁ + P₁G₀ + P₁P₀C₀
- C₃ = G₂ + P₂G₁ + P₂P₁G₀ + P₂P₁P₀C₀
- C₄ = G₃ + P₃G₂ + P₃P₂G₁ + P₃P₂P₁G₀ + P₃P₂P₁P₀C₀
加减法统一
🔑 B ⊕ Add/Sub + Add/Sub 作为 C₀:
- Add/Sub=0:A + B
- Add/Sub=1:A + B̄ + 1 = A − B
3.5 比较器 (74LS85)
从最高位开始逐位比较,高位不等直接出结果。
四、竞争与冒险
4.1 概念
| 概念 | 含义 |
|---|---|
| 竞争 (Race) | 信号到达时间有先后 |
| 静态冒险 | 输出本应不变,却出现尖峰脉冲 |
| 动态冒险 | 输出本应变一次,却变多次 |
4.2 检测与消除
- 卡诺图检测: 两个相邻 1 圈"相切"(无公共 PI 覆盖)→ 有静态-1 冒险
- 消除方法:
- 添加冗余桥接圈(最常用)
- 选通法(同步系统等稳定后采样)
- 输出端并联电容(低速电路)
💡 同步系统中,满足建立/保持时间且毛刺不影响时钟、异步控制等敏感路径时,可在稳定后的时钟沿采样;异步电路中毛刺是致命的。
五、考点速查表
| 考点 | 核心 |
|---|---|
| 组合逻辑分析 | 逐级表达式→真值表→功能描述 |
| 卡诺图化简 | 圈大矩相邻,边界也相邻,无关项可任意取 |
| 译码器 | n-2ⁿ + 门 = 任意函数(需区分输出有效电平) |
| MUX | 香农展开,n变量→2ⁿ⁻¹选1 MUX(LUT原理) |
| 全加器 | S=A⊕B⊕Cᵢₙ, Cₒᵤₜ=AB+(A⊕B)Cᵢₙ |
| CLA | G=A·B, P=A⊕B, Cₙₑₓₜ=G+P·C |
| 加减法统一 | B⊕控制 + 控制作C₀ |
| 竞争冒险 | 卡诺图相切=冒险,加冗余圈消除 |
- 分析四步走,设计五步走
- 半加异或与,全加三异或三与或
- RCA 串糖葫芦慢,CLA 并排算得快
- 卡诺圈不相切不出险,冗余桥接毛刺消
第5章 · 运算方法与运算器
知识结构树
第5章 · 运算方法与运算器
├── 补码加减法
│ ├── [X+Y]补 = [X]补 + [Y]补
│ ├── [X−Y]补 = [X]补 + [−Y]补
│ └── 异或门控制:M=0→加, M=1→减
├── 溢出检测
│ ├── 符号位法:OF = XₙYₙS̄ₙ + X̄ₙȲₙSₙ
│ ├── 进位位法:OF = Cₙ ⊕ Cₙ₋₁
│ └── 双符号位法:OF = f₁ ⊕ f₂
├── 浮点加减法
│ └── 对阶→尾数±→规格化→舍入→判溢
├── 乘法
│ ├── 原码一位乘:累加右移 n 次
│ └── Booth算法:00/11右移, 01+X, 10−X
└── 除法
├── 恢复余数法:不够减则恢复
└── 不恢复余数法(加减交替)一、补码加减法
1.1 核心公式
其中 = 连同符号位取反,末位+1。
1.2 加减法统一电路
- B 经过 n 个异或门,控制信号 M:
- M=0 → B⊕0 = B →
- M=1 → B⊕1 = B̄ →
- M 同时作为加法器最低位进位 C₀
🔑 为什么用异或门: 能自由控制加法与减法。异或门 = 可控反相器。
二、溢出检测三种方法
| 方法 | 公式 | 说明 |
|---|---|---|
| 符号位法 | 同号相加异号出→溢出 | |
| 进位位法 | 最佳电路实现 | |
| 双符号位法 | 变形补码,f₁为真符号 |
🔑 口诀: 正正得负溢,负负得正溢,正负永不溢。
三、浮点加减法
3.1 五步流程
① 对阶 → ② 尾数加减 → ③ 规格化 → ④ 舍入 → ⑤ 判溢出3.2 关键规则
| 步骤 | 规则 |
|---|---|
| 对阶 | 小阶向大阶看齐,阶小尾右移阶+1(可能丢精度) |
| 规格化 | 尾数溢出→右规(阶+1);尾数首位0→左规(阶-1) |
| 舍入 | 0舍1入 / 恒置1 / 就近舍入;舍入→可能再次溢出→需再右规 |
3.3 IEEE 754 单精度表示回顾
💡 大阶向小阶看齐不可行: 大阶尾数左移会丢失高位,产生巨大误差。
四、乘法
4.1 原码一位乘法
- 符号:两数符号异或
- 数值:n 次"判末位→加被乘数(或0)→右移"
- 需要 n 次加法 + n 次移位
4.2 Booth 算法(补码一位乘)
不需要转换补码→原码,直接对补码操作。
| Yᵢ Yᵢ₋₁ | 操作 |
|---|---|
| 00 | 右移1位 |
| 01 | +[X]补,右移1位 |
| 10 | +[−X]补,右移1位 |
| 11 | 右移1位 |
- 附加位 Y₋₁ = 0(虚设在乘数右边)
- 部分积算术右移(高位补符号位)
- 常见实现用扩展位处理符号与中间部分积;两个 n 位数的完整乘积通常需 2n 位表示
🔑 核心洞察: 按表中相邻位模式决定加减,再执行算术右移;一串 1 的边界含义需与扫描方向一致。
4.3 两位 Booth
一次处理 2 位,每次考察 3 位 (Yᵢ₊₁YᵢYᵢ₋₁),操作:+0, ±X, ±2X。
五、除法
5.1 恢复余数法
- 余数 − 除数 → ≥0 商1保留,<0 商0恢复(+除数回去)
- 缺点:恢复步骤浪费
5.2 不恢复余数法(加减交替法)
| 上一步结果 | 操作 |
|---|---|
| 余数 ≥ 0(商1) | 余数左移1位 → 减除数 |
| 余数 < 0(商0) | 余数左移1位 → 加除数 |
🔑 口诀: 够减商1接着减,不够商0接着加。最后若余数<0需恢复。
六、考点速查
| 考点 | 核心 |
|---|---|
| 补码加减 | [X+Y]补=[X]补+[Y]补, 减法=加[-Y]补 |
| OF检测 | 正正负/负负正;Cₙ⊕Cₙ₋₁;f₁⊕f₂ |
| 浮点加减 | 对阶(小→大)→尾数±→规格化→舍入→判溢 |
| Booth | 附加位=0; 00/11移位; 01+X; 10−X; 算术右移 |
| 原码乘法 | 符号异或, 累加右移 n 次 |
| 加减交替除法 | 够减商1→减; 不够商0→加; 末余负则恢复 |
- 溢出:正正负负才溢出,正负相加永安全
- 浮点:对阶小向大,尾加小心溢,规格左或右,舍入再右规
- Booth:末位虚设零,两位一组判;零一开始加,一零结束减
- 除法:够减商一接着减,不够商零换成加
第6章 · 同步时序逻辑电路
知识结构树
第6章 · 同步时序逻辑电路
├── 概述:输出=f(输入,状态),有时钟,有反馈
├── 触发器
│ ├── RS:S置1 R置0,SR=1禁止
│ ├── D:Qⁿ⁺¹=D(最简单,寄存器首选)
│ ├── JK:Qⁿ⁺¹=JQ̄ⁿ+K̄Qⁿ(最全,有翻转)
│ └── T:Qⁿ⁺¹=T⊕Qⁿ(专用于计数)
├── Mealy vs Moore
│ ├── Mealy:Z=f(X,Q),弧线标X/Z
│ └── Moore:Z=f(Q),圈内标输出
├── 分析:激励→次态→输出→转移表→状态图
├── 设计:状态图→化简→编码→方程→逻辑图
├── 寄存器:D触发器阵列,74LS194
└── 计数器:同步/异步,模2ⁿ/任意模N一、触发器对比
| RS | D | JK | T | |
|---|---|---|---|---|
| 特征方程 | Qⁿ⁺¹=S+R̄Q (SR≠1) | Qⁿ⁺¹=D | Qⁿ⁺¹=JQ̄ⁿ+K̄Qⁿ | Qⁿ⁺¹=T⊕Qⁿ |
| 输入端 | S, R | D | J, K | T |
| 特色 | 有禁止态 | 最简单 | 翻转功能 | 专为翻转 |
| 用途 | 基础教学 | 寄存器 | 计数器 | 分频器 |
🔑 特征方程是核心: 激励方程 + 特征方程 → 次态方程 → 状态转移。
触发方式
| 方式 | 特点 |
|---|---|
| 电平触发(Latch) | 透明——有效电平期间输出跟随输入 |
| 边沿触发(Flip-Flop) | 在有效时钟沿采样,仍须满足建立/保持时间等时序要求 |
二、触发器转换
| 方向 | 电路 |
|---|---|
| D→T | D = T⊕Q |
| D→JK | D = JQ̄ + K̄Q |
| JK→D | J=D, K=D̄ |
| JK→T | J=T, K=T |
三、Mealy vs Moore
| Mealy | Moore | |
|---|---|---|
| 输出 | Z = f(X, Q) | Z = f(Q) |
| 毛刺 | 可能有(随输入异步变) | 输出只依赖状态;组合译码在状态位转换时仍可能产生毛刺 |
| 状态数 | 更少 | 可能更多 |
| 标注 | 弧线:X/Z | 状态圈内 |
四、分析五步法
① 写激励方程(每个触发器的输入信号表达式)
② 代入特征方程 → 次态方程
③ 写输出方程(Mealy/Moore)
④ 列状态转移表(遍历现态+输入)
⑤ 画状态图 → 描述功能五、设计五步法
① 画状态图(从功能需求出发)
② 状态化简(合并等价状态)
③ 状态分配(编码:二进制/格雷/独热)
④ 卡诺图求激励方程和输出方程
⑤ 画逻辑图编码方案对比
| 方案 | 触发器数 | 组合逻辑 | 适用 |
|---|---|---|---|
| 二进制 | ⌈log₂n⌉ | 可能复杂 | ASIC |
| 独热码 | n | 极简 | FPGA |
六、寄存器与计数器
74LS194 移位寄存器模式
| S₁S₀ | 模式 |
|---|---|
| 00 | 保持 |
| 01 | 右移 |
| 10 | 左移 |
| 11 | 并行加载 |
同步二进制加法计数器激励
🔑 任意模 N 计数器:反馈清零法(计到 N 清零)或反馈置数法。
七、考点速查
| 考点 | 核心 |
|---|---|
| D触发器 | Qⁿ⁺¹=D,寄存器基础 |
| JK触发器 | Qⁿ⁺¹=JQ̄+K̄Q,翻转功能 |
| T触发器 | Qⁿ⁺¹=T⊕Q,计数器基础 |
| 特征方程用法 | 激励代入特征→次态 |
| Mealy/Moore | 输出依赖/不依赖输入 |
| 同步计数器激励 | Tᵢ=ΠQ<ᵢ(低位全1才翻) |
| 时序分析 | 五步法,重点是次态→转移表 |
- 触发器:RS有禁止,D放数据,JK会翻转,T专计数
- Mealy vs Moore:Mealy看收入(输入),Moore看居住(状态)
- 计数器激励:低位全满高位翻
第7章 · 存储系统
知识结构树
第7章 · 存储系统
├── 概述:容量=字×位,存取时间,存储周期,带宽
├── 半导体存储器
│ ├── RAM (易失)
│ │ ├── SRAM: 6管触发器,快贵,Cache
│ │ └── DRAM: 1T1C电容,慢密需刷新,主存
│ └── ROM (非易失)
│ ├── Mask ROM / PROM / EPROM / EEPROM / Flash
│ └── 也可用于实现组合逻辑函数(查找表)
├── 存储器扩展
│ ├── 位扩展:并联(地址+控制共用,数据分开)
│ ├── 字扩展:译码器产生片选信号
│ └── 字位同时扩展
├── CPU连接:地址/数据/控制三总线
└── 存储层次结构
├── 寄存器 → Cache(SRAM) → 主存(DRAM) → 外存
├── 局部性原理(时间/空间)
└── Cache:映射方式、写策略、替换算法一、SRAM vs DRAM
| SRAM | DRAM | |
|---|---|---|
| 存储单元 | 6管触发器 | 1T+1C 电容 |
| 速度 | 通常用于较低延迟访问,具体取决于器件 | 通常容量较大,延迟取决于器件与系统 |
| 集成度 | 低 | 高 |
| 刷新 | ❌ | 需要刷新,周期随器件和温度条件而定 |
| 成本 | 贵 | 便宜 |
| 用途 | Cache | 主存 |
| 地址输入 | 一次性 | 分时复用 (RAS̄/CAS̄) |
🔑 DRAM 分时复用: 先送行地址(RAS̄),选中整行到感应放大器;再送列地址(CAS̄),选中具体位。行列矩阵排列,节省引脚。
DRAM 刷新方式
| 方式 | 特点 |
|---|---|
| 集中刷新 | 有"死区" |
| 分散刷新 | 存取周期翻倍 |
| 异步刷新 | 折中,最常用 |
二、ROM 类型
| 类型 | 写入 | 可重复 |
|---|---|---|
| Mask ROM | 出厂掩膜 | ❌ |
| PROM | 用户一次烧录 | ❌ |
| EPROM | 紫外线擦除+电写入 | ✅ |
| EEPROM | 电擦除(逐字节) | 可重复擦写,寿命依器件而异 |
| Flash | 电擦除(按块)+ 电写入 | 可重复擦写,寿命依器件而异 |
🔑 ROM = 查找表(输入地址→输出数据),可实现任意组合逻辑函数。
三、存储器扩展
位扩展(增加数据宽度)
多片并联:地址线+控制线共用,数据线各管几位。
1K×4 × 2片 → 1K×8
字扩展(增加地址空间)
高位地址→译码器→片选信号(CS̄),低位地址所有芯片共用。
1K×8 × 4片→译码器(高2位地址A₁₀A₁₁)→ 4个CS̄ → 4K×8
片选信号三种方法
| 方法 | 特点 |
|---|---|
| 线选法 | 简单,地址不连续,有重叠 |
| 全译码法 | 地址连续无重叠,最常用 |
| 部分译码法 | 折中,有少量重叠 |
四、存储层次结构
寄存器 (~1ns, ~KB)
↓
Cache/SRAM (~几ns, ~MB)
↓
主存/DRAM (~几十ns, ~GB)
↓
外存/SSD (~μs~ms, ~TB)局部性原理
| 类型 | 含义 | 利用方式 |
|---|---|---|
| 时间局部性 | 刚访问的可能再次访问 | 留在Cache |
| 空间局部性 | 相邻地址可能被访问 | 整块取到Cache |
平均访问时间
五、Cache
映射方式
| 方式 | 规则 | 特点 |
|---|---|---|
| 全相联 | 任意块→任意位置 | 命中率高,电路复杂 |
| 直接映射 | 块号→固定位置 | 电路简单,冲突多 |
| 组相联 | 组内全相联 | 最常用折中 |
写策略
| 策略 | 写Cache | 写主存 | 特点 |
|---|---|---|---|
| 写直达 | ✅ | ✅ 同时写 | 一致性好,写入慢 |
| 写回 | ✅ (设Dirty) | 通常在脏行被逐出或显式刷新等时机写回 | 写入快,一致性复杂 |
六、考点速查
| 考点 | 核心 |
|---|---|
| SRAM vs DRAM | 触发器vs电容,Cache vs 主存 |
| DRAM刷新 | 集中/分散/异步;破坏性读出 |
| 存储器扩展 | 位扩并联,字扩译码片选 |
| 片选生成 | 线选/全译码/部分译码 |
| 存储层次 | 局部性原理;平均访问时间 |
| Cache映射 | 全相联/直接/组相联;Tag比较 |
| Cache写策略 | 写直达/写回;Dirty bit |
平均访问时间的约定
上式采用先查 Cache、未命中后再访问下一级的串行模型。T_hit 是查找时间,T_miss_penalty 是未命中额外增加的时间;若把未命中总耗时定义为 T_miss,也可写成 h·T_hit + (1−h)·T_miss,不能混用参数含义。
第8章 · 指令系统
知识结构
第8章 · 指令系统
├── 指令 = 操作码(OP) + 地址码(A)
├── 指令格式:三/二/一/零地址
├── 扩展操作码:定长指令,操作码可变
├── 寻址方式(9种)
│ ├── 立即寻址:操作数在指令中
│ ├── 直接寻址:EA = A
│ ├── 间接寻址:EA = (A)
│ ├── 寄存器寻址:操作数在寄存器
│ ├── 寄存器间接:EA = (R)
│ ├── 变址寻址:EA = A + (IX) → 数组
│ ├── 基址寻址:EA = (BR) + A → 重定位
│ ├── 相对寻址:EA = (PC) + A → 跳转
│ └── 堆栈寻址:隐含SP
├── 指令类型:数据传送/算术逻辑/程序控制/IO
└── CISC vs RISC一、指令格式
| 类型 | 示例 | 特点 |
|---|---|---|
| 三地址 | ADD R1,R2,R3 | 指令长,RISC常用 |
| 二地址 | ADD R1,R2 | 结果覆盖一操作数 |
| 一地址 | ADD X | 依赖累加器AC |
| 零地址 | ADD | 依赖堆栈 |
扩展操作码
定长指令中,操作码可变长→操作数少的指令拥有更长操作码,可编码更多种类。
二、寻址方式(核心!)
| 方式 | 有效地址 EA | 用途 |
|---|---|---|
| 立即 | 数据在指令中 | 常量 |
| 直接 | EA = A | 全局变量 |
| 间接 | EA = (A) | 指针 |
| 寄存器 | 寄存器 | 最快 |
| 寄存器间接 | EA = (R) | 指针遍历 |
| 变址 | EA = A + (IX) | 数组 |
| 基址 | EA = (BR) + A | 程序重定位 |
| 相对 | EA = (PC) + A | 条件跳转 |
| 堆栈 | SP管理 | 函数调用 |
🔑 变址 vs 基址(常考区别!):
- 变址:A=基准(不变,如数组首地址),IX=偏移(变,如下标)
- 基址:BR=基准(变,如程序加载位置),A=偏移(不变)
- 数学公式相同(EA=A+R),但用法不同
三、指令类型
| 类型 | 指令 |
|---|---|
| 数据传送 | MOV, LOAD, STORE, PUSH, POP |
| 算术 | ADD, SUB, MUL, DIV, CMP |
| 逻辑 | AND, OR, NOT, XOR, SHL, SHR |
| 程序控制 | JMP, JZ, CALL, RET |
| IO | IN, OUT |
条件转移 = 标志位 + 跳转
| 指令 | 条件 |
|---|---|
| JZ | ZF=1 |
| JNZ | ZF=0 |
| JC | CF=1 |
| JO | OF=1 |
| JS | SF=1 |
四、CISC vs RISC
| CISC | RISC | |
|---|---|---|
| 指令数 | 多 | 少 |
| 长度 | 常见可变长 | 经典设计常见固定基础长度,也可能有压缩或其他长度扩展 |
| 寻址 | 多种 | 少 |
| 访存 | ALU可访问内存 | 仅LOAD/STORE |
| 执行 | 可混合硬布线与微码 | 常见硬布线,具体依实现 |
| 流水 | 难 | 易 |
| 代表 | x86 | ARM, MIPS, RISC-V |
五、考点速查
| 考点 | 核心 |
|---|---|
| 指令格式 | OP+地址码, 三/二/一/零地址, 扩展操作码 |
| 寻址方式 | 9种, 重点变址/基址/相对 |
| 变址vs基址 | 公式同EA=A+R, 但A和R的角色互换 |
| 条件转移 | 标志位→PC修改, 实现控制流 |
| CISC v RISC | 变vs定, LOAD/STORE, 流水线 |
这些表是教学模型
CISC/RISC 是指令集设计取向,不是所有现代处理器实现的严格二分。例如 RISC-V 可通过压缩扩展同时使用较短和基础长度指令。寻址表达式和 PC 的推进单位也必须按具体 ISA 解释。
第9章 · 中央处理器(CPU)
知识结构树
第9章 · 中央处理器
├── CPU = 数据通路 + 控制器
│ ├── 数据通路:ALU、寄存器堆、PC、IR、MUX、总线
│ └── 控制器:硬布线(快/不灵活) vs 微程序(灵活/慢)
├── 核心寄存器:PC, IR, MAR, MDR, AC/ACC, SP
├── 指令周期
│ ├── 取指(Fetch):MAR←PC→MDR→IR→PC 按指令长度推进→译码
│ ├── 译码(Decode):解析操作码,产生控制信号
│ ├── 执行(Execute):ALU运算/访存/跳转
│ └── 写回(Write Back):结果→寄存器/存储器
├── 实现方式
│ ├── 单周期:1指令=1长周期(慢,简单)
│ ├── 多周期:1指令=多短周期(快,部件复用)
│ └── 流水线:多条指令并行执行(最快)
└── 流水线
├── 五级:IF→ID→EX→MEM→WB
├── 结构冒险 → 分离I-Cache/D-Cache
├── 数据冒险 → 转发(Forwarding,最优)
└── 控制冒险 → 分支预测一、CPU 基本组成
| 组件 | 作用 |
|---|---|
| 数据通路 | 数据流动的"高速公路":ALU+寄存器堆+PC+MUX |
| 控制器 | “交通指挥”:译码指令→产生控制信号 |
核心寄存器
| 寄存器 | 功能 |
|---|---|
| PC | 存放下条指令地址 |
| IR | 存放当前指令 |
| MAR | 存放存储器地址 |
| MDR | 存放存储器数据 |
| AC | 存放ALU结果 |
| SP | 栈顶指针 |
🔑 PC 驱动一切: PC自增→取下条指令,跳转指令改PC→改变执行流。冯·诺依曼"存储程序"的核心。
二、指令周期
取指阶段(所有指令通用)
① MAR ← PC
② MDR ← M[MAR]
③ IR ← MDR
④ PC ← PC + 当前指令长度(按地址单位计)
⑤ 控制器译码不同指令的执行阶段
| 指令 | 执行操作 |
|---|---|
| ADD R1,R2 | R1 ← R1+R2 |
| LOAD R1,[addr] | MAR←addr, R1←M[MAR] |
| STORE R1,[addr] | MAR←addr, M[MAR]←R1 |
| JMP addr | PC ← addr |
| JZ addr | ZF=1→PC←addr |
三、实现方式演进
单周期 vs 多周期 vs 流水线
以下以经典单发射教学模型作比较;流水线提高吞吐率,不保证单条指令延迟更低。
| 单周期 | 多周期 | 流水线 | |
|---|---|---|---|
| 时钟周期 | = 最慢指令 | = 最慢步骤 | = 最慢步骤 |
| CPI | 1(教学模型) | 随指令和步骤数变化 | 理想单发射稳态约为1 |
| 并行度 | 无 | 无 | 多条指令同时执行 |
| 复杂度 | 简单 | 中等 | 复杂(需处理冒险) |
理想流水线加速比
5级流水线 → 理想加速 5 倍。
实际中因冒险等因素,加速比会打折扣。
四、硬布线 vs 微程序控制器
| 硬布线 | 微程序 | |
|---|---|---|
| 实现 | 组合逻辑 | ROM存微程序 |
| 速度 | 快 | 慢 |
| 灵活性 | 差 | 好 |
| 适用 | RISC | CISC |
五、流水线冒险(核心!)
五级流水线
IF → ID → EX → MEM → WB级间插入流水线寄存器(IF/ID, ID/EX, EX/MEM, MEM/WB)。
三种冒险
| 冒险 | 原因 | 解决方案 |
|---|---|---|
| 结构 | 硬件争用 | 分离I-Cache/D-Cache |
| 数据 | 指令间数据依赖 | 转发、停顿或调度,视依赖类型而定 |
| 控制 | 分支不确定 | 分支预测;准确率随程序与实现变化 |
数据冒险示例
ADD R1, R2, R3 → R1 在WB才写回
SUB R4, R1, R5 → ID阶段需要R1→读到旧值!转发(Forwarding): ALU结果在EX阶段就产生了 → 不等写回,直接从EX/MEM寄存器"偷"给下条指令的ALU输入端 在此相邻 ALU 依赖示例及相应转发路径下,可避免额外停顿;并非所有依赖都能零停顿。
控制冒险的解决
| 方法 | 原理 |
|---|---|
| 气泡 | 等到分支结果出来(损失周期) |
| 静态预测 | 总是猜不跳;或向后跳(循环) |
| 动态预测 | 硬件记录历史→基于模式预测 |
| 延迟分支 | 分支后1条总是执行(编译器填有用指令) |
六、考点速查
| 考点 | 核心 |
|---|---|
| CPU组成 | 数据通路(ALU+寄存器+PC)+控制器(控制信号) |
| 指令周期 | 取指(五步)→译码→执行→写回 |
| 单/多/流水 | 周期=最慢指令/最慢步骤/最慢步骤;并行度递增 |
| 硬vs微 | 组合逻辑快vs ROM灵活;RISC vs CISC |
| 五级流水 | IF→ID→EX→MEM→WB;流水线寄存器 |
| 数据冒险 | 转发可减少部分冒险,load-use 等情形仍可能需要停顿 |
| 控制冒险 | 分支预测;效果随程序与实现变化 |
- CPU两件套:通路是高速路,控制是交通警
- 周期四步走:取指译码执行写
- 流水五级:IF-ID-EX-MEM-WB
- 冒险三兄弟:结构分Cache,数据靠转发,控制靠预测
补充:复习记录中的推导与易错点
逻辑恒等式
交换律、结合律和分配律允许等价地改写逻辑表达式。两个常用分配关系是
补充几个复习时容易混淆的式子:
上述最后一式的对偶是
不能随意只把某一个变量取反:对偶规则作用于运算和常量,反演还需对应处理变量与括号范围。
利用异或反推格雷码
由 ,对两边再异或 ,利用 得
因此解码应从最高位开始递推;不能把所有位同时只与原二进制的未知位计算。
CRC 与汉明码条件不能混用
CRC 的冗余位数由所用生成多项式的次数决定,具体检测能力还依赖多项式和帧长。 是为 k 个数据位构造单比特纠错汉明码时常见的校验位计数条件,不是任意 CRC 选多项式的通用规则。
CRC 接收端余数为零,只表示没有检出该多项式可检测范围内的错误,不能保证绝对无错。普通汉明码的单错定位也需要相应错误模型;增加总奇偶校验可构造 SECDED 方案。
从稳态函数到实际电路
组合电路的函数描述针对稳定输入下的稳态输出。不同路径的传播时延可能带来毛刺,不能仅因为输入最终不变就认为中间过程也不变。分析静态冒险时,要结合具体两级实现、输入变化假设以及是否有公共蕴含项覆盖相邻项,不能只检查变量是否同时以原反形式出现。
参考与整理范围
本文合并数字系统与逻辑设计的九章文字笔记,并将后续复习记录中不重复的推导和易错点补入。PDF 课件截页、题目截图、重复编码表与未完成段落没有作为独立附件上传。