第1章 可编程逻辑器件概述 1
1.1 EDA技术及其应用 1
1.2 可编程逻辑器件的分类及原理 3
1.2.1 EPLD和CPLD 3
1.2.2 FPGA 3
1.2.3 FPGA与CPLD的比较 6
1.3 PLD的设计开发 7
1.3.1 PLD设计方法 7
1.3.2 PLD设计流程 8
1.4 Altera可编程逻辑器件 12
1.4.1 Stratix系列 12
1.4.2 Arria系列 21
1.4.3 Cyclone系列 22
1.4.4 MAX系列 29
1.5 思考与练习 33
第2章 VHDL基础 34
2.1 VHDL概述 34
2.1.1 硬件描述语言概述 34
2.1.2 VHDL的特点及设计流程 35
2.2 VHDL程序基本结构 37
2.2.1 实体 37
2.2.2 结构体 39
2.2.3 配置 45
2.2.4 程序包 46
2.3 VHDL中的数据 48
2.3.1 标识符 49
2.3.2 数据对象 49
2.3.3 数据类型 54
2.4 VHDL中的表达式 60
2.5 VHDL描述语句 64
2.5.1 顺序描述语句 64
2.5.2 并行描述语句 78
2.6 思考与练习 80
第3章 VHDL程序设计 81
3.1 基本数字电路的VHDL描述 81
3.1.1 基本逻辑门电路 81
3.1.2 编码器和译码器电路 85
3.1.3 数据选择器 90
3.1.4 加法器 91
3.1.5 乘法器 93
3.1.6 触发器电路 95
3.1.7 寄存器电路 102
3.1.8 计数器电路 108
3.1.9 存储器 115
3.2 有限状态机 116
3.2.1 有限状态机的基本描述 116
3.2.2 有限状态机状态编码方式 117
3.2.3 有限状态机的输出和复位 122
3.3 应用实例——表决器、双口RAM的读取 126
3.4 思考与练习 127
第4章 Altera开发工具的使用 128
4.1 Quartus Ⅱ集成开发环境 128
4.1.1 概述 128
4.1.2 Quartus Ⅱ的安装 129
4.1.3 Quartus Ⅱ10.0图形用户界面 132
4.1.4 设计输入 135
4.1.5 对设计工程进行设置和约束 138
4.1.6 设计综合 141
4.1.7 布局布线 144
4.1.8 仿真 149
4.1.9 时序分析 151
4.1.10 编程与配置 157
4.2 在Altera CPLD/FPGA中运行第一个程序 161
4.2.1 实验目的、环境及实验原理 162
4.2.2 实验步骤 162
4.3 应用实例——MAX Ⅱ内嵌UFM模块的使用 164
4.3.1 实验目的、环境及实验原理 165
4.3.2 实验步骤 165
4.4 思考与练习 169
第5章 可编程逻辑设计的基本问题 170
5.1 可编程逻辑设计基本原则 170
5.1.1 面向硬件原则 170
5.1.2 系统性原则 170
5.1.3 面积与速度之间的互换关系 172
5.1.4 同步设计原则 172
5.2 常用设计思想与技巧 172
5.2.1 串并转换 173
5.2.2 应用实例——RS232数据串并转换 173
5.2.3 乒乓操作 174
5.2.4 流水线操作 175
5.3 常见问题及处理方法 180
5.3.1 竞争冒险产生的原因和处理方法 180
5.3.2 时钟设计常见问题和处理方法 181
5.3.3 建立和保持时间的处理方法 182
5.4 应用实例——利用FIFO缓存器做高速缓存 182
5.5 思考与练习 188
第6章 典型数字信号处理算法FPGA设计 189
6.1 坐标旋转数字计算机 189
6.1.1 CORDIC算法原理 189
6.1.2 CORDIC算法结构 193
6.1.3 CORDIC算法设计 195
6.1.4 程序分析及设计 197
6.2 有限脉冲响应数字滤波器 197
6.2.1 FIR数字滤波器原理 197
6.2.2 FIR数字滤波器程序设计 200
6.2.3 程序分析及设计 202
6.3 无限脉冲响应数字滤波器 202
6.3.1 IIR数字滤波器原理 202
6.3.2 IIR数字滤波器程序设计 204
6.3.3 程序分析及设计 206
6.4 快速傅里叶变换 206
6.4.1 FFT算法原理 207
6.4.2 FFT程序设计 208
6.4.3 程序分析及设计 209
6.5 思考与练习 209
第7章 通用接口的FPGA设计 210
7.1 通用异步收发器 210
7.1.1 UART功能简介 210
7.1.2 UART实现结构 211
7.1.3 UART程序设计 211
7.2 CAN总线控制器 219
7.2.1 CAN总线协议概述 219
7.2.2 CAN通信控制器实现框架 221
7.2.3 CAN通信控制器程序设计 223
7.3 以太网控制器 226
7.3.1 以太网基本原理 227
7.3.2 以太网控制器实现框架 228
7.3.3 以太网控制器程序设计 229
7.4 应用实例——双UART设计 236
7.5 思考与练习 238
第8章 基于SOPC的嵌入式系统设计 239
8.1 Altera SOPC技术及其设计开发流程 239
8.1.1 SOPC技术简介 239
8.1.2 SOPC Builder使用 240
8.1.3 SOPC设计开发流程 243
8.2 Nios Ⅱ处理器 244
8.3 Avalon总线 246
8.3.1 Avalon总线的特点 247
8.3.2 Avalon总线信号 248
8.4 Nios Ⅱ外围标准设备 251
8.4.1 SDRAM控制器 251
8.4.2 CFI控制器 256
8.4.3 EPCS控制器 258
8.4.4 并行输入/输出控制器 260
8.4.5 定时器控制器 262
8.4.6 UART核 265
8.4.7 JTAG UART核 268
8.4.8 SPI核 273
8.4.9 DMA控制器 275
8.4.10 PLL核 277
8.5 自定制用户外设 280
8.6 基于Nios Ⅱ系统开发实例 281
8.7 思考与练习 288
第9章 SOPC硬件开发 289
9.1 基于Nios Ⅱ的SOPC硬件系统开发流程 289
9.2 SOPC Builder硬件开发环境介绍 291
9.2.1 SOPC Builder的功能 291
9.2.2 SOPC Builder的组成 292
9.3 应用实例 295
9.3.1 创建一个Quartus Ⅱ工程 295
9.3.2 使用SOPC Builder创建Nios Ⅱ系统模块 297
9.3.3 添加CPU及外设IP模块 298
9.3.4 集成Nios Ⅱ系统到Quartus Ⅱ工程 305
9.3.5 设置编译选项并进行工程编译 310
9.3.6 将设计下载到目标FPGA中 312
9.4 思考与练习 313
第10章 SOPC软件开发 314
10.1 SOPC软件开发环境概述 314
10.1.1 Nios Ⅱ指令系统介绍 314
10.1.2 Nios Ⅱ处理器运行模式 317
10.2 Nios Ⅱ IDE 318
10.3 硬件抽象层系统库 320
10.3.1 HAL系统库的功能 321
10.3.2 使用HAL开发应用程序 321
10.4 应用实例 324
10.4.1 使用Nios Ⅱ IDE建立用户程序 324
10.4.2 创建一个新的C/C++应用工程 326
10.4.3 设置工程系统库属性和编译选项 327
10.4.4 编译连接工程 329
10.4.5 对程序进行运行调试 331
10.4.6 使用Flash Programmer下载 332
10.5 思考与练习 333
第11章 基于Nios Ⅱ的μC/OS-Ⅱ应用 334
11.1 μC/OS-Ⅱ操作系统简介 334
11.2 基于Nios Ⅱ的μC/OS-Ⅱ实验 335
11.2.1 系统结构图 335
11.2.2 SOPC系统的创建 336
11.2.3 基于NiosⅡ软核处理器的软件 353
11.2.4 测试硬件设计 355
11.2.5 编写μC/OS-Ⅱ的多任务控制程序 357
11.3 总结 360
11.4 思考与练习 360
参考文献 361