第一部分 基本概念 2
第1章 何为硬件,何为软件 2
1.1 软/硬件协同设计简介 2
1.1.1 硬件 2
1.1.2 软件 3
1.1.3 硬件与软件 5
1.1.4 定义软/硬件协同设计 8
1.2 探求高能效 9
1.2.1 性能 9
1.2.2 能效 10
1.3 软/硬件协同设计的驱动因素 11
1.4 软/硬件协同设计的空间 12
1.4.1 平台的设计空间 12
1.4.2 应用的映射 13
1.5 软、硬件设计的二重性 14
1.6 抽象层次的建模 15
1.7 并发与并行 17
1.8 小结 19
1.9 扩展阅读 19
1.10 问答题 19
第2章 数据流建模与变换 22
2.1 数据流图介绍 22
2.1.1 令牌、参与者、队列 25
2.1.2 触发率、触发规则、调度 26
2.1.3 同步数据流图 26
2.1.4 SDF图的确定性 27
2.2 剖析SDF图 28
2.2.1 构建周期性容许顺序调度方案(PASS) 28
2.2.2 实例:构建一个PAM-4系统的PASS 30
2.3 控制流建模以及数据流建模的局限 31
2.3.1 以SDF语义仿真控制流 31
2.3.2 扩展SDF语义 32
2.4 添加时间与资源 32
2.4.1 实时性限制与输入/输出采样率 33
2.4.2 数据流的资源模型 33
2.4.3 对吞吐量的限制 34
2.5 设计转换 35
2.5.1 多速率扩展 36
2.5.2 重定时 37
2.5.3 流水线 37
2.5.4 铺展 38
2.6 数据流建模小结 39
2.7 扩展阅读 40
2.8 问答题 40
第3章 数据流的软件与硬件实现 43
3.1 数据流的软件实现 43
3.1.1 队列和参与者的软件实现 43
3.1.2 基于动态调度器的软件实现 47
3.1.3 实例:四点快速傅里叶变换的SDF表示 48
3.1.4 基于静态调度的顺序触发 52
3.2 数据流的硬件实现 54
3.2.1 单速率SDF图的硬件实现 54
3.2.2 流水线 57
3.3 数据流的软/硬件结合实现 58
3.4 小结 61
3.5 扩展阅读 61
3.6 问答题 62
第4章 数据流与控制流分析 63
4.1 C程序的数据边与控制边 63
4.2 数据边与控制边的实现 65
4.3 构建控制流图 66
4.4 构建数据流图 67
4.5 应用实例:C程序的硬件转换 70
4.5.1 数据通路的设计 70
4.5.2 控制电路的设计 71
4.6 单赋值程序 72
4.7 小结 75
4.8 扩展阅读 75
4.9 问答题 75
第二部分 自定义体系结构的设计空间 80
第5章 FSMD 80
5.1 基于时钟周期的位并行硬件 80
5.1.1 连线和寄存器 80
5.1.2 精度和符号 82
5.1.3 表达式的硬件映射 83
5.2 硬件模块 85
5.3 有限状态机 87
5.4 FSMD简介 89
5.4.1 建模 89
5.4.2 FSMD模型:两个堆叠的FSM 91
5.4.3 FSMD的不唯一性 92
5.4.4 实现 93
5.5 FSMD设计实例:一个中位数处理器 95
5.5.1 设计规范:计算中位数 95
5.5.2 映射中位数模型到硬件 96
5.5.3 数据输入的序列化 96
5.5.4 完全顺序化的计算 97
5.6 恰当的FSMD 101
5.7 FSMD的语言映射实例 102
5.7.1 GEZEL语言的GCD 102
5.7.2 Verilog语言的GCD 103
5.7.3 VHDL语言的GCD 104
5.7.4 SystemC语言的GCD 106
5.8 小结 108
5.9 扩展阅读 108
5.10 问答题 109
第6章 微程序的体系结构 113
6.1 有限状态机的局限性 113
6.1.1 状态激增 113
6.1.2 异常的处理 114
6.1.3 运行时的灵活性 114
6.2 微程序的控制 114
6.3 微指令的编码 115
6.3.1 转移域 115
6.3.2 命令域 116
6.4 微程序的数据通路 118
6.4.1 数据通路的体系结构 118
6.4.2 撰写微程序 119
6.5 实现微程序机 121
6.6 微程序的解释器 126
6.7 微程序的流水线 130
6.7.1 微指令寄存器 130
6.7.2 数据通路的条件码寄存器 131
6.7.3 流水线的下一个地址逻辑 131
6.8 微控制器中的微程序设计 132
6.8.1 系统结构 132
6.8.2 实例:Bresenham直线演算法 133
6.9 小结 137
6.10 扩展阅读 137
6.11 问答题 137
第7章 通用嵌入式核 140
7.1 处理器 140
7.1.1 典型微处理器的工具链 140
7.1.2 从C程序到汇编指令 141
7.2 RISC的流水线 144
7.2.1 控制冒险 146
7.2.2 数据冒险 147
7.2.3 结构冒险 148
7.3 程序的组织 149
7.3.1 数据类型 149
7.3.2 存储器层次结构中的变量 150
7.3.3 函数的调用 152
7.3.4 程序的布局 154
7.4 编译器工具 155
7.4.1 大小检查 156
7.4.2 段检查 157
7.4.3 汇编代码检查 158
7.5 低级程序分析 159
7.6 处理器的仿真 162
7.6.1 指令集的仿真 162
7.6.2 基于目标代码执行的分析 163
7.6.3 低抽象级仿真 167
7.7 小结 167
7.8 扩展阅读 168
7.9 问答题 168
第8章 SoC 174
8.1 SoC的概念 174
8.1.1 角色的分配 174
8.1.2 SoC与自定义硬件的接口 175
8.2 SoC体系结构的四个设计原则 176
8.2.1 异构分布式数据处理 176
8.2.2 异构分布式通信 177
8.2.3 异构分布式存储 178
8.2.4 分层控制 180
8.3 实例:便携式多媒体系统 181
8.4 SoC的GEZEL建模 183
8.4.1 一个带有StrongARM核的片上系统 183
8.4.2 带有8051核的乒乓缓存 186
8.4.3 AVR ATMega28上的UART 189
8.5 小结 192
8.6 扩展阅读 192
8.7 问答题 193
第三部分 软/硬件接口 196
第9章 软/硬件通信原理 196
9.1 连接软件和硬件 196
9.2 同步化方案 197
9.2.1 同步化概念 197
9.2.2 信号量 199
9.2.3 单向与双向交握 201
9.2.4 阻塞、非阻塞式传输 203
9.3 通信限制与计算限制 203
9.4 紧耦合与松耦合 205
9.5 小结 206
9.6 扩展阅读 206
9.7 问答题 206
第10章 片上总线 208
10.1 片上总线系统 208
10.1.1 几个现今的片上总线标准 208
10.1.2 共享总线上的元件 209
10.1.3 点到点总线上的元件 210
10.1.4 片上总线的物理实现 210
10.1.5 总线命名的约定 211
10.1.6 总线的时序图 211
10.1.7 通用总线的定义 212
10.2 总线传输 213
10.2.1 简单的读写传输 213
10.2.2 传输数据的大小和字节顺序 214
10.2.3 改进的总线传输 217
10.3 多个主设备的总线系统 219
10.3.1 总线的优先级 221
10.3.2 总线锁定 221
10.4 总线的拓扑结构 223
10.4.1 总线开关 224
10.4.2 片上网络 225
10.5 小结 226
10.6 扩展阅读 227
10.7 问答题 227
第11章 微处理器接口 231
11.1 内存映射接口 231
11.1.1 内存映射寄存器 231
11.1.2 信箱 233
11.1.3 FIFO队列 234
11.1.4 主从式交握 234
11.1.5 共享内存 235
11.1.6 内存映射接口的GEZEL建模 236
11.2 协处理器接口 239
11.2.1 快速单工链路 240
11.2.2 LEON-3浮点协处理器接口 242
11.3 自定义指令接口 243
11.3.1 ASIP设计流程 244
11.3.2 实例:端字节序处理器 245
11.3.3 实例:Nios-II自定义指令接口 249
11.3.4 寻找合适的ASIP指令 251
11.4 小结 254
11.5 扩展阅读 254
11.6 问答题 255
第12章 硬件接口 258
12.1 协处理器的硬件接口 258
12.1.1 协处理器硬件接口的功能 258
12.1.2 处理器接口的布局 259
12.2 数据设计 259
12.2.1 灵活的寻址机制 260
12.2.2 复用和掩码 260
12.3 控制设计 261
12.3.1 层次控制 262
12.3.2 内部流水线的控制 263
12.4 编程模型=控制设计+数据设计 266
12.4.1 地址映射 267
12.4.2 指令集 267
12.5 小结 268
12.6 扩展阅读 268
12.7 问答题 268
第四部分 应用实例 274
第13章 Trivium密码协处理器 274
13.1 Trivium流密码算法 274
13.1.1 流密码 274
13.1.2 Trivium 275
13.1.3 Trivium的硬件映射 276
13.1.4 Trivium的硬件测试平台 279
13.2 8位平台上的Trivium 280
13.2.1 8051协处理器的总体设计 280
13.2.2 8051协处理器的硬件平台 281
13.2.3 8051的软件驱动程序 284
13.3 32位平台上的Trivium 287
13.3.1 存储器映射接口的硬件平台 288
13.3.2 存储器映射接口的软件驱动程序 291
13.3.3 自定义指令接口的硬件平台 293
13.3.4 自定义指令接口的软件驱动程序 296
13.4 小结 297
13.5 扩展阅读 298
13.6 问答题 298
第14章 AES协处理器 299
14.1 AES加密和解密 299
14.2 AES加密协处理器的存储映射 300
14.2.1 硬件的接口操作 300
14.2.2 编程模型 300
14.2.3 软件驱动程序的设计 302
14.2.4 硬件接口设计 304
14.2.5 系统性能评估 306
14.3 带自定义指令的AES加/解密 307
14.3.1 AES T盒的参考实现 307
14.3.2 AES T盒的自定义指令设计 310
14.3.3 在GEZEL中AEST盒的自定义指令设计 312
14.3.4 AES T盒的软件集成和性能 315
14.4 小结 317
14.5 扩展阅读 317
14.6 问答题 317
第15章 CORDIC协处理器 318
15.1 坐标旋转数字计算机算法 318
15.1.1 算法 318
15.1.2 C语言的参考实现 319
15.2 CORDIC的硬件协处理器 321
15.2.1 CORDIC硬件核 321
15.2.2 快速单工链路协处理器的硬件接口 323
15.3 CORDIC协处理器的FPGA原型 326
15.4 大量旋转问题的处理 328
15.5 小结 332
15.6 扩展阅读 332
15.7 问答题 333
附录A GEZEL软件实践 334
参考文献 346