出版者的话
前言
致谢
第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 改进的MMU89
4.3.7 内存保护89
4.4 cache90
4.4.1 直接相联cache92
4.4.2 组相联cache93
4.4.3 全相联cache94
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和MMX105
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 不同体系结构的IPC127
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/104168
6.3.2.3 PCI170
6.3.2.4 LVDS170
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章 实用嵌入式CPU187
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 静态RAM204
7.6.3.2 动态RAM205
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.v253
8.7.3 第一个小模块:counter.v254
8.7.4 CPU控制:state.v256
8.7.5 程序和变量存储:ram.v257
8.7.6 堆栈:stack.v259
8.7.7 算术、逻辑和乘法单元:alu.v261
8.7.8 综合测试:tinycpu.v263
8.8 CPU测试及运行267
8.9 编程并使用CPU267
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和Dinero297
C.4 工具的使用298
C.5 不同cache设计方案的实验299
C.6 cache设计中的进一步信息299
思考题300
附录D 嵌入式计算机上的无线技术301
D.1 引言301
D.2 802.11a,b和g301
D.3 802.11n302
D.4 802.20302
D.5 802.16302
D.6 蓝牙303
D.7 GSM303
D.8 GPRS304
D.9 ZigBee305
D.10 无线USB305
D.11 近距离通信306
D.12 WiBro307
D.13 无线设备总结307
D.14 应用举例308
D.15 小结308
附录E 编译和仿真TinyCPU的工具309
E.1 准备和软件获取309
E.2 如何编译和仿真Verilog309
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
· · · · · · (
收起)