第1章 绪论 1
1.1 基本概念 1
1.1.1 SOC 1
1.1.2 SOPC 2
1.1.3 IP核 2
1.2 NiosⅡ软核处理器简介 4
1.2.1 可定制特性 4
1.2.2 系统性能可配置性 5
1.2.3 延长产品生存周期 7
1.3 SOPC设计流程 8
1.4 支持NiosⅡCPU的FPGA型号 9
1.4.1 Cyclone和CycloneⅡ系列 9
1.4.2 Stratix和StratixⅡ系列 11
1.5 最新的FPGA系列器件 13
第2章 SOPC的硬件开发环境及硬件开发流程 16
2.1 创建QuartusⅡ工程 16
2.2 创建NiosⅡ系统模块 21
2.2.1 创建顶层实体 21
2.2.2 创建NiosⅡ系统模块 22
2.2.3 分配IP模块的地址和中断号 33
2.2.4 配置NiosⅡ系统 34
2.2.5 生成NiosⅡ并加入到工程中 35
2.2.6 加入引脚和嵌入式锁相环 36
2.3 设计优化 43
2.3.1 面积与速度的优化 44
2.3.2 时序约束与设置 45
2.3.3 Fitter设置 45
2.4 编译 47
2.4.1 编译设置 47
2.4.2 引脚分配 49
2.4.3 编译用户设计 51
2.5 编程下载 52
2.5.1 下载 53
2.5.2 验证 54
第3章 NiosⅡ体系结构 56
3.1 NiosⅡ处理器结构 56
3.2 NiosⅡ寄存器文件 59
3.2.1 通用寄存器 59
3.2.2 控制寄存器 60
3.3 存储器和I/O组织 60
3.3.1 指令和数据总线 61
3.3.2 高速缓存 63
3.3.3 紧耦合存储器 64
3.3.4 地址映射 64
3.4 寻址方式 65
第4章 Avalon总线规范 66
4.1 Avalon总线简介 66
4.2 Avalon总线基本概念 67
4.2.1 Avalon外设和交换架构 68
4.2.2 Avalon信号 69
4.2.3 主端口和从端口 69
4.2.4 传输 70
4.2.5 主从端口对 70
4.2.6 周期 70
4.3 Avalon信号 70
4.3.1 信号类型的完整列表 71
4.3.2 信号极性 74
4.3.3 信号命名规则 74
4.3.4 Avalon信号时序说明 74
4.3.5 传输属性 75
4.4 从端口传输 75
4.4.1 从端口信号详述 76
4.4.2 从端口读传输 78
4.4.3 从端口写传输 82
4.5 主端口传输 85
4.5.1 主端口信号 86
4.5.2 主端口基本读传输 87
4.5.3 主端口基本写传输 88
4.5.4 等待周期、建立时间和保持时间属性 89
4.5.5 流水线、三态和突发属性 90
4.6 流水线传输属性 90
4.6.1 具有固定延迟的从端口流水线读传输 90
4.6.2 具有可变延迟的从端口流水线读传输 92
4.6.3 主端口流水线传输 94
4.7 流控制 95
4.7.1 具有流控制的从端口传输 96
4.7.2 具有流控制的主端口传输 99
4.8 三态传输 100
4.8.1 三态从端口传输 101
4.8.2 三态主端口传输 107
4.9 突发传输 108
4.9.1 限制 109
4.9.2 主端口突发传输 109
4.9.3 从端口突发传输 112
4.10 和传输无关的信号 115
4.10.1 中断请求信号 115
4.10.2 复位控制信号 116
4.11 地址对齐 116
4.11.1 本地地址对齐 117
4.11.2 动态地址对齐 117
第5章 基于FPGA的DSP开发技术 119
5.1 基于MATLAB/DSP Builder的DSP模块设计流程 119
5.2 正弦波发生器模块的设计 121
5.2.1 建立设计模型 121
5.2.2 Simulink模型仿真 129
5.2.3 使用Signal Compiler将算法转化成硬件实现 133
5.2.4 使用QuartusⅡ进行时序仿真 135
5.2.5 硬件实现与测试 137
5.2.6 使用嵌入式逻辑分析仪SignalTapⅡ进行测试 140
5.3 DSP Builder的层次设计 147
5.4 FIR滤波器设计 150
5.4.1 FIR滤波器原理 150
5.4.2 16阶FIR滤波器的设计 151
5.4.3 使用MATLAB的滤波器设计工具进行滤波器系数的计算 156
第6章 软件设计流程和方法 164
6.1 NiosⅡIDE简介 164
6.1.1 工程管理器 165
6.1.2 编辑器和编译器 167
6.1.3 调试器 168
6.1.4 闪存编程器 169
6.2 软件开发流程 170
6.2.1 NiosⅡ程序的构成 170
6.2.2 NiosⅡIDE软件开发步骤 171
6.3 调试/运行程序 180
6.3.1 调试/运行环境设置 180
6.3.2 调试/运行程序 184
6.3.3 下载程序到Flash 184
6.4 硬件抽象层库 187
6.4.1 HAL简介 187
6.4.2 HAL体系结构 188
6.5 使用HAL开发应用程序 191
6.5.1 NiosⅡIDE工程结构 191
6.5.2 系统描述文件——system.h文件 192
6.5.3 数据宽度和HAL类型定义 193
6.5.4 UNIX风格的接口 193
6.5.5 文件系统 194
6.5.6 使用字符型设备 196
6.5.7 使用文件子系统 197
6.5.8 使用定时器设备 197
6.5.9 使用Flash设备 200
6.5.10 使用DMA设备 205
6.5.11 启动顺序和入口点 210
6.6 异常处理 212
6.6.1 异常处理概念 212
6.6.2 硬件如何工作 213
6.6.3 ISR性能数据 217
6.6.4 调试ISR 220
第7章 NiosⅡ常用外设编程 221
7.1 并行输入/输出内核 221
7.1.1 PIO寄存器描述 221
7.1.2 软件编程 223
7.2 定时器 225
7.2.1 定时器寄存器描述 226
7.2.2 软件编程 227
7.3 异步串口UART 229
7.3.1 UART内核功能描述 229
7.3.2 在SOPC Builder中实例化UART 231
7.3.3 UART寄存器描述 234
7.3.4 中断行为 237
7.3.5 软件编程 238
7.4 Optrex 16207 LCD控制器内核 240
7.4.1 功能描述 241
7.4.2 软件编程 241
7.5 通用Flash接口控制器内核 242
7.5.1 功能描述 242
7.5.2 在SOPC Builder中实例化CFI控制器内核 243
7.5.3 软件编程 244
7.6 DMA控制器内核 244
7.6.1 功能描述 245
7.6.2 在SOPC Builder中实例化DMA内核 247
7.6.3 软件编程 248
第8章 NiosⅡ系统高级开发 250
8.1 用户定制指令 250
8.1.1 定制指令综述 251
8.1.2 定制指令体系结构的类型 252
8.1.3 软件接口 258
8.1.4 实现NiosⅡ定制指令 260
8.2 用户定制外设 266
8.2.1 元件开发流程 267
8.2.2 硬件设计 268
8.2.3 软件设计 269
8.2.4 验证元件 270
8.2.5 设计实例:脉冲宽度调制器从外设 270
8.2.6 共享元件 283
8.3 C2H编译器的使用 284
8.3.1 C2H概念 285
8.3.2 适合硬件加速的C代码 288
8.3.3 C2H编译器设计流程 290
附录A 电子钟C语言的源程序和头文件 300
附录B GX-SOC/SOPC专业级创新开发实验平台硬件介绍 317
附录C SOPC实验 327
参考文献 366