第1章 EDA概述与可编程逻辑器件 1
1.1 EDA技术 1
1.2 EDA技术发展历程 1
1.2.1 20世纪70年代的计算机辅助设计CAD阶段 2
1.2.2 20世纪80年代的计算机辅助工程设计CAE阶段 2
1.2.3 20世纪90年代电子系统设计自动化EDA阶段 2
1.3 面向CPLD/FPGA的EDA技术主要内容 3
1.3.1 大规模可编程逻辑器件 3
1.3.2 硬件描述语言(HDL) 4
1.3.3 软件开发工具 5
1.3.4 实验开发系统 5
1.3.5 关于EDA技术的学习重点及学习方法 6
1.4 EDA技术应用对象 6
1.4.1 可编程逻辑器件 7
1.4.2 半定制或全定制ASIC 7
1.4.3 混合ASIC 7
1.5 面向CPLD/FPGA的EDA开发流程 7
1.5.1 设计输入 8
1.5.2 逻辑综合和优化 9
1.5.3 适配(目标器件的布局布线) 9
1.5.4 仿真 10
1.5.5 目标器件的编程/下载 10
1.6 可编程逻辑器件 10
1.6.1 PLD的分类 11
1.6.2 PROM可编程原理 12
1.6.3 GAL 14
1.7 CPLD的结构与可编程原理 15
1.7.1 CPLD的基本结构 15
1.7.2 逻辑阵列宏单元 16
1.7.3 I/O控制模块 18
1.7.4 可编程连线阵列 20
1.8 FPGA的结构与可编程原理 21
1.8.1 FPGA的结构描述 21
1.8.2 查找表逻辑结构 22
1.8.3 CycloneⅢ系列器件与工作原理 22
1.9 硬件测试技术 25
1.9.1 内部逻辑测试 25
1.9.2 JTAG边界扫描测试 26
1.10 FPGA/CPLD产品概述 26
1.10.1 Lattice公司的PLD器件 26
1.10.2 Xilinx公司的PLD器件 27
1.10.3 Altera公司的PLD器件 28
1.11 编程与配置 30
1.12 数字系统的设计方法简介 31
1.12.1 数字系统的设计准则 32
1.12.2 数字系统设计的艺术 33
1.13 QuartusⅡ 33
1.14 IP核 35
1.15 EDA的发展趋势 35
1.16 本章小结 36
1.17 习题 37
第2章 原理图输入法逻辑电路设计流程 38
2.1 原理图输入设计方法的特点 38
2.2 数字频率计设计任务导入 39
2.3 原理图输入方式基本设计流程 39
2.3.1 建立工作库文件夹和存盘原理图空文件 40
2.3.2 创建工程 41
2.3.3 功能简要分析 44
2.3.4 编译前设置 45
2.3.5 全程编译 46
2.3.6 时序仿真测试电路功能 48
2.4 引脚设置和编程下载 51
2.4.1 引脚锁定 51
2.4.2 配置文件下载 53
2.4.3 AS模式直接编程配置器件 54
2.4.4 JTAG间接模式编程配置器件 54
2.4.5 USB-Blaster编程配置器安装方法 56
2.5 层次化设计 56
2.6 6位十进制频率计设计 59
2.6.1 时序控制器设计 60
2.6.2 顶层电路设计与测试 61
2.7 本章小结 61
2.8 习题 61
第3章 VHDL结构和要素 63
3.1 VHDL程序基本结构 63
3.1.1 实体(ENTITY) 64
3.1.2 结构体(ARCHITECTURE) 67
3.2 子程序(SUBPROGRAM) 69
3.2.1 函数(FUNCTION) 70
3.2.2 过程(PROCEDURE) 72
3.2.3 重载函数 74
3.2.4 转换函数 77
3.2.5 决断函数 78
3.3 VHDL库 78
3.3.1 库的种类 78
3.3.2 库的用法 79
3.4 VHDL程序包 80
3.4.1 程序包定义 80
3.4.2 预定义程序包 82
3.5 配置(CONFIGURATION) 84
3.6 VHDL文字规则 85
3.6.1 关键字 85
3.6.2 标识符 85
3.6.3 数字 86
3.6.4 字符和字符串 87
3.6.5 下标名及下标段名 87
3.6.6 注释 88
3.7 数据对象 88
3.7.1 变量(VARIABLE) 89
3.7.2 信号(SIGNAL) 89
3.7.3 常量(CONSTANT) 90
3.8 数据类型 91
3.8.1 VHDL预定义数据类型 91
3.8.2 用户自定义数据类型 96
3.8.3 数据类型转换 100
3.9 运算操作符 102
3.10 本章小结 105
3.11 习题 105
第4章 Quartus Ⅱ应用深入 106
4.1 用VHDL设计十进制计数器的步骤 106
4.1.1 建立工作库文件夹和编辑设计文件 106
4.1.2 创建工程 108
4.1.3 编译前设置 110
4.1.4 全程编译 111
4.1.5 时序仿真 112
4.2 引脚锁定与硬件测试 115
4.2.1 引脚锁定 115
4.2.2 配置文件下载 117
4.2.3 AS模式编程配置器件 118
4.3 嵌入式逻辑分析仪使用方法 119
4.4 本章小结 123
4.5 习题 123
第5章 VHDL语言描述语句 125
5.1 VHDL语句概述 125
5.2 VHDL并行语句 126
5.2.1 并行信号赋值语句 127
5.2.2 进程语句(PROCESS) 132
5.2.3 块语句(BLOCK) 136
5.2.4 子程序的并行调用语句 137
5.2.5 元件例化语句(COMPONENT) 138
5.2.6 生成语句(GENERATE) 141
5.3 VHDL顺序语句 143
5.3.1 顺序赋值语句 144
5.3.2 IF语句 146
5.3.3 CASE语句 149
5.3.4 LOOP语句 153
5.3.5 NULL语句 158
5.3.6 WAIT语句 159
5.4 VHDL程序设计难点解析 160
5.4.1 面向硬件的设计思维 161
5.4.2 组合电路和时序电路 163
5.4.3 可编程逻辑设计的基本原则 164
5.4.4 设计思想和技巧 165
5.5 本章小结 166
5.6 习题 167
第6章 基本逻辑电路设计 168
6.1 组合逻辑电路设计 168
6.1.1 基本门电路 168
6.1.2 三态门及总线缓冲器 172
6.1.3 单向总线驱动器 173
6.1.4 双向总线缓冲器 174
6.2 时序逻辑电路设计 174
6.2.1 时序电路特殊信号描述 175
6.2.2 常用时序电路设计 176
6.2.3 寄存器和移位寄存器 179
6.2.4 计数器 181
6.2.5 序列信号发生器、检测器 186
6.3 存储器设计 189
6.3.1 只读存储器(ROM) 189
6.3.2 静态数据存储器(SRAM) 190
6.3.3 先进先出堆栈(FIFO) 192
6.4 本章小结 194
6.5 习题 194
第7章 CPLD/FPGA应用系统设计实例 196
7.1 键盘接口的FPGA设计 196
7.1.1 设计要求 196
7.1.2 设计分析 196
7.1.3 设计实现 201
7.2 LED数码管显示控制 202
7.2.1 LED数码管工作原理 203
7.2.2 静态LED数码管驱动原理及其FPGA电路设计 203
7.2.3 动态LED数码管驱动原理及其FPGA电路设计 205
7.3 序列检测器的设计 208
7.3.1 序列检测器设计思路 208
7.3.2 VHDL源程序 209
7.3.3 仿真结果 210
7.4 数字频率计的设计 210
7.4.1 数字频率计设计思路 210
7.4.2 数字频率计的VHDL源程序 212
7.5 数字秒表的设计 215
7.5.1 数字秒表设计思路 215
7.5.2 数字秒表的VHDL源程序 216
7.6 交通信号控制器的设计 219
7.6.1 交通信号控制器设计思路 219
7.6.2 VHDL源程序 220
7.6.3 系统的有关仿真 226
7.6.4 系统的硬件验证 227
7.6.5 设计技巧分析 227
7.7 智能函数发生器的设计 227
7.7.1 智能函数发生器的设计思路 228
7.7.2 模块及模块功能 228
7.8 SPWM发生器设计 234
7.8.1 SPWM信号产生的基本原理 234
7.8.2 设计方案 235
7.8.3 设计的顶层原理图和程序 236
7.8.4 主要模块的VHDL程序 236
7.9 本章小结 240
7.10 习题 240
第8章 有限状态机的设计 243
8.1 状态机的一般形式 243
8.1.1 状态机的特点 244
8.1.2 状态机的基本结构和功能 244
8.1.3 一般状态机的VHDL描述 245
8.2 摩尔状态机的设计 248
8.2.1 多进程结构状态机 249
8.2.2 单进程Moore型有限状态机 253
8.2.3 序列检测器之状态机设计 255
8.3 Mealy型有限状态机的设计 257
8.4 状态机图形编辑设计方法 260
8.5 状态编码 262
8.5.1 直接输出型编码 263
8.5.2 顺序编码 265
8.5.3 一位热码状态编码 266
8.6 非法状态处理 266
8.6.1 程序直接导引法 267
8.6.2 状态编码监测法 268
8.7 三层电梯控制器的设计 268
8.7.1 三层电梯控制器的功能 269
8.7.2 三层电梯控制器的设计思路 269
8.7.3 三层电梯控制器的综合设计 269
8.7.4 三层电梯控制器的波形仿真 274
8.7.5 N层电梯控制器的设计技巧分析 274
8.8 本章小结 275
8.9 习题 275
第9章 宏功能模块与IP应用 277
9.1 宏功能模块概述 277
9.1.1 知识产权核的应用 277
9.1.2 使用Mega Wizard Plug-In Manager 278
9.1.3 在QuartusⅡ中对宏功能模块进行例化 279
9.1.4 宏功能模块LPM计数器的使用方法 279
9.2 存储器模块的定制与应用 284
9.2.1 存储器初始化文件生成 284
9.2.2 定制LPM ROM元件 287
9.3 在系统存储器单元读写编辑器 290
9.4 RAM定制 292
9.4.1 RAM定制和调用 292
9.4.2 对LPM_RAM仿真测试 294
9.4.3 VHDL的存储器描述及相关属性 295
9.4.4 存储器配置文件属性定义和结构设置 296
9.5 FIFO定制 298
9.6 8051单片机IP核应用 299
9.7 本章小结 301
9.8 习题 301
第10章 FPGA在DSP领域中的应用 303
10.1 快速加法器的设计 303
10.1.1 4位二进制并行加法器 303
10.1.2 8位二进制加法器的源程序 304
10.2 快速乘法器的设计 305
10.2.1 设计思路 305
10.2.2 快速乘法器VHDL源程序 306
10.3 数字滤波器的设计 311
10.3.1 数字滤波器概述 311
10.3.2 数字滤波器的原理分析 312
10.3.3 数字滤波器系统实现 313
10.3.4 数字滤波器系统原理框图 313
10.3.5 数字滤波器项层IIR模块 314
10.3.6 数字滤波器的VHDL语言程序 314
10.3.7 数字滤波器系统性能测试 316
10.4 本章小结 316
10.5 习题 317
第11章 FPGA在通信工程中的应用 319
11.1 二进制振幅键控(ASK)调制器与解调器设计 319
11.1.1 ASK信号调制原理 319
11.1.2 ASK信号解调原理 320
11.1.3 ASK调制VHDL程序 321
11.1.4 ASK解调VHDL程序 323
11.2 二进制频移键控(FSK)调制器与解调器设计 324
11.2.1 FSK信号调制原理 324
11.2.2 FSK信号解调原理 325
11.2.3 FSK调制VHDL程序及仿真 326
11.2.4 FSK解调VHDL程序及仿真 327
11.3 二进制相位键控(PSK)调制器与解调器设计 329
11.3.1 基本概念 329
11.3.2 CPSK信号调制 331
11.3.3 DPSK信号调制 332
11.3.4 DPSK信号解调 333
11.3.5 DPSK调制方框图及电路符号 334
11.4 UART接口设计 336
11.4.1 UART概述 336
11.4.2 UART系统FPGA接口电路 337
11.4.3 UART系统FPGA程序设计 337
11.5 本章小结 337
11.6 习题 338
第12章 SOPC系统开发技术 340
12.1 NiosII 32位RSIC嵌入式处理器 340
12.1.1 Nios II结构 340
12.1.2 Nios II处理器的特点 343
12.1.3 Nios II处理器的优势 343
12.2 基于Nios II的SOPC开发流程 345
12.2.1 Nios II系统设计流程 345
12.2.2 Avalon总线外设 347
12.2.3 Avalon总线信号 351
12.2.4 自定制指令 353
12.2.5 HAL系统库 354
12.3 SOPC系统设计示例 355
12.3.1 基于Nios II LED控制的硬件系统设计 356
12.3.2 基于Nios II IDE环境LED控制的软件设计 367
12.4 本章小结 370
12.5 习题 371
附录1 VHDL程序设计的语法结构 373
附录2 VHDL语言关键词和保留字 377
附录3 VHDL预定义程序包及缩略词汇表 379
附录4 实验及实训项目 382
参考文献 422