第1章 二进制 1
1.1 课程计划 1
1.2 管理复杂性的艺术 1
1.2.1 抽象 1
1.2.2 约束 2
1.2.3 三条原则 3
1.3 数字抽象 3
1.4 数字系统 4
1.4.1 十进制数 4
1.4.2 二进制数 5
1.4.3 十六进制数 6
1.4.4 字节、半字节和字 7
1.4.5 二进制加法 8
1.4.6 有符号的二进制数 8
1.5 逻辑门 10
1.5.1 非门 11
1.5.2 缓冲 11
1.5.3 与门 11
1.5.4 或门 11
1.5.5 其他二输入逻辑门 12
1.5.6 多输入门 12
1.6 数字抽象之下 13
1.6.1 电源电压 13
1.6.2 逻辑电平 13
1.6.3 噪声容限 14
1.6.4 直流电压传输特性 14
1.6.5 静态约束 15
1.7 CMOS晶体管 16
1.7.1 半导体 16
1.7.2 二极管 17
1.7.3 电容 17
1.7.4 nMOS和pMOS晶体管 17
1.7.5 CMOS非门 19
1.7.6 其他CMOS逻辑门 19
1.7.7 传输门 21
1.7.8 类nMOS逻辑 21
1.8 功耗 22
1.9 总结和展望 22
习题 23
面试问题 29
第2章 组合逻辑设计 30
2.1 引言 30
2.2 布尔表达式 32
2.2.1 术语 32
2.2.2 与或式 32
2.2.3 或与式 33
2.3 布尔代数 34
2.3.1 公理 34
2.3.2 单变量定理 35
2.3.3 多变量定理 36
2.3.4 定理的统一证明方法 37
2.3.5 等式化简 37
2.4 从逻辑到门 38
2.5 多级组合逻辑 40
2.5.1 减少硬件 40
2.5.2 推气泡 41
2.6 X和Z 43
2.6.1 非法值X 43
2.6.2 浮空Z 43
2.7 卡诺图 44
2.7.1 画圈的原理 45
2.7.2 卡诺图化简逻辑 45
2.7.3 无关项 48
2.7.4 小结 49
2.8 组合逻辑模块 49
2.8.1 多路选择器 49
2.8.2 译码器 52
2.9 时序 52
2.9.1 传输延迟和最小延迟 53
2.9.2 毛刺 55
2.10 总结 57
习题 57
面试问题 62
第3章 时序逻辑设计 63
3.1 引言 63
3.2 锁存器和触发器 63
3.2.1 SR锁存器 64
3.2.2 D锁存器 65
3.2.3 D触发器 66
3.2.4 寄存器 67
3.2.5 带使能端的触发器 67
3.2.6 带复位功能的触发器 67
3.2.7 晶体管级的锁存器和触发器的设计 68
3.2.8 小结 68
3.3 同步逻辑设计 69
3.3.1 一些有问题的电路 70
3.3.2 同步时序电路 71
3.3.3 同步和异步电路 72
3.4 有限状态机 72
3.4.1 有限状态机设计实例 73
3.4.2 状态编码 77
3.4.3 Moore型状态机和Mealy型状态机 79
3.4.4 状态机的分解 82
3.4.5 由电路图导出状态机 83
3.4.6 小结 86
3.5 时序逻辑电路的时序 86
3.5.1 动态约束 87
3.5.2 系统时序 87
3.5.3 时钟偏移 91
3.5.4 稳态 92
3.5.5 同步器 93
3.5.6 分辨时间的推导 95
3.6 并行 97
3.7 总结 99
习题 100
面试问题 105
第4章 硬件描述语言 107
4.1 引言 107
4.1.1 模块 107
4.1.2 硬件描述语言的起源 108
4.1.3 模拟和综合 109
4.2 组合逻辑 110
4.2.1 位运算符 110
4.2.2 注释和空格 112
4.2.3 缩减运算符 112
4.2.4 条件赋值 112
4.2.5 内部变量 114
4.2.6 优先级 115
4.2.7 数字 116
4.2.8 Z和X 117
4.2.9 位混合 118
4.2.10 延迟 118
4.3 结构建模 119
4.4 时序逻辑 122
4.4.1 寄存器 122
4.4.2 带复位功能的寄存器 123
4.4.3 带使能端的寄存器 124
4.4.4 多寄存器 124
4.4.5 锁存器 125
4.5 更多组合逻辑 126
4.5.1 case语句 127
4.5.2 if语句 129
4.5.3 带有无关项的真值表 130
4.5.4 阻塞式和非阻塞式赋值 131
4.6 有限状态机 134
4.7 数据类型 137
4.7.1 SystemVerilog 137
4.7.2 VHDL 138
4.8 参数化模块 140
4.9 测试程序 142
4.1 0总结 145
习题 145
面试问题 152
第5章 常见数字模块 153
5.1 引言 153
5.2 算术电路 153
5.2.1 加法 153
5.2.2 减法 158
5.2.3 比较器 159
5.2.4 算术逻辑单元 160
5.2.5 移位器和循环移位器 162
5.2.6 乘法 162
5.2.7 除法 164
5.2.8 拓展阅读 164
5.3 数制系统 165
5.3.1 定点数系统 165
5.3.2 浮点数系统 166
5.4 时序电路模块 169
5.4.1 计数器 169
5.4.2 移位寄存器 169
5.5 存储器阵列 171
5.5.1 概述 171
5.5.2 动态随机访问存储器 173
5.5.3 静态随机访问存储器 174
5.5.4 面积和延迟 174
5.5.5 寄存器文件 174
5.5.6 只读存储器 175
5.5.7 使用存储器阵列的逻辑 176
5.5.8 存储器HDL 176
5.6 逻辑阵列 178
5.6.1 可编程逻辑阵列 178
5.6.2 现场可编程逻辑门阵列 179
5.6.3 阵列实现 182
5.7 总结 183
习题 184
面试问题 190
第6章 体系结构 191
6.1 引言 191
6.2 汇编语言 192
6.2.1 指令 192
6.2.2 操作数:寄存器、存储器和常数 193
6.3 编程 196
6.3.1 数据处理指令 196
6.3.2 条件标志 198
6.3.3 分支 200
6.3.4 条件语句 201
6.3.5 循环 202
6.3.6 存储器 204
6.3.7 函数调用 207
6.4 机器语言 215
6.4.1 数据处理指令 215
6.4.2 存储器指令 218
6.4.3 分支指令 219
6.4.4 寻址模式 220
6.4.5 解释机器语言代码 220
6.4.6 程序存储 221
6.5 编译、汇编与加载 222
6.5.1 内存映射 222
6.5.2 编译 223
6.5.3 汇编 224
6.5.4 链接 225
6.5.5 加载 226
6.6 其他主题 227
6.6.1 加载文字 227
6.6.2 NOP 227
6.6.3 异常 228
6.7 ARM体系结构的演变 230
6.7.1 Thumb指令集 230
6.7.2 DSP指令 231
6.7.3 浮点指令 234
6.7.4 节能和安全指令 235
6.7.5 SIMD指令 235
6.7.6 64位体系结构 236
6.8 另一个视角:x86体系结构 236
6.8.1 x86寄存器 237
6.8.2 x86操作数 238
6.8.3 状态标志 239
6.8.4 x86指令集 239
6.8.5 x86指令编码 241
6.8.6 x86的其他特性 242
6.8.7 整体情况 242
6.9 总结 242
习题 243
面试问题 251
第7章 微结构 253
7.1 引言 253
7.1.1 体系结构状态和指令集 253
7.1.2 设计过程 253
7.1.3 微结构 255
7.2 性能分析 255
7.3 单周期处理器 256
7.3.1 单周期数据通路 256
7.3.2 单周期控制 261
7.3.3 更多指令 264
7.3.4 性能分析 266
7.4 多周期处理器 267
7.4.1 多周期数据通路 268
7.4.2 多周期控制 273
7.4.3 性能分析 279
7.5 流水线处理器 281
7.5.1 流水线数据通路 283
7.5.2 流水线控制 284
7.5.3 冲突 285
7.5.4 性能分析 293
7.6 硬件描述语言表示 293
7.6.1 单周期处理器 294
7.6.2 通用模块 298
7.6.3 测试程序 300
7.7 高级微结构 303
7.7.1 深流水线 303
7.7.2 微操作 304
7.7.3 分支预测 305
7.7.4 超标量处理器 306
7.7.5 乱序处理器 308
7.7.6 寄存器重命名 309
7.7.7 多线程 310
7.7.8 多处理器 311
7.8 现实世界视角:ARM微结构的演变 312
7.9 总结 317
习题 318
面试问题 322
第8章 存储器系统 323
8.1 引言 323
8.2 存储器系统性能分析 326
8.3 高速缓存 327
8.3.1 高速缓存中存放的数据 327
8.3.2 高速缓存中的数据查找 327
8.3.3 数据的替换 334
8.3.4 高级高速缓存设计 334
8.3.5 ARM处理器中高速缓存的发展 337
8.4 虚拟存储器 338
8.4.1 地址转换 339
8.4.2 页表 340
8.4.3 转换后备缓冲 341
8.4.4 存储器保护 342
8.4.5 替换策略 342
8.4.6 多级页表 343
8.5 总结 344
结语 344
习题 345
面试问题 350
索引 351