第1章 引言 1
1.1本书组织结构 1
1.2进化过程 1
1.3计算机发展阶段划分 4
1.3.1第一代计算机 4
1.3.2第二代计算机 4
1.3.3第三代计算机 5
1.3.4第四代计算机 6
1.3.5第五代计算机 7
1.4云、普适、网格和超并行计算机 7
1.5未来 8
1.6小结 9
第2章 基础知识 10
2.1计算机组成 10
2.1.1 Flynn分类法 10
2.1.2连接方式 11
2.1.3计算机结构层次视图 11
2.2计算机基本原理 12
2.3数字格式 15
2.3.1无符号二进制 15
2.3.2原码 15
2.3.3反码 15
2.3.4补码 15
2.3.5移码(excess-n) 16
2.3.6 BCD码 16
2.3.7定点数表示法 17
2.3.8符号扩展 17
2.4算术运算 18
2.4.1加法 18
2.4.2并行进位传递加法器 18
2.4.3超前进位 20
2.4.4减法 20
2.5乘法 21
2.5.1加法迭代法 22
2.5.2部分积方法 22
2.5.3移位加方法 24
2.5.4 Booth和Robertson方法 25
2.6除法 26
2.7定点数格式的运算 28
2.7.1定点数的运算 28
2.7.2定点数的乘除 29
2.8浮点数 30
2.8.1广义浮点数 30
2.8.2 IEEE754浮点标准 30
2.8.3 IEEE754标准模式 31
2.8.3.1规格化模式 31
2.8.3.2非规格化模式 32
2.8.3.3其他模式数 33
2.8.4 IEEE754数的范围 33
2.9浮点数处理 35
2.9.1 IEEE754数的加减运算 36
2.9.2 IEEE754数的乘除法 38
2.9.3 IEEE754中间格式 38
2.9.4舍入 39
2.10小结 39
思考题 40
第3章CPU基础 42
3.1什么是计算机 42
3.2让计算机为你服务 42
3.2.1程序存储 42
3.2.2存储架构 43
3.2.3程序传输 44
3.2.4控制单元 44
3.2.5微指令 48
3.2.6 RISC和CISC的对比 49
3.2.7处理器实例 51
3.3指令处理 51
3.3.1指令集 52
3.3.2取指和译码 54
3.3.2.1指令译码 55
3.3.2.2取操作数 55
3.3.2.3分支 56
3.3.2.4立即数 57
3.3.3压缩指令集 57
3.3.4寻址模式 59
3.3.5堆栈机和逆波兰表示法 61
3.4数据处理 62
3.4.1数据的格式和表达 63
3.4.2数据流 65
3.4.3数据存储 66
3.4.4内部数据 66
3.4.5数据处理 67
3.4.5.1在小位宽CPU上处理大位宽数字 67
3.4.5.2定点CPU上的浮点数 68
3.4.5.3复数 69
3.5自顶向下方法 69
3.5.1计算机的能力 69
3.5.1.1功能 70
3.5.1.2时钟频率 70
3.5.1.3位宽 70
3.5.1.4内存 70
3.5.2性能衡量和统计 70
3.5.3性能评估 72
3.6小结 73
思考题 74
第4章 处理器内部组成 76
4.1内部总线结构 76
4.1.1程序员的角度 76
4.1.2分解互联排列 77
4.1.3 ADSP21xx总线排列 78
4.1.4数据与程序同时访存 78
4.1.5双总线体系结构 80
4.1.6单总线体系结构 81
4.2算术逻辑单元 82
4.2.1 ALU功能 82
4.2.2 ALU设计 83
4.3内存管理单元 85
4.3.1对虚拟存储的需求 85
4.3.2 MMU操作 85
4.3.3退回算法 87
4.3.4内部存储碎片和片段 87
4.3.5外部碎片 88
4.3.6改进的MMU 89
4.3.7内存保护 89
4.4 cache 90
4.4.1直接相联cache 92
4.4.2组相联cache 93
4.4.3全相联cache 94
4.4.4局部性原则 94
4.4.5 cache替换算法 95
4.4.6 cache性能 98
4.4.7 cache一致性 99
4.5协处理器 100
4.6浮点运算单元 101
4.6.1浮点仿真 102
4.7 SIMD流指令扩展(SSE)和多媒体扩展 103
4.7.1多媒体扩展(MMX ) 103
4.7.2 MMX实现 103
4.7.3 MMX的使用 104
4.7.4 SIMD流指令扩展(SSE) 105
4.7.5使用SSE和MMX 105
4.8嵌入式系统中的协处理 105
4.9小结 106
思考题 107
第5章 提高CPU性能 110
5.1 CPU加速技术简介 110
5.2流水线 111
5.2.1多功能流水线 112
5.2.2动态流水线 113
5.2.3改变流水线模式 113
5.2.4数据相关冒险 114
5.2.5条件冒险 116
5.2.6条件分支 117
5.2.7编译时流水线补偿 118
5.2.8相对地址分支 119
5.2.9流水线的指令集补偿 120
5.2.10运行时流水线补偿 122
5.3复杂指令集(CISC )和精简指令集(RISC ) 123
5.4超标量体系结构 124
5.4.1简单超标量 124
5.4.2多发送超标量 125
5.4.3超标量的性能 126
5.5每周期的指令数 127
5.5.1不同体系结构的IPC 127
5.5.2 IPC度量 128
5.6硬件加速器 129
5.6.1零开销循环 129
5.6.2地址处理硬件 131
5.6.3影子寄存器 134
5.7分支预测 134
5.7.1分支预测的必要性 134
5.7.2单T位预测器 136
5.7.3双位预测器 137
5.7.4计数器和移位器预测器 138
5.7.5局部分支预测器 139
5.7.6全局分支预测器 141
5.7.7 G选择预测器 142
5.7.8 G共享预测器 143
5.7.9混合预测器 144
5.7.10分支目标缓冲 145
5.7.11基本代码段 147
5.7.12分支预测总结 148
5.8并行机器 148
5.8.1 SISD向MIMD的演变 150
5.8.2为提高性能而采用并行 152
5.8.3其他并行处理 153
5.9 Tomasulo算法 155
5.9.1 Tomasulo算法的原理 155
5.9.2 Tomasulo系统的例子 155
5.9.3嵌入式系统中的Tomasulo 算法 159
5.10小结 160
思考题 160
第6章 外部总线 163
6.1总线接口 163
6.1.1总线控制信号 164
6.1.2直接存储器存取(DMA) 164
6.2并行总线规范 165
6.3标准接口 166
6.3.1系统控制接口 166
6.3.2系统数据总线 167
6.3.2.1 ISA总线及其衍生总线 167
6.3.2.2 PC/104 168
6.3.2.3 PCI 170
6.3.2.4 LVDS 170
6.3.3输入/输出总线 171
6.3.4外设器件总线 172
6.3.5与网络设备的接口 172
6.4实时性问题 172
6.4.1外部激励 173
6.4.2中断 173
6.4.3实时性定义 173
6.4.4时间范围参数 174
6.4.5硬件体系结构对实时操作系统的支持 175
6.5中断和中断处理 176
6.5.1中断的重要性 176
6.5.2中断过程 176
6.5.2.1中断事件通知处理器 176
6.5.2.2 CPU完成正在进行的工作 177
6.5.2.3转入中断服务例程 177
6.5.2.4中断重定向 179
6.5.3高级中断处理 180
6.5.4共享中断 180
6.5.5可重入代码 181
6.5.6软件中断 181
6.6无线 181
6.6.1无线技术 181
6.6.2无线接口 183
6.6.3无线相关间题 183
6.7小结 183
思考题 184
第7章 实用嵌入式CPU 187
7.1概述 187
7.2微处理器不只是核 187
7.3功能需求 189
7.4时钟 192
7.5时钟与功耗 194
7.5.1传输延迟 195
7.5.2电流相关问题 195
7.5.3时钟问题解决方法 196
7.5.4低电压设计 196
7.6存储 197
7.6.1早期的计算机存储 198
7.6.2只读存储器 198
7.6.3随机存取存储器 203
7.6.3.1静态RAM 204
7.6.3.2动态RAM 205
7.6.3.3 DRAM的寻址机制 206
7.7分页与重叠 209
7.8.嵌入式系统中的存储 210
7.8.1非易失存储器 211
7.8.2易失存储器 212
7.8.3其他存储器 213
7.9测试和验证 214
7.9.1集成电路设计和制造问题 215
7.9.2内置自测( BIST) 216
7.9.3联合测试行动小组(JTAG ) 218
7.10错误检测和纠正 220
7.11看门狗定时器和复位监测 223
7.12逆向工程 225
7.12.1逆向工程过程 226
7.12.1.1功能分析 228
7.12.1.2物理结构分析 228
7.12.1.3材料清单 228
7.12.1.4系统架构 229
7.12.2详细的物理布局 229
7.12.2.1电气连接原理图 230
7.12.2.2存储程序 230
7.12.2.3软件 230
7.13防止逆向工程 232
7. 13.1存储程序的被动模糊 233
7.13.2可编程逻辑家族 234
7. 13.3主动RE防范 234
7.13.4主动RE防范分类 235
7.14小结 236
思考题 236
第8章CPU设计 238
8.1软核处理器 238
8.1.1微处理器不仅仅有处理器核 238
8.1.2软核处理器的优点 239
8.1.2.1性能 239
8.1.2.2可用性 239
8.1.2.3效率 240
8.1.2.4人为因素 240
8.2软硬件协同设计 241
8.3现成的软核 243
8.4制作自己的软核 245
8.5 CPU设计规格说明 245
8.5.1 CPU体系结构 246
8.5.2总线 246
8.5.3程序及数据存储 247
8.5.4逻辑运算 248
8.5.5指令处理 248
8.5.6系统控制 249
8.6指令集 249
8.6. 1 CPU控制 251
8.6.1.1闲置状态 252
8.6.1.2取指状态 252
8.6.1.3执行状态 252
8.7 CPU实现 253
8.7.1测试的重要性 253
8.7.2定义操作和状态:defs.v 253
8.7.3第一个小模块:counter.v 254
8.7.4 CPU控制:state.v 256
8.7.5程序和变量存储:ram.v 257
8.7.6堆栈:stack.v 259
8.7.7算术、逻辑和乘法单元:alu.v 261
8.7.8综合测试:tinycpu.v 263
8.8 CPU测试及运行 267
8.9编程并使用CPU 267
8.9.1编写TinyCPU程序 268
8.9.2 TinyCPU编程工具 271
8.10小结 271
思考题 272
第9章 未来 274
9.1单比特体系结构 274
9.1.1位串行加法 274
9.1.2位串行减法 275
9.1.3位串行逻辑电路和处理 275
9.2超长指令字体系结构 276
9.2.1 VLIW的基本原理 276
9.2.2 VLIW的难题 277
9.3并行与大规模并行计算机 278
9.3.1大型计算机集群 278
9.3.2小型计算机集群 279
9.3.2.1从嵌入式系统中解放计算资源 279
9.3.2.2并行处理单元 279
9.3.3并行和集群处理注意事项 283
9.3.4互连策略 283
9.4异步处理器 285
9.4.1数据流控制 286
9.4.2避免流水线冒险 286
9.5替代数字格式系统 287
9.5.1多值逻辑 287
9.5.2带符号数字的表示 288
9.6光计算 289
9.6.1光电全加器 289
9.6.2光电底板 290
9.7科幻小说还是未来的现实 291
9.7.1分布式计算 291
9.7.2湿件(大脑) 291
9.8小结 292
附录A内存大小的标准表示方法 293
附录B开放系统互连模型 295
B.1引言 295
B.2 OSI层次 295
B.3小结 296
附录C探索cache大小和结构安排的权衡设计方法 297
C.1引言 297
C.2准备工作 297
C.3安装Cacti和Dinero 297
C.4工具的使用 298
C.5不同cache设计方案的实验 299
C.6 cache设计中的进一步信息 299
思考题 300
附录D嵌入式计算机上的无线技术 301
D.1引言 301
D.2 802.11a, b和g 301
D.3 802.11n 302
D.4 802.20 302
D.5 802.16 302
D.6蓝牙 303
D.7 GSM 303
D.8 GPRS 304
D.9 ZigBee 305
D.10无线USB 305
D.11近距离通信 306
D.12 WiBro 307
D.13无线设备总结 307
D.14应用举例 308
D.15小结 308
附录E编译和仿真TinyCPU的工具 309
E.1准备和软件获取 309
E.2如何编译和仿真Verilog 309
E.3如何查看仿真输出 313
E.4高级测试平台 318
E.5小结 318
附录F TinyCPU编译和汇编代码的工具 319
F.1引言 319
F.2汇编过程 319
F.3汇编器 320
F.4汇编程序实例 322
F.5编译器 323
F.6小结 323
索引 325