根据电子信息类课程理论教学和实践教学要求,以提高数字系统设计能力为目的,系统阐述EDA技术、FPGA/CPLD器件、VHDL语言和相关数字系统设计技术。以QuartusPrime、ModelSim软件为工具,按“器件-软件-语言-案例”为主线展开,内容紧贴教学实际,以可综合的设计为重点,通过诸多精选设计案例,阐述数字系统设计的方法,由浅入深介绍VHDL工程开发的技能。案例丰富,富于启发,并全部基于目标板做了验证。VHDL语言规则以VHDL-1993、VHDL-2002和VHDL-2008语言标准为依据,涵盖所有常用语法规则,对语言、语法规则用案例做阐释,用综合工具和仿真工具做验证,语言讲解全面深入。
第1章 EDA技术概述 1
1.1 EDA技术及其发展历程 1
1.2 Top-down设计思路 2
1.2.1 Top-down设计 3
1.2.2 Bottom-up设计 3
1.3 IP核复用 4
1.3.1 IP核复用技术 4
1.3.2 片上系统SoC 5
1.4 EDA设计的流程 6
1.4.1 设计输入 6
1.4.2 综合 6
1.4.3 布局布线 7
1.4.4 时序分析 7
1.4.5 功能仿真与时序仿真 7
1.4.6 编程与配置 8
1.5 常用的EDA工具软件 8
习题1 11
第2章 FPGA/CPLD器件 12
2.1 PLD器件概述 12
2.1.1 PLD器件的发展历程 12
2.1.2 PLD器件的分类 12
2.2 PLD的原理与结构 14
2.3 低密度PLD的原理与结构 15
2.4 CPLD的原理与结构 18
2.4.1 宏单元结构 18
2.4.2 典型CPLD的结构 19
2.5 FPGA的原理与结构 20
2.5.1 查找表结构 21
2.5.2 典型FPGA的结构 23
2.5.3 MAX 10器件结构 24
2.5.4 Cyclone IV器件结构 27
2.6 FPGA/CPLD的编程工艺 29
2.6.1 熔丝型开关 29
2.6.2 反熔丝型开关 29
2.6.3 浮栅编程工艺 30
2.6.4 SRAM编程工艺 31
2.7 边界扫描测试技术 32
2.8 FPGA/CPLD的编程与配置 33
2.8.1 在系统可编程 33
2.8.2 Cyclone IV器件的配置 35
2.8.3 MAX 10器件的配置 37
2.9 FPGA/CPLD产品系列 38
习题2 40
第3章 原理图与基于IP核的设计 42
3.1 Quartus Prime设计流程 42
3.2 原理图设计方式 43
3.2.1 半加器设计 43
3.2.2 1位全加器设计 46
3.2.3 编译 47
3.2.4 仿真 48
3.2.5 下载 54
3.3 基于IP核的设计 57
3.3.1 用原理图方式实现 57
3.3.2 用文本例化ROM实现 63
3.4 SignalTap II的使用方法 63
3.5 Quartus Prime的优化设置 67
习题3 69
第4章 VHDL设计入门 72
4.1 VHDL的历史 72
4.2 用VHDL设计组合电路 73
4.3 用VHDL设计时序电路 76
习题4 78
第5章 VHDL结构与要素 79
5.1 实体 79
5.1.1 类属参数说明 79
5.1.2 端口说明 81
5.2 结构体 82
5.3 VHDL库和程序包 83
5.3.1 库 83
5.3.2 程序包 84
5.4 配置 86
5.5 子程序 89
5.5.1 过程 89
5.5.2 函数 90
5.5.3 过程、函数的使用方法 90
习题5 94
第6章 VHDL基础语法 95
6.1 标识符 95
6.2 数据对象 95
6.2.1 常量 96
6.2.2 变量 96
6.2.3 信号 97
6.2.4 别名 97
6.3 VHDL数据类型 98
6.3.1 VHDL标准数据类型 98
6.3.2 IEEE预定义数据类型 101
6.3.3 其他预定义数据类型 102
6.3.4 用户自定义数据类型 104
6.4 数据类型的转换与位宽转换 107
6.4.1 数据类型的转换 107
6.4.2 位宽转换 109
6.5 VHDL运算符 110
6.5.1 逻辑运算符 110
6.5.2 关系运算符 111
6.5.3 算术运算符 112
6.5.4 并置运算符 114
6.5.5 运算符重载 114
6.5.6 省略赋值运算符 115
习题6 116
第7章 VHDL基本语句 118
7.1 顺序语句 118
7.1.1 赋值语句 118
7.1.2 IF语句 118
7.1.3 CASE语句 123
7.1.4 LOOP语句 126
7.1.5 NEXT与EXIT语句 129
7.1.6 WAIT语句 129
7.1.7 子程序调用语句 131
7.1.8 ASSERT(断言)语句 131
7.1.9 REPORT语句 132
7.1.10 NULL语句 132
7.2 并行语句 133
7.2.1 并行信号赋值语句 133
7.2.2 进程语句 137
7.2.3 块语句 139
7.2.4 元件例化语句 141
7.2.5 生成语句 142
7.2.6 并行过程调用语句 144
7.3 属性说明与定义语句 145
7.3.1 数据类型属性 145
7.3.2 数组属性 146
7.3.3 信号属性 147
7.4 VHDL-2008 148
习题7 149
第8章 VHDL设计进阶 151
8.1 行为描述 151
8.2 数据流描述 152
8.3 结构描述 157
8.3.1 用结构描述实现1位全加器 157
8.3.2 用结构描述设计4位加法器 159
8.3.3 用结构描述设计8位加法器 159
8.4 三态逻辑设计 160
8.5 分频器设计 162
8.5.1 占空比为50%的奇数分频 162
8.5.2 半整数分频 163
8.5.3 数控分频器 164
8.6 乘法器设计 165
8.6.1 用乘法运算符实现 165
8.6.2 布斯乘法器 167
8.6.3 查找表乘法器 170
8.7 存储器设计 174
8.7.1 用数组例化存储器 175
8.7.2 例化lpm_rom模块实现存储器 176
8.8 流水线设计 179
8.9 资源共享设计 181
8.10 用锁相环IP核实现倍频和相移 183
8.10.1 锁相环IP核的定制 183
8.10.2 锁相环例化和仿真 186
8.11 属性 188
习题8 189
第9章 VHDL有限状态机设计 190
9.1 有限状态机 190
9.1.1 有限状态机 190
9.1.2 枚举数据类型 192
9.2 有限状态机的描述方式 193
9.2.1 三进程表述方式 193
9.2.2 双进程表述方式 194
9.2.3 单进程表述方式 196
9.3 状态编码 197
9.3.1 常用的编码方式 197
9.3.2 状态编码的定义 199
9.3.3 用属性指定状态编码方式 199
9.4 用有限状态机实现除法器 201
9.5 用有限状态机控制流水灯 204
9.5.1 流水灯控制器 204
9.5.2 引脚分配与锁定 205
9.6 用状态机控制交通灯 210
9.7 用状态机控制字符液晶 211
习题9 216
第10章 VHDL驱动常用I/O外设 218
10.1 PS/2键盘 218
10.2 4×4矩阵键盘 222
10.3 汉字图形点阵液晶 227
10.4 VGA显示器 233
10.4.1 VGA显示原理与时序 233
10.4.2 VGA彩条信号发生器 235
10.4.3 VGA图像显示 238
10.5 TFT-LCD液晶屏 243
10.5.1 TFT-LCD屏 243
10.5.2 TFT-LCD屏显示彩色圆环 246
10.5.3 TFT-LCD屏显示动态矩形 250
10.6 音符、音乐演奏电路 252
10.6.1 音符演奏 252
10.6.2 音乐演奏 257
习题10 262
第11章 Test Bench测试与时序分析 264
11.1 Test Bench测试 264
11.1.1 Test Bench 264
11.1.2 用VHDL描述激励信号 264
11.1.3 用TEXTIO进行仿真 268
11.2 Test Bench测试实例 272
11.2.1 ASSERT(断言)语句 272
11.2.2 RECODE(记录)数据类型 274
11.3 ModelSim SE使用指南 276
11.3.1 图形界面仿真方式 278
11.3.2 命令行仿真方式 281
11.3.3 ModelSim SE时序仿真 282
11.4 时序约束与时序分析 284
11.4.1 时序分析的有关概念 284
11.4.2 用Timing Analyzer进行时序分析 286
习题11 290
第12章 VHDL设计实例 291
12.1 超声波测距 291
12.2 乘累加器 295
12.3 m序列与Gold码产生器 298
12.3.1 m序列产生器 298
12.3.2 Gold码产生器 301
12.4 频率测量 302
12.5 数字钟 306
12.6 FIR滤波器 314
12.6.1 FIR滤波器的参数设计 315
12.6.2 FIR滤波器的FPGA实现 319
习题12 323
附录 VHDL保留字 324
参考文献 325