基于Nios II的嵌入式SoPC系统设计与Verilog开发实例

更多详情

内容简介: 本书利用Altera FPGA开发板和Nios II软核处理器,揭示了基于FPGA的嵌入式系统特有的硬件可编程性,采用“做中学”的模式,介绍了基于Verilog的嵌入式SoPC设计的基本概念和技术。本书通过许多实例说明软、硬件的设计和开发过程,并给出了完整的代码和丰富的实验题目。

目录: 第1章 嵌入式系统概述 1
1.1 引言 1
1.1.1 嵌入式系统定义 1
1.1.2 示例系统 1
1.2 系统设计需求 2
1.3 嵌入式SoPC系统 3
1.4 本书结构 6
1.5 文献注释 6

第1部分 基本数字电路开发

第2章 门级组合电路 8
2.1 引言 8
2.2 总则 8
2.3 基本词法元素和数据类型 9
2.4 数据类型 10
2.4.1 四值系统 10
2.4.2 数据类型组 10
2.4.3 数字的表示方法 11
2.4.4 运算符 12
2.5 程序框架 12
2.5.1 端口声明 12
2.5.2 程序主体 13
2.5.3 信号声明 13
2.5.4 另一个实例 14
2.6 结构描述 14
2.7 测试平台 17
2.8 文献注释 19
2.9 推荐实验 19
2.9.1 门级greater-than电路代码 19
2.9.2 门级二进制译码器代码 19
第3章 FPGA和EDA软件概述 20
3.1 FPGA 20
3.1.1 通用FPGA器件概述 20
3.1.2 Altera Cyclone II系列器件
概述 21
3.2 Altera DE1和DE2开发板概述 23
3.3 开发流程 25
3.4 Quartus II概述 26
3.5 Quartus II简易教程 27
3.5.1 创建设计工程 29
3.5.2 建立测试平台进行RTL仿真 33
3.5.3 编译工程 33
3.5.4 时序分析 34
3.5.5 编程FPGA器件 34
3.6 ModelSim HDL仿真器的简易
教程 36
3.7 文献注释 39
3.8 推荐实验 40
3.8.1 门级greater-than电路 40
3.8.2 门级二进制译码器 40
第4章 RTL组合电路 41
4.1 运算符 41
4.1.1 算术运算符 42
4.1.2 移位运算符 42
4.1.3 关系运算符和等式运算符 43
4.1.4 位运算符、缩减运算符和
逻辑运算符 43
4.1.5 拼接运算符和复制运算符 44
4.1.6 条件运算符 44
4.1.7 运算符优先级 45
4.1.8 表达式位长调整 45
4.1.9 z和x的综合 46
4.2 组合逻辑电路的always语句块 47
4.2.1 基本语法和行为 48
4.2.2 进程赋值语句 48
4.2.3 变量数据类型 49
4.2.4 简单实例 49
4.3 if语句 50
4.3.1 语法 50
4.3.2 实例 51
4.4 case语句 52
4.4.1 语法 52
4.4.2 实例 53
4.4.3 casez和casex语句 54
4.4.4 全case语句和并行case语句 55
4.5 条件控制结构的路由结构 56
4.5.1 优先级路由网络 56
4.5.2 多路选择网络 57
4.6 always块的一般编码原则 58
4.6.1 组合逻辑电路代码的常见
错误 58
4.6.2 指南 61
4.7 参数和常数 61
4.7.1 常数 61
4.7.2 参数 62
4.7.3 Verilog-1995中参数的使用 64
4.8 设计实例 65
4.8.1 十六进制数的七段LED
译码器 65
4.8.2 符号幅值加法器 67
4.8.3 桶形移位器 68
4.8.4 简易浮点数加法器 70
4.9 文献注释 73
4.10 推荐实验 73
4.10.1 多功能桶形移位器 73
4.10.2 双优先级编码器 74
4.10.3 BCD码增量器 74
4.10.4 浮点数greater-than电路 74
4.10.5 浮点数和有符号整数间的
转换电路 74
4.10.6 加强的浮点数加法器 75
第5章 常规时序电路 76
5.1 引言 76
5.1.1 D触发器和寄存器 76
5.1.2 同步系统 77
5.1.3 代码开发 77
5.2 触发器和寄存器的HDL代码 77
5.2.1 D触发器 78
5.2.2 寄存器 80
5.2.3 寄存器文件 81
5.2.4 SRAM 83
5.3 简单的设计实例 84
5.3.1 移位寄存器 84
5.3.2 二进制计数器及其变形 86
5.4 时序电路的测试平台 89
5.5 时序分析 92
5.5.1 时序参数 92
5.5.2 Quartus II中的时序考虑 93
5.6 案例研究 94
5.6.1 秒表 94
5.6.2 FIFO 缓存器 98
5.7 Cyclone II器件的嵌入式存储器
模块 102
5.7.1 DE1开发板上的存储器
选项概述 102
5.7.2 嵌入式M4K模块概述 102
5.7.3 添加嵌入式存储器模块的
方法 103
5.7.4 导出同步单口RAM的HDL
模块 105
5.7.5 导出同步简单双口RAM的
HDL模块 106
5.7.6 导出同步真双口RAM的
HDL模块 108
5.7.7 导出同步ROM的HDL
模块 109
5.7.8 指定RAM初始值的HDL
模块 110
5.7.9 FIFO缓存器的再仿真 112
5.8 文献注释 113
5.9 推荐实验 113
5.9.1 可编程方波发生器 113
5.9.2 脉宽调制电路 113
5.9.3 旋转方块电路 113
5.9.4 心跳电路 114
5.9.5 旋转的LED标语电路 114
5.9.6 增强型秒表 114
5.9.7 数据宽度可变的FIFO 114
5.9.8 堆栈 115
5.9.9 基于ROM的符号幅值加
法器 115
5.9.10 基于ROM的温度转换 115
第6章 FSM 116
6.1 简介 116
6.1.1 Mealy和Moore输出 116
6.1.2 FSM的表示方法 116
6.2 FSM代码开发 118
6.3 设计实例 120
6.3.1 上升沿检测器 120
6.3.2 去抖电路 125
6.3.3 测试电路 128
6.4 文献注释 130
6.5 推荐实验 130
6.5.1 双边沿检测器 130
6.5.2 另一种去抖电路 130
6.5.3 停车场占用情况计数器 131
第7章 FSMD 132
7.1 引言 132
7.1.1 单一RT操作 132
7.1.2 ASMD图 133
7.1.3 含寄存器的选择框 134
7.2 FSMD代码开发 135
7.2.1 基于RT方法的去抖电路 135
7.2.2 含显示描述数据通路组件
的代码 136
7.2.3 含隐式描述数据通路组件
的代码 139
7.2.4 比较 141
7.3 设计实例 142
7.3.1 斐波那契数电路 142
7.3.2 除法电路 145
7.3.3 二进制—BCD码转换电路 148
7.3.4 周期计数器 151
7.3.5 精确的低频计数器 154
7.4 文献注释 157
7.5 推荐实验 157
7.5.1 另一种去抖电路 157
7.5.2 BCD—二进制码转换电路 158
7.5.3 含BCD I/O的斐波那契数
生成电路:设计方法1 158
7.5.4 含BCD I/O的斐波那契数
生成电路:设计方法2 158
7.5.5 自动进位制的低频计数器 158
7.5.6 反应计时器 159
7.5.7 Babbage差分机模拟电路 160
第8章 Verilog精选主题 161
8.1 阻塞赋值语句和非阻塞赋值
语句 161
8.1.1 概述 161
8.1.2 组合电路 163
8.1.3 存储器单元 164
8.1.4 混合阻塞和非阻塞两种赋值
语句的时序电路 165
8.2 时序电路的另一种编码方式 167
8.2.1 二进制计数器 167
8.2.2 FSM 170
8.2.3 FSMD 171
8.2.4 总结 173
8.3 有符号数据类型的使用 173
8.3.1 概述 173
8.3.2 Verilog-1995中的有符号数 174
8.3.3 Verilog-2001中的有符号数 175
8.4 综合中函数的使用 175
8.4.1 概述 175
8.4.2 例子 176
8.5 附加的测试平台开发结构 178
8.5.1 always块和initial块 178
8.5.2 进程语句 178
8.5.3 时序控制 180
8.5.4 延时控制 180
8.5.5 事件控制 181
8.5.6 wait语句 181
8.5.7 timescale指令 181
8.5.8 系统函数和系统任务 182
8.5.9 用户自定义的函数和任务 186
8.5.10 完备的测试平台的实例 187
8.6 文献注释 193
8.7 推荐实验 193
8.7.1 使用阻塞赋值语句和非阻
塞赋值语句的移位寄存器 193
8.7.2 BCD计数器的另一种编码
风格 194
8.7.3 FIFO缓存器的另一种编码
方式 194
8.7.4 斐波那契数生成电路的另一
种编码方式 194
8.7.5 双模式比较器 194
8.7.6 增强型二进制计数器的
监测器 194
8.7.7 FIFO缓存器的测试平台 194

第2部分 基本Nios II软件开发

第9章 Nios II处理器概述 196
9.1 引言 196
9.2 寄存器文件和ALU 198
9.2.1 寄存器文件 198
9.2.2 ALU 198
9.3 存储器和I/O结构 198
9.3.1 Nios II的存储器接口 198
9.3.2 存储器层次结构概述 198
9.3.3 虚拟存储器 199
9.3.4 存储器保护 199
9.3.5 高速缓冲存储器 199
9.3.6 紧密耦合存储器 200
9.3.7 I/O结构 200
9.3.8 互连结构 200
9.4 异常和中断处理 201
9.5 JTAG调试模块 201
9.6 文献注释 201
9.7 推荐实验 201
9.7.1 Nios II和MIPS的比较 201
第10章 Nios II系统的引用和底层
访问 202
10.1 开发流程的再介绍 202
10.1.1 硬件开发 202
10.1.2 软件开发 202
10.1.3 闪烁LED系统 204
10.2 Nios II硬件生成教程 204
10.2.1 在Quartus II中创建一个
硬件工程 204
10.2.2 创建Nios II系统,生成
HDL代码 204
10.2.3 创建顶层HDL文件用于
实例化Nios II系统 209
10.2.4 编译和下载程序 210
10.3 Nios II SBT GUI教程 210
10.3.1 创建BSP库 210
10.3.2 使用BSP编辑器配置BSP 211
10.3.3 创建用户应用目录并添加
应用程序文件 212
10.3.4 生成和运行软件 212
10.3.5 检查代码大小 213
10.4 针对软硬件一致性的系统
id核 213
10.5 底层I/O直接访问 214
10.5.1 C语言指针的复习 215
10.5.2 I/O寄存器的C指针 215
10.6 鲁棒的底层I/O访问 216
10.6.1 system.h 216
10.6.2 alt_types.h 217
10.6.3 io.h 217
10.7 一些关于底层I/O操作的C语
言技巧 218
10.7.1 位处理 218
10.7.2 打包和拆包 219
10.8 软件开发 219
10.8.1 基本的嵌入式程序框架 219
10.8.2 主程序和任务程序 220
10.9 文献注释 221
10.10 推荐实验 221
10.10.1 追赶LED电路 221
10.10.2 碰撞LED电路 222
10.10.3 脉宽调制电路 222
10.10.4 旋转方块电路 222
10.10.5 心跳电路 222
10.11 完整程序清单 222
第11章 预先设计的Nios II I/O外设 224
11.1 概述 224
11.2 PIO核 224
11.2.1 配置 225
11.2.2 寄存器映射 227
11.2.3 用户可见寄存器 227
11.3 JTAG UART 核 228
11.3.1 配置 228
11.3.2 寄存器映射 229
11.4 内部定时器核 229
11.4.1 配置 229
11.4.2 寄存器映射 230
11.5 增强型闪烁LED Nios II系统 231
11.5.1 SOPC设计 232
11.5.2 顶层HDL文件 235
11.6 增强型闪烁LED系统软件
开发 236
11.6.1 设备驱动介绍 236
11.6.2 增强型闪烁LED系统程序
结构 236
11.6.3 主程序 237
11.6.4 函数命名习惯 237
11.7 设备驱动程序 238
11.7.1 PIO外设驱动 238
11.7.2 JATA UART 240
11.7.3 定时器 241
11.8 任务程序 242
11.8.1 函数flashsys_init_v1( ) 242
11.8.2 函数sw_get_command_v1( ) 242
11.8.3 函数jtaguart_disp_msg_v1( ) 243
11.8.4 函数sseg_disp_msg_v1( ) 243
11.8.5 函数led_flash_v1( ) 244
11.9 软件构建和测试 245
11.10 文献注释 245
11.11 推荐实验 245
11.11.1 闪烁LED系统的
“Uptime”特性 245
11.11.2 不同定时器模式的计数 246
11.11.3 JTAG UART输入 246
11.11.4 增强型冲撞LED电路 246
11.11.5 旋转LED标语电路 246
11.11.6 改进的秒表 246
11.11.7 停车场占用情况计数器 246
11.11.8 带按钮开关控制的反应
时间定时器 247
11.11.9 带键盘控制的反应时间
定时器 247
11.11.10 串行端口通信 247
11.12 完整程序清单 247
第12章 预先设计的Nios II I/O驱动和
HAL API 256
12.1 HAL概述 256
12.1.1 桌面式嵌入式系统和
准系统嵌入式系统 256
12.1.2 HAL范式 257
12.1.3 设备类别 258
12.1.4 遵从HAL的设备驱动 258
12.1.5 _regs.h文件 259
12.1.6 基于HAL的初始化序列 260
12.2 BSP 260
12.2.1 概述 260
12.2.2 BSP文件结构 261
12.2.3 BSP配置 262
12.3 基于HAL的闪烁LED程序 263
12.3.1 使用通用I/O设备的
函数 264
12.3.2 使用非通用I/O设备的
函数 266
12.3.3 初始化程序和主程序 266
12.3.4 软件构建和测试 267
12.4 设备驱动程序考虑 268
12.4.1 I/O访问法 268
12.4.2 比较 269
12.4.3 本书中的驱动程序 271
12.5 文献注释 271
12.6 推荐实验 271
12.6.1 闪烁LED系统的
“Uptime”特性 271
12.6.2 改进的碰撞LED电路 271
12.6.3 停车场使用情况计数器 271
12.6.4 带键盘控制的反应定时器 271
12.6.5 数字闹钟 271
12.7 完整程序清单 272
第13章 中断及中断服务程序 275
13.1 HAL框架中的中断处理 275
13.1.1 概述 275
13.1.2 Nios II处理器的中断
控制器 276
13.1.3 顶层异常处理程序 276
13.1.4 中断服务程序 277
13.2 基于中断的闪烁LED程序 277
13.2.1 定时器核的中断 278
13.2.2 定时器核的驱动 278
13.2.3 中断服务程序(版本1) 279
13.2.4 中断服务程序(版本2) 281
13.3 中断和调度 282
13.3.1 调度 282
13.3.2 性能 283
13.4 文献注释 284
13.5 推荐实验 285
13.5.1 含按钮开关ISR程序的
闪烁LED系统 285
13.5.2 ISR驱动的闪烁LED
系统 285
13.5.3 闪烁LED系统中的
“Uptime”特性 285
13.5.4 带键盘控制的反应时间
定时器 285
13.5.5 数字闹钟 285
13.6 完整程序清单 285

第3部分 用户I/O外设开发

第14章 带PIO核的用户I/O外设 292
14.1 引言 292
14.2 集成除法电路到Nios II
系统 292
14.2.1 PIO模块 292
14.2.2 集成 293
14.3 测试 293
14.4 推荐实验 296
14.4.1 除法核的ISR 296
14.4.2 8位数据的除法核 296
14.4.3 64位数据的除法核 296
14.4.4 斐波那契数电路 297
14.4.5 周期计数器 297
第15章 Avalon互连与SOPC组件 298
15.1 引言 298
15.2 Avalon MM接口 300
15.2.1 Avalon MM从设备接口
信号 300
15.2.2 Avalon MM从设备接口
性质 301
15.2.3 Avalon MM从设备时序 301
15.3 Avalon接口的系统互连结构 304
15.4 SOPC I/O组件封装电路 305
15.4.1 接口I/O缓存器 306
15.4.2 内存对齐 308
15.4.3 Avalon MM主设备的
输出译码 308
15.4.4 Avalon MM主设备的
输入多路选择 310
15.4.5 实际考虑 311
15.5 SOPC组件构建指南 311
15.5.1 Avalon接口 312
15.5.2 寄存器映射 312
15.5.3 封装的除法电路 313
15.5.4 SOPC组件创建 315
15.5.5 SOPC组件实例化 320
15.6 测试 320
15.7 文献注释 323
15.8 推荐实验 323
15.8.1 除法核的ISR 323
15.8.2 除法核的另一种缓存
方案 323
15.8.3 8位数据的除法核 323
15.8.4 64位数据的除法核 323
15.8.5 斐波那契数电路 323
15.8.6 周期计数器 323
第16章 SRAM和SDRAM控制器 324
16.1 DE1开发板存储器资源 324
16.2 时序和时钟管理的概述 324
16.2.1 时钟分配网络 324
16.2.2 片外访问的时序问题 325
16.2.3 PLL 326
16.3 SRAM概述 327
16.3.1 SRAM单元 327
16.3.2 基本结构 327
16.3.3 时序 328
16.3.4 IS61LV25616AL SRAM
芯片 329
16.4 SRAM控制器IP核 330
16.4.1 Avalon接口 331
16.4.2 控制器电路 332
16.4.3 SOPC组件的创建 333
16.5 DRAM概述 334
16.5.1 DRAM单元 334
16.5.2 基本的DRAM结构 335
16.5.3 DRAM时序 336
16.6 SDRAM概述 337
16.6.1 基本的SDRAM结构 337
16.6.2 SDRAM时序 338
16.6.3 ICSI IS42S16400 SDRAM
芯片 340
16.7 SDRAM控制器和PLL 340
16.7.1 基本的SDRAM控制器 340
16.7.2 SDRAM控制器IP核 341
16.7.3 SOPC PLL IP核 342
16.8 测试系统 344
16.8.1 测试硬件配置 344
16.8.2 测试软件 346
16.9 文献注释 349
16.10 推荐实验 349
16.10.1 没有I/O寄存器的
SRAM控制器 349
16.10.2 SRAM控制器速度测试 349
16.10.3 带Avalon MM三态接
口的SRAM控制器 349
16.10.4 SDRAM控制器时钟
偏斜测试 349
16.10.5 存储器性能比较 350
16.10.6 锁存器的影响 350
16.10.7 从零构建SDRAM
控制器 350
16.11 完整程序清单 350
第17章 PS2键盘和鼠标 352
17.1 引言 352
17.2 PS2接收子系统 352
17.2.1 PS2设备到主机的通信
协议 352
17.2.2 设计和代码 353
17.3 PS2传送子系统 356
17.3.1 主机到PS2设备的通信
协议 356
17.3.2 设计和代码 357
17.4 完整的PS2系统 361
17.5 PS2控制器IP核开发 363
17.5.1 Avalon接口 363
17.5.2 寄存器映射 363
17.5.3 封装的PS2系统 364
17.5.4 SOPC组件创建 365
17.6 PS2驱动 365
17.6.1 寄存器映射 366
17.6.2 写操作程序 366
17.6.3 读操作程序 366
17.7 键盘驱动 367
17.7.1 扫描码概述 367
17.7.2 与主机的交互 368
17.7.3 驱动程序 369
17.8 鼠标驱动 373
17.8.1 PS2鼠标协议概述 373
17.8.2 与主机的交互 373
17.8.3 驱动程序 374
17.9 测试 376
17.10 书中用户IP核的使用 379
17.10.1 文件组织结构 379
17.10.2 SOPC库集成 379
17.10.3 综合的Nios II测试系统 380
17.11 文献注释 385
17.12 推荐实验 385
17.12.1 带看门狗定时器的PS2
接收子系统 385
17.12.2 软件接收FIFO 385
17.12.3 软件PS2控制器 385
17.12.4 键盘控制的LED闪烁
电路 385
17.12.5 增强型键盘驱动程序I 386
17.12.6 增强型键盘驱动程序II 386
17.12.7 遥控模式鼠标驱动 386
17.12.8 滚轮鼠标驱动 386
17.13 完整程序清单 386
第18章 VGA控制器 399
18.1 引言 399
18.1.1 CRT显示器的基本操作 399
18.1.2 DE1板上的VGA端口 400
18.1.3 视频控制器 400
18.2 VGA同步 402
18.2.1 水平同步 402
18.2.2 垂直同步 403
18.2.3 VGA同步信号时序计算 403
18.2.4 HDL实现 404
18.3 基于SRAM的视频RAM
控制器 406
18.3.1 视频存储器概述 406
18.3.2 DE1开发板的存储器
问题 407
18.3.3 Ad Hoc SRAM控制器 407
18.3.4 HDL代码 411
18.4 调色板电路 414
18.5 视频控制器IP核的开发 415
18.5.1 完整的视频控制器 415
18.5.2 Avalon 接口 416
18.5.3 寄存器映射 416
18.5.4 封装的视频控制器 416
18.5.5 SOPC组件创建 418
18.6 视频驱动 418
18.6.1 视频内存访问程序 418
18.6.2 几何模型程序 419
18.6.3 位图处理函数 421
18.6.4 位映射文本程序 423
18.7 鼠标处理程序 426
18.8 测试程序 427
18.8.1 图形绘制程序 429
18.8.2 通用绘图程序 430
18.8.3 竖条交换程序 432
18.8.4 鼠标演示程序 433
18.8.5 位映射文本程序 434
18.9 位图文件处理 434
18.9.1 BMP格式概述 435
18.9.2 BMP文件的生成 435
18.9.3 基于子画面的设计 436
18.9.4 BMP文件访问 437
18.9.5 基于主机的文件系统 437
18.9.6 位图文件获取程序 437
18.10 文献注释 441
18.11 推荐实验 442
18.11.1 基于PLL的VGA控
制器 442
18.11.2 使用16位内存配置的
VGA控制器 442
18.11.3 三位色彩深度的VGA
控制器 442
18.11.4 一位颜色深度的VGA
控制器 442
18.11.5 带双缓存的VGA控
制器 442
18.11.6 分辨率为320 × 240的
VGA控制器 442
18.11.7 含垂直模式操作的VGA
控制器 442
18.11.8 几何模型函数 442
18.11.9 位图处理函数 443
18.11.10 模拟“神奇画板”玩具 443
18.11.11 调色板查找表电路 443
18.11.12 虚拟LED闪烁系统
控制板 443
18.11.13 虚拟模拟挂钟 443
18.12 推荐工程 443
18.12.1 可配置的VGA控制器 443
18.12.2 使用系统SDRAM的
VGA控制器 444
18.12.3 绘图程序 444
18.12.4 视频游戏 444
18.13 完整程序清单 444
第19章 音频编解码控制器 469
19.1 引言 469
19.1.1 编解码器概述 469
19.1.2 WM8731芯片简介 469
19.1.3 WM8731芯片寄存器 470
19.2 I2C控制器 473
19.2.1 I2C接口概述 473
19.2.2 HDL实现 474
19.3 编解码器数据访问控制器 481
19.3.1 数字音频接口概述 481
19.3.2 HDL实现 481
19.4 音频编解码控制器IP核
开发 484
19.4.1 完整的音频编解码控
制器 484
19.4.2 Avalon接口 486
19.4.3 寄存器映射 486
19.4.4 封装的音频编解码控
制器 487
19.4.5 SOPC组件创建 489
19.5 编解码驱动 489
19.5.1 I2C命令程序 490
19.5.2 数据源选择程序 490
19.5.3 芯片初始化程序 491
19.5.4 音频数据访问程序 491
19.6 测试程序 492
19.7 音频文件处理 496
19.7.1 WAV格式概述 496
19.7.2 音频格式转换程序 497
19.7.3 音频数据读取程序 497
19.8 文献注释 499
19.9 推荐实验 500
19.9.1 软件I2C控制器 500
19.9.2 使用主设备时钟模式设计
硬件数据访问控制器 500
19.9.3 使用从设备时钟模式的
软件数据访问控制器 500
19.9.4 使用主设备时钟模式的
软件数据访问控制器 500
19.9.5 可配置的数据访问控
制器 500
19.9.6 语音录音机 500
19.9.7 实时正弦波发生器 501
19.9.8 实时音频波形显示 501
19.9.9 回音效果 501
19.10 推荐工程 501
19.10.1 完整的I2C控制器 501
19.10.2 数字均衡器 501
19.10.3 数字音频示波器 502
19.11 完整程序清单 502
第20章 SD卡控制器 514
20.1 SD卡概述 514
20.2 SPI控制器 514
20.2.1 SPI接口概述 514
20.2.2 HDL实现 515
20.3 SPI控制器IP核开发 518
20.3.1 Avalon接口 518
20.3.2 寄存器映射 518
20.3.3 封装的SPI控制器 519
20.3.4 SOPC组件创建 520
20.4 SD卡协议 520
20.4.1 SD卡的命令和响应格式 520
20.4.2 初始化和辨识过程 522
20.4.3 数据读和写过程 523
20.5 SPI与SD卡驱动程序 524
20.5.1 SPI驱动程序 524
20.5.2 SD卡驱动程序 525
20.6 文件访问 531
20.6.1 FAT16结构概述 531
20.6.2 只读FAT16文件访问
驱动程序 535
20.7 测试程序 543
20.8 SD卡的数据传输性能 547
20.9 文献注释 548
20.10 推荐实验 548
20.10.1 SD卡的数据传输性能
测试 548
20.10.2 鲁棒性强的SD卡驱动
程序 548
20.10.3 SD卡存取的专用处
理器 548
20.10.4 基于硬件的SD卡的读写
操作 548
20.10.5 SD卡信息读取 549
20.10.6 MMC卡支持 549
20.10.7 多扇区读写操作 549
20.10.8 带CRC校验的SD卡
驱动程序 549
20.10.9 数字音乐播放器 549
20.10.10 数字相框 549
20.10.11 附加的FAT功能 549
20.11 推荐工程 550
20.11.1 HAL API文件访问集成 549
20.12 完整程序清单 550

第4部分 硬件加速器实例研究

第21章 GCD加速器 572
21.1 引言 572
21.2 软件实现 573
21.3 硬件实现 573
21.3.1 ASMD图 573
21.3.2 HDL实现 574
21.4 时间测量 576
21.4.1 HAL时间戳驱动 576
21.4.2 定制的硬件计数器 577
21.5 GCD加速器IP核开发 577
21.5.1 Avalon接口 577
21.5.2 寄存器映射 577
21.5.3 封装的GCD加速器 578
21.6 测试程序 580
21.6.1 GCD程序 580
21.6.2 主程序 581
21.7 性能比较 582
21.8 文献注释 583
21.9 推荐实验 583
21.9.1 使用其他处理器配置
的性能 583
21.9.2 最小规模的GCD加速器 583
21.9.3 带后补零电路的GCD
加速器 583
21.9.4 64位数据的GCD加
速器 583
21.9.5 128位数据的GCD加
速器 583
21.9.6 欧拉算法的GCD 583
21.10 完整程序清单 583
第22章 Mandelbrot集合分形加速器 587
22.1 引言 587
22.1.1 Mandelbrot集合的概述 587
22.1.2 Mandelbrot集合点的
确定 588
22.1.3 配色方案 589
22.1.4 分形图像的生成 589
22.2 定点运算 590
22.3 函数calc_frac_point( )的软件
实现 591
22.4 函数calc_frac_point( )的硬件
实现 592
22.4.1 ASMD图 592
22.4.2 HDL实现 592
22.5 Mandelbrot集合分形加速器
IP核开发 594
22.5.1 Avalon接口 594
22.5.2 寄存器映射 595
22.5.3 封装的Mandelbrot集合
分形加速器 595
22.6 测试程序 596
22.6.1 分形图形用户接口 596
22.6.2 分形硬件加速器引擎控制
程序 598
22.6.3 分形绘图程序 598
22.6.4 文本区显示程序 599
22.6.5 鼠标处理程序 601
22.6.6 主程序 603
22.7 讨论 603
22.8 文献注释 604
22.9 推荐实验 604
22.9.1 含一个乘法器的硬件
加速器 604
22.9.2 逃逸条件修改的硬件
加速器 604
22.9.3 使用Q4.12格式的硬件
加速器 604
22.9.4 多个分形引擎的硬件
加速器 604
22.9.5 “Burning-ship”分形 605
22.9.6 改进的测试程序 605
22.10 推荐工程 605
22.10.1 浮点硬件加速器 605
22.10.2 通用画分形图平台 605
22.11 完整程序清单 605
第23章 直接数字频率合成 616
23.1 引言 616
23.2 设计和实现 616
23.2.1 数字波形的直接合成 616
23.2.2 未调制的模拟波形的直接
合成 617
23.2.3 调制的模拟波形的直接
合成 618
23.2.4 HDL实现 618
23.3 DDFS IP核开发 621
23.3.1 Avalon接口 621
23.3.2 寄存器映射 621
23.3.3 封装的DDFS电路 622
23.3.4 编解码器的DAC集成 623
23.4 DDFS驱动 623
23.4.1 配置程序 624
23.4.2 初始化程序 625
23.5 测试 625
23.5.1 音符的概括和合成 625
23.5.2 测试程序 626
23.6 文献注释 630
23.7 推荐实验 630
23.7.1 正交相位载波生成 630
23.7.2 缩减的相位—幅度查找表 631
23.7.3 合成音乐播放器 631
23.7.4 键盘钢琴 631
23.7.5 键盘记录仪 631
23.7.6 硬件包络发生器 631
23.7.7 谐波叠加合成器 631
23.7.8 采样合成器 631
23.8 推荐工程 632
23.8.1 声音发生器 632
23.8.2 函数发生器 632
23.8.3 完整的电子合成器 632
23.9 完整程序清单 632
参考文献 640