第1章 SOPC及常用软核处理器概述 1
1.1 从SoC到SOPC 1
1.2 常用软核处理器概述 2
1.2.1 LEON系列 2
1.2.2 Altera公司的NiosII 3
1.2.3 OpenCores组织的OpenRisc系列 4
第2章 OR1200软核的配置 6
2.1 OR1200软核的架构 6
2.2 OR1200软核的组成 7
2.3 OR1200软核的配置 10
第3章 Wishbone片上总线 15
3.1 Wishbone总线概述 15
3.2 Wishbone总线信号和时序 17
3.2.1 Wishbone总线信号 17
3.2.2 Wishbone总线循环 20
3.2.3 Wishbone互连接口、结构及工作原理 28
3.2.4 Wishbone主设备和从设备模型 30
第4章 软件开发工具的安装和使用 31
4.1 GNU交叉编译环境的组成和建立 31
4.1.1 交叉编译 31
4.1.2 binutils 31
4.1.3 GCC 32
4.1.4 GDB 33
4.1.5 链接描述文件 35
4.2 make和Makefile的使用 37
4.2.1 Makefile的基本结构 37
4.2.2 Makefile的变量 38
4.2.3 隐含规则 39
4.2.4 make的命令行选项 40
4.3 加深对Makefile的理解 41
4.3.1 汇编语言 41
4.3.2 C语言 43
4.4 OR1k系列CPU的体系结构模拟器or1ksim 46
第5章 片内存储器和I/O控制器的设计 47
5.1 FPGA内部的RAM块资源 47
5.1.1 RAM块的使用 47
5.1.2 CycloneII的RAM块 48
5.1.3 单口RAM块的描述方法 49
5.1.4 简单双口RAM块的描述方法 51
5.1.5 单口ROM块的描述方法 53
5.2 I/O控制器的结构和功能 55
5.2.1 通用I/O控制器 55
5.2.2 最简I/O控制器 56
5.3 ORP概念及其定义 57
5.4 设计与Wishbone兼容的RAM和ROM模块 58
5.4.1 RAM模块 58
5.4.2 ROM模块 61
5.5 最简I/O控制器及综合结果分析 62
5.5.1 最简I/O控制器 62
5.5.2 综合结果分析 63
5.6 最小系统的建立、编译和仿真 65
5.6.1 最小系统的建立 65
5.6.2 编写程序 66
5.6.3 仿真 66
第6章 Debug接口的实现 69
6.1 JTAG原理和标准 69
6.1.1 JTAG简介 69
6.1.2 基本单元 69
6.1.3 总体结构 70
6.1.4 TAP状态机 72
6.1.5 应用 73
6.2 调试模块的结构及其与OR1200的连接方法 73
6.2.1 DBGI简介 73
6.2.2 DBGI结构 74
6.2.3 I/O端口 76
6.2.4 内部寄存器 77
6.2.5 链结构 77
6.2.6 未来发展 78
6.3 DBGI的集成和板级功能仿真 80
6.3.1 DBGI的集成 80
6.3.2 板级功能仿真 81
6.4 GDB、JTAG、GDBServer、orlksim的工作原理 83
6.4.1 GDB 83
6.4.2 GDB和JTAG Server 84
6.4.3 GDB和GDBServer 85
6.4.4 GDB和orlksim 86
6.4.5 JTAG协议 86
6.5 使用GDB和JTAG Server进行Debug接口的调试 92
6.6 使用DDD进行可视化调试 93
第7章 UART16550内核的结构和使用 95
7.1 UART的概念、功能和发展 95
7.2 UART的通信模式、数据格式和流控制 96
7.2.1 通信模式 96
7.2.2 数据格式 97
7.2.3 流控制 97
7.3 工业标准UART 16550 99
7.3.1 特性 99
7.3.2 接口和结构 99
7.3.3 寄存器 101
7.4 兼容16550的UART IP Core 105
7.5 OR1200的异常和外部中断处理 106
7.6 集成带有UART的系统 109
7.6.1 集成 109
7.6.2 编程 109
7.7 仿真带有UART的系统 111
7.8 验证带有UART的系统 113
第8章 SDRAM的时序和控制器 114
8.1 SRAM与DRAM 114
8.1.1 SRAM 114
8.1.2 IS61LV25616 115
8.1.3 DRAM 116
8.1.4 SRAM和DRAM比较 117
8.2 SDRAM的内部结构和控制时序 117
8.2.1 结构 117
8.2.2 命令和初始化 121
8.2.3 模式寄存器 122
8.2.4 Bank行激活 124
8.2.5 读/写时序 125
8.2.6 自动刷新 128
8.3 SDRAM控制器wb_sdram 129
8.4 集成和仿真存储系统 130
8.4.1 存储器模型 130
8.4.2 system_sdram.v 131
8.4.3 ar2000_sdram.v 132
8.4.4 ar2000_sdram_bench.v 133
8.4.5 结构 135
8.4.6 仿真 135
8.5 验证存储系统 137
第9章 外部异步总线控制器的设计 140
9.1 异步总线控制器的结构和功能 140
9.1.1 异步总线的组成 140
9.1.2 异步总线的读/写时序 140
9.2 编写异步总线控制器 142
9.2.1 编写代码 142
9.2.2 I/O端口 144
9.3 异步总线控制器的仿真 145
9.4 集成和仿真存储系统 148
9.4.1 存储器模型 148
9.4.2 system_eabus.v 148
9.4.3 ar2000_eabus.v 149
9.4.4 ar2000_eabus_bench.v 150
9.4.5 结构 153
9.4.6 编程 154
9.4.7 仿真 154
第10章 ORPMon的功能和实现 156
10.1 C语言函数接口 156
10.1.1 寄存器使用 156
10.1.2 堆栈帧 157
10.1.3 参数传递和返回值 158
10.2 ORPMon的基本功能及其实现方法 158
10.2.1 ORPMon 158
10.2.2 ORPMon基本工作原理 159
10.2.3 特殊功能寄存器操作 161
10.3 ORPMon的移植 162
10.3.1 源代码 162
10.3.2 链接文件 167
10.4 ORPMon的仿真 171
10.5 ORPMon的运行 172
10.6 使用Flash运行ORPMon 174
第11章 以太网控制器的结构和Linux驱动11.1 以太网的CSMA/CD原理和MII接口 175
11.1.1 CSMA/CD 175
11.1.2 MII接口 175
11.1.3 CSMA/CD的帧接收和发送过程 177
11.2 OpenCores的以太网控制器 179
11.2.1 以太网控制器简介 179
11.2.2 以太网控制器的接口 180
11.2.3 以太网控制器的寄存器 181
11.2.4 缓冲描述符 189
11.3 以太网控制器的内部结构 191
11.3.1 控制器总体结构 191
11.3.2 MII管理模块 191
11.3.3 接收模块 192
11.3.4 发送模块 194
11.3.5 控制模块 196
11.3.6 状态模块 196
11.3.7 寄存器模块 197
11.3.8 Wishbone接口模块 198
11.4 嵌入式Linux简介 199
11.5 对Linux进行配置、修改、编译、下载和运行 200
11.6 使用ORPMon启动Linux 205
11.6.1 设计可以启动Linux的ORPMon 205
11.6.2 固化Linux 206
11.7 集成以太网控制器 206
11.7.1 system_eth.v 207
11.7.2 ar2000_eth.v 208
11.7.3 验证以太网控制器 210
第12章 LCD控制器的使用 213
12.1 OpenCores的VGA/LCD控制器 213
12.2 VGA/LCD控制器的接口与寄存器 215
12.2.1 VGA/LCD控制器的接口 215
12.2.2 VGA/LCD控制器的寄存器 217
12.3 VGA/LCD控制器的使用方法 222
12.3.1 视频时序 222
12.3.2 像素色彩 223
12.3.3 带宽需求 224
12.4 集成和仿真VGA/LCD控制器 225
12.5 验证VGA/LCD控制器 230
第13章 SBSRAM的时序和控制器设计 231
13.1 SBSRAM控制器的结构和功能 231
13.1.1 SBSRAM的概念 231
13.1.2 SBSRAM控制器的读/写操作和时序 231
13.2 编写SBSRAM控制器 234
13.3 SBSRAM控制器的仿真 237
13.4 集成SSRAM控制器 240
13.4.1 system_ssram.v 240
13.4.2 ar2000_ssram.v 242
13.5 验证SSRAM控制器 243
附录 UP-SOPC2000教学科研平台 244
参考文献 247