第1章 CPU构架概述 1
1.1 计算机体系结构概述 1
1.1.1 计算机系统分类 2
1.1.2 微处理器概述 4
1.1.3 处理器的性能度量 5
1.1.4 RISC CPU的结构 5
1.2 标量流水线技术 6
1.2.1 流水线分类 7
1.2.2 线性流水线的性能分析 8
1.2.3 流水线相关 11
1.2.4 OR1200 CPU流水线 13
1.3 超标量构架 14
1.3.1 超标量流水线 15
1.3.2 分支预测技术 16
1.3.3 指令的动态调度 22
1.3.4 存储器数据流技术 28
1.4 超长指令构架 31
1.4.1 概述 32
1.4.2 RISC,CISC与VLIW构架的区别 32
1.4.3 VLIW构架的编译器优化 34
1.5 处理器介绍 36
1.5.1 超标量处理器——Core微构架 36
1.5.2 标量处理器实例 38
第2章 OR1200构架 42
2.1 OpenRISC概述 42
2.1.1 寻址模式 43
2.1.2 位和字节次序 43
2.1.3 寄存器集 44
2.1.4 指令集及指令格式 47
2.1.5 例外模型 55
2.1.6 内存管理 58
2.1.7 高速缓存模型和高速缓存一致性 60
2.1.8 调试单元(可选) 62
2.1.9 执行计数单元(可选) 63
2.1.10 电源管理(可选) 63
2.1.11 可编程中断控制器(可选) 63
2.1.12 Tick定时器(可选) 64
2.2 OR1200构架 64
2.2.1 CPU/DSP核心 65
2.2.2 数据和指令高速缓存 67
2.2.3 数据与指令MMU 68
2.2.4 可编程的中断控制器 70
2.2.5 Tick定时器 71
2.2.6 电源管理支持 71
2.2.7 调试单元 71
2.2.8 时钟与复位 72
2.2.9 Wishbone接口 72
2.3 OR1200核心寄存器 72
2.4 OR1200的IO接口说明 73
2.5 OR1200核心硬件配置 76
第3章 Wishbone片上总线 77
3.1 概述 77
3.2 基本特点 78
3.3 接口信号定义 79
3.4 Wishbone支持的互联类型 81
3.5 Wishbone总线周期 82
3.5.1 一般操作 82
3.5.2 单次读/写周期 83
3.5.3 块读周期 85
3.5.4 块写周期 86
3.5.5 RMW操作 87
3.5.6 数据组织 88
3.6 Wishbone寄存反馈总线周期 89
3.6.1 周期的同步与异步结束方式之对比 89
3.6.2 Wishbone寄存反馈周期结束方式 90
3.6.3 突发结束 91
3.6.4 地址不变突发 92
3.6.5 地址增加突发 93
3.7 Wishbone规范对IP文档的要求 94
3.8 Wishbone从设备接口示例 94
3.8.1 一台8位从设备 94
3.8.2 一台32位RTL级随机
3.8.2 数生成器从设备 95
3.9 Wishbone对RAM/ROM的支持 97
3.9.1 Wishbone与RAM和ROM的互联 97
3.9.2 Wishbone兼容的RAM和
3.9.2 Flash仿真模型 97
3.10 Wishbone点到点连接示例 99
3.11 Wishbone共享总线连接示例 99
3.12 地址译码 101
3.13 仲裁器的设计 102
3.14 小结 103
第4章 CPU/DSP核心 104
4.1 CPU/DSP核心 104
4.1.1 CPU/DSP核心模块的接口 104
4.1.2 CPU/DSP源代码模块功能说明 106
4.1.3 CPU/DSP核心模块流水线 107
4.1.4 CPU/DSP核心寄存器说明 107
4.1.5 OR1200的数据流程 108
4.2 IF级 109
4.2.1 genpc源代码模块 109
4.2.2 if模块 112
4.3 ID级 115
4.3.1 ctrl模块接口说明 115
4.3.2 ctrl模块源代码分析 117
4.4 EX级 126
4.4.1 operandmuxes模块 126
4.4.2 alu模块 129
4.4.3 (乘法器)mult_mac模块 134
4.5 系统控制模块 138
4.5.1 sprs模块 139
4.5.2 cfgr模块 147
4.5.3 except模块 150
4.5.4 freeze模块 158
4.6 MA级(lsu模块) 161
4.7 WB级 167
4.7.1 wbmux源代码模块 167
4.7.2 rf模块 169
第5章 OpenRISC存储系统 175
5.1 概述 175
5.1.1 现代计算机存储系统原理 175
5.1.2 OpenRISC存储系统构成 177
5.1.3 虚拟存储系统的工作原理 177
5.1.4 MMU寄存器说明 182
5.2 OpenRISC的高速缓存 185
5.2.1 一般高速缓存的工作原理 185
5.2.2 OpenRISC高速缓存的工作原理 187
5.2.3 Cache读写操作的总线周期 188
5.2.4 dcache寄存器 190
5.3 OpenRISC的虚拟存储系统源码分析 191
5.3.1 OR1200_dmmu_top模块源码分析 191
5.3.2 OR1200_dmmu_tlb模块源码分析 193
5.4 OpenRISC高速缓存的源码分析 196
5.4.1 OR1200_dc_top模块 196
5.4.2 OR1200数据缓冲存储器 199
5.4.3 OR1200_dc_fsm模块 200
5.5 片上存储器QMEM 205
第6章 OpenRISC的主要外设 212
6.1 概述 212
6.2 写缓冲模块OR1200_sb 212
6.3 总线接口单元模块OR1200_wb_biu 215
6.4 计时器模块OR1200_tt 220
6.5 可编程中断控制器模块OR1200_pic 223
6.6 电源管理模块OR1200_pm 225
第7章 OpenRISC调试接口 230
7.1 OR1200的调试功能概述 230
7.2 调试单元OR1200_du模块 231
7.2.1 调试单元的寄存器定义 231
7.2.2 调试单元的源码分析 237
7.3 JTAG开发接口模块 245
7.3.1 JTAG开发接口模块的工作原理 245
7.3.2 OR1200与JTAG开发接口的连接 246
7.3.3 JTAG调试接口的顶层模块dbg_top 246
7.3.4 Dbg_registers和Dbg_trace模块 261
7.4 小结 269
第8章 编译器移植 270
8.1 编译过程简介 270
8.1.1 编译流程 270
8.1.2 编译过程中的优化概述 271
8.1.3 编译程序组成 275
8.2 GNU开发工具链 276
8.2.1 GCC 4.0简介 277
8.2.2 binutils工具 280
8.2.3 gdb调试工具 281
8.3 RTL语言 282
8.3.1 平台描述及抽象机标准指令 283
8.3.2 RTL语法简介 285
8.3.3 RTL示例 286
8.3.4 标准指令模式 288
8.4 OR32平台GCC编译器移植 289
8.4.1 标准指令模式的实现方法 290
8.4.2 or32.md文件 290
8.4.3 define_expand功能扩展 293
8.5 OR32平台binutils的移植 294
8.5.1 指令编码接口 295
8.5.2 目标文件平台相关信息宏定义 298
8.5.3 opcodes库 300
8.6 OR32工具链的编译安装 303
第9章 Linux平台移植 306
9.1 编写OR32复位例外 306
9.1.1 reset(复位)例外 307
9.1.2 初始化内存管理器(函数_mc_init) 307
9.1.3 初始化UART(函数_early_uart_init) 309
9.1.4 CPU启动函数_start 309
9.1.5 IC和DC的启动 311
9.1.6 用于例外调试的宏定义 312
9.2 内核启动(函数start_kernel) 315
9.2.1 中断操作 316
9.2.2 tick定时器底层接口函数 320
9.3 内核启动时建立
9.3 平台(函数setup_arch) 321
9.3.1 TLB管理底层接口函数 322
9.3.2 OR32控制台驱动程序 323
9.4 例外处理 324
9.4.1 通用例外入口处理宏 325
9.4.2 出入例外的现场保护 327
9.4.3 返回处理 328
9.4.4 页错误处理例程 330
9.4.5 外部中断例外处理 332
9.4.6 DTLB/ITLB失靶例外处理 333
9.4.7 启动的DTLB/ITLB失靶处理 335
9.4.8 系统调用例外处理 336
9.5 运行时用到的底层接口 337
9.5.1 线程创建及切换 337
9.5.2 硬件配置 339
9.5.3 定义小于1ms的延迟函数 340
9.5.4 ELF相关定义 340
9.5.5 用户与内核空间之间的数据传递 340
9.5.6 系统调用参数处理 343
9.5.7 寄存器及栈 344
9.6 Linux移植 345
9.6.1 or1ksim仿真器 345
9.6.2 OpenRISC参考平台 348
第10章 OpenRISC参考设计
第10章 与FPGA移植 349
10.1 OpenRISC的功能验证 349
10.1.1 处理器设计中的功能验证 349
10.1.2 OR1200的基本验证 349
10.1.3 OpenRSIC参考验证
10.1.3 平台ORP_SOC 353
10.2 ORP_SOC的FPGA移植 355
10.2.1 FPGA开发流程 355
10.2.2 Altera Cyclone II
10.2.2 FPGA的架构与资源 357
10.2.3 ORP_SOC到Altera FPGA的移植 358
10.3 FPGA开发板的设计与使用 364
第11章 开放源代码以太网MAC控制器IP 366
11.1 开放源代码以太网媒体
11.1 访问控制器IP 366
11.1.1 以太网媒体访问控制协议概要 366
11.1.2 ORP_SoC的以太网
11.1.2 MAC控制器IP核的主要特点 368
11.2 以太网MAC控制器IP顶层模块 368
11.2.1 功能 368
11.2.2 以太网MAC控制器IP
11.2.2 顶层模块的源码分析 369
11.3 MII接口模块 373
11.3.1 MII接口模块的功能 373
11.3.2 MII接口顶层模块源代码分析 375
11.3.3 MII时钟生成模块 379
11.3.4 MII移位输出模块 379
11.3.5 MII输出控制模块 381
11.4 以太网数据发送模块 381
11.4.1 以太网MAC数据发送
11.4.1 模块功能描述 381
11.4.2 以太网MAC数据顶层
11.4.2 模块顶层模块 382
11.4.3 以太网MAC数据发送
11.4.3 控制状态机模块 386
11.4.4 以太网MAC数据发送
11.4.4 计数器模块 388
11.4.5 发送随机数产生模块 389
11.5 以太网数据接收模块 390
11.5.1 以太网MAC数据接收模块的功能 390
11.5.2 以太网MAC数据接收顶层模块 390
11.5.3 以太网MAC数据接收状态机 393
11.5.4 以太网MAC数据接收计数器模块 394
11.5.5 以太网MAC数据
11.5.5 接收地址校验模块 396
11.6 以太网MAC控制模块 397
11.6.1 以太网MAC控制模块的功能 397
11.6.2 以太网MAC控制模块的顶层模块 398
11.6.3 以太网MAC发送控制模块 401
11.6.4 以太网MAC接收控制模块 403
11.7 以太网MAC状态模块 406
11.8 以太网MAC寄存器模块 408
11.9 以太网MAC Wishbone接口模块 411
11.9.1 功能描述 411
11.9.2 源代码分析 413
11.10 小结 436
第12章 USB设备功能模块 437
12.1 USB 2.0包标识符及传输控制概述 437
12.2 USB IP核的整体结构 438
12.2.1 USB 2.0 IP核模块组成说明 438
12.2.2 USB数据缓冲与传递 441
12.2.3 USB功能模块的源代码组织 444
12.3 寄存器文件模块usbf_rf 444
12.3.1 USB寄存器功能说明 444
12.3.2 模块usbf_rf源代码分析 448
12.3.3 端点寄存器文件 452
12.4 Wishbone接口模块usbf_wb 457
12.5 内存缓冲区仲裁器
12.5 模块usbf_mem_arb 459
12.6 协议层模块 460
12.6.1 IDMA模块 461
12.6.2 协议引擎模块 468
12.6.3 包装配模块 480
12.6.4 包拆卸模块 484
12.7 UTMI接口模块 487
12.7.1 UTMI标准说明 487
12.7.2 模块usbf_utmi_if源代码分析 489
12.7.3 USB连线状态及速度协调模块 490
第13章 全定制芯片设计方法 502
13.1 集成电路设计概述 502
13.1.1 集成电路的设计分类 502
13.1.2 FPGA到ASIC设计的转换 502
13.2 芯片设计流程 503
13.2.1 EDA工具介绍 504
13.2.2 前端设计概述 504
13.2.3 后端设计概述 505
13.3 DC工具综合 507
13.3.1 DC工具综合的基本流程说明 508
13.3.2 综合的基本概念 510
13.3.3 DC的工艺库信息说明 513
13.3.4 DC的命令说明 518
13.3.5 ORP的综合 522
13.4 PrimeTime静态时序分析 527
13.4.1 静态时序分析概述 527
13.4.2 PrimeTime用户流程 529
13.5 可测性设计 530
13.5.1 DFT技术概述 531
13.5.2 DFT Compiler流程 535
13.5.3 ATPG工具TetraMAX 537
13.6 自动布局布线 540
13.7 版图的物理验证 562
13.7.1 DRC流程 562
13.7.2 LVS流程 568
附录A 循环冗余校验算法分析与实现 570
附录B 基于元胞自动机和线性反馈移
附录B 位寄存器的硬件随机数生成器 579
附录C Verilog RTL设计中的常见问题 587
参考文献 595