
本书系统地介绍了EDA技术和VHDL硬件描述语言,将VHDL的基础知识、编程技巧和实用方法与实际工程开发技术在先进的EDA设计平台——Quartus II上很好地结合起来,使读者能通过本书的学习迅速了解并掌握EDA技术的基本理论和工程开发实用技术,并为后续的深入学习和发展打下坚实的理论与实践基础。
依据高校课堂教学和实验操作的规律与要求,并以提高学生的实际工程设计能力和自主创新能力为目的,全书内容作了恰当的编排,共分6个部分:EDA技术的概述;FPGA/CPLD器件的结构原理;VHDL实用技术;Quartus II及IP核的详细使用方法;基于VHDL的16位CPU设计技术;基于MATLAB和DSP Builder平台的详细的EDA设计技术和大量实用系统设计示例。除个别章节外,各章都安排了相应的习题和针对性强的实验和设计示例。书中列举的VHDL示例,都经编译通过或经硬件测试。
本书主要面向高等院校本、专科EDA技术和VHDL语言基础课,推荐作为电子工程、通信、工业自动化、计算机应用技术、电子对抗、仪器仪表、数字信号或图像处理等学科专业与相关的实验指导课的授课教材或主要参考书,同时也可作为电子设计竞赛、FPGA开发应用的自学参考书。
对于授课教师还能获赠本书CAI教学课件与实验指导课件。
前 言
根据EDA技术的最新发展,以及我国高等教育更加注重学生的工程实践能力与自主创新能力的培养,本书作为第2版进行了较大变动,删除了已过时的内容,加入了EDA技术的一些最新发展成果,使全书在为学生提供更多新知识的同时,更加注重学生创造力的培养。
书中绝大部分章节都安排了针对性较强的习题、实验和设计项目,使学生对每一章的课堂的教学效果都能及时通过实验得以强化。本书大部分实验中,除给出详细的实验目的、实验原理、实验思考题和实验报告要求外,还包含多个实验项目(层次),即第一层次是与该章内容相关的验证性实验,课本提供了详细的并被验证的设计程序和实验方法,学生只需将书中提供的设计程序输入计算机,并按要求进行编译仿真,在实验系统上实现即可;第二层次是在上一实验基础上作进一步的发挥;此后的实验层次属于自主设计或创新性质的实验,包括一些大学生电子设计竞赛的设计项目。授课教师可以根据本课程的实验学时数和教学实验的要求,以及学生的兴趣程度,以不同的方式或形式布置给学生完成。
本书第2章的内容是FPGA/CPLD硬件原理,第3章主要是VHDL基础。为了尽可能缩短授课时数,优化教学效果,提高教学效率,将重点放在VHDL的实用技术上,采用了从典型电路设计实例的介绍中,引出VHDL相关语句语法的方法,在给出完整并被验证过的VHDL描述的同时,还给出了综合后的RTL电路图及表现该电路系统功能的时序波形图。对于容易出现的设计错误或产生歧义的示例,还给出正误示例的比较和详细说明。由此,通过一些简单、直观、典型的示例,将VHDL最核心、最基本的内容解释清楚,使读者能在短时间内有效地把握VHDL的主要内容,而不必花费过多的时间去单独学习语法。对于这样的编排,许多曾选用了此教材的老师都给予了肯定。
第4章主要介绍Quartus II 6.0的详细使用方法,其中包括不同输入方式的设计方法、LPM宏功能模块及IP核的使用技术、嵌入式逻辑分析仪等测试工具的使用方法。
第5章是VHDL有限状态机的实用设计技术,包括不同类型的常用有限状态机的语法、状态机的设计方法、实用示例、毛刺克服技术、状态编码方法、工作稳定性控制技术等。
第6章给出了一个基于有限状态机控制的16位CISC CPU的详细设计过程。全机由VHDL表述,借助于Quartus II,其软硬件功能在单片FPGA中得到验证。通过此章的学习和实验,可使学生完整地掌握一个实用16位CPU的设计与实现技术,从而对VHDL有更深入的了解。
第7章和第8章较系统、完整和有序地给出了VHDL的语句类型、语言结构、语法规则。这些内容的取舍,可根据本课程的学时数和大纲要求来决定。
第9章和第10章的内容比较新,主要是基于MATLAB和DSP Builder的EDA开发技术,其中包括一些最新发展的技术成果。这方面的内容对于通信和信息工程专业类的学生和工程技术人员尤为重要。
现代电子工程和EDA技术发展的速度异常迅猛,高等院校在这方面的教学将面临越来越大的挑战。这主要表现在两个方面:一是更多更新的知识有待传授;二是学生在该领域的自主创新能力有待更有效地提高。为了迎接这个挑战,本书力图在这两个方面都有所作为,但限于知识面,定有诸多不足之处,还望业内专家同行不吝斧正。
本书的撰写得到了ALTERA公司大学计划部主要负责人Bob Xu先生的大力支持,在此表示衷心的感谢!
作者E-mail:span88@mail.hz.zj.cn,本书中由于篇幅而未能列入的内容及该书课件,可浏览网址www.kx-soc.com。
作 者
2006年10月于杭州电子科技大学
目 录
第1章 概述 1
1.1 电子设计自动化技术及其发展 1
1.2 电子设计自动化应用对象 2
1.3 VHDL 4
1.4 EDA的优势 5
1.5 面向FPGA的开发流程 6
1.5.1 设计输入 6
1.5.2 综合 7
1.5.3 布线布局(适配) 8
1.5.4 仿真 8
1.5.5 下载和硬件测试 9
1.6 Quartus II概述 9
1.7 IP核 10
1.8 EDA技术的发展趋势 12
第2章 PLD硬件特性与编程技术 14
2.1 PLD概述 14
2.1.1 PLD的发展历程 14
2.1.2 PLD的分类 15
2.2 低密度PLD可编程原理 16
2.2.1 电路符号表示 17
2.2.2 PROM 18
2.2.3 PLA 19
2.2.4 PAL 20
2.2.5 GAL 22
2.3 CPLD的结构与可编程原理 22
2.4 FPGA的结构与工作原理 26
2.4.1 查找表逻辑结构 26
2.4.2 Cyclone系列器件的结构与原理 27
2.5 硬件测试技术 32
2.5.1 内部逻辑测试 32
2.5.2 JTAG边界扫描测试 32
2.6 FPGA/CPLD产品概述 33
2.6.1 Lattice公司CPLD器件系列 33
2.6.2 Xilinx公司的FPGA和CPLD器件系列 34
2.6.3 Altera公司的FPGA和CPLD器件系列 35
2.6.4 Actel公司的FPGA器件 37
2.6.5 Altera公司的FPGA配置方式与配置器件 37
2.7 编程与配置 38
2.7.1 JTAG方式的在系统编程 39
2.7.2 使用PC并行口配置FPGA 39
2.7.3 FPGA配置器件 40
第3章 VHDL基础 42
3.1 VHDL基本语法 42
3.1.1 组合电路描述 42
3.1.2 VHDL结构 44
3.2 时序电路描述 48
3.2.1 D触发器 48
3.2.2 时序描述VHDL规则 49
3.2.3 时序电路的不同表述方法 53
3.3 全加器的VHDL描述 55
3.3.1 半加器描述 55
3.3.2 CASE语句 57
3.3.3 例化语句 59
3.4 计数器设计 60
3.5 一般计数器的VHDL设计方法 63
3.5.1 相关语法 64
3.5.2 程序功能分析 65
3.5.3 移位寄存器设计 66
3.6 数据对象 67
3.6.1 常数 68
3.6.2 变量 68
3.6.3 信号 69
3.6.4 进程中的信号赋值与变量赋值 70
3.7 IF语句概述 77
3.8 进程语句归纳 80
3.8.1 进程语句格式 80
3.8.2 进程结构组成 81
3.8.3 进程要点 81
3.9 并行赋值语句概述 84
3.10 双向和三态电路信号赋值 85
3.10.1 三态门设计 85
3.10.2 双向端口设计 86
3.10.3 三态总线电路设计 88
3.11 仿真延时 90
3.11.1 固有延时 90
3.11.2 传输延时 91
3.11.3 仿真 ? 92
习题 92
第4章 Quartus II使用方法 95
4.1 Quartus II设计流程 95
4.2 嵌入式逻辑分析仪 107
4.3 编辑SignalTap II的触发信号 111
4.4 LPM_ROM宏模块应用 112
4.4.1 工作原理 112
4.4.2 定制初始化数据文件 113
4.4.3 定制LPM_ROM元件 115
4.4.4 完成顶层设计 119
4.5 In-System Memory Content Editor应用 121
4.6 LPM_RAM/FIFO的定制与应用 122
4.6.1 LPM_RAM定制 122
4.6.2 FIFO定制 123
4.7 LPM嵌入式锁相环调用 124
4.8 IP核NCO使用方法 127
4.9 原理图设计方法 132
4.10 流水线乘法器的混合输入设计 134
习题 137
实验与设计 138
实验4-1 组合电路的设计 138
实验4-2 时序电路的设计 139
实验4-3 含异步清0和同步时钟使能的加法计数器的设计 139
实验4-4 用原理图输入法设计8位全加器 139
实验4-5 正弦信号发生器设计 140
实验4-6 七段数码显示译码器设计 141
实验4-7 数控分频器的设计 143
实验4-8 8位十六进制频率计设计 144
第5章 VHDL状态机 146
5.1 状态机设计相关语句 146
5.1.1 类型定义语句 146
5.1.2 状态机的优势 148
5.1.3 状态机结构 149
5.2 Moore状态机 152
5.2.1 多进程状态机 152
5.2.2 单进程Moore状态机 157
5.3 Mealy状态机 159
5.4 状态编码 162
5.4.1 直接输出型编码 162
5.4.2 顺序编码 164
5.4.3 一位热码编码 165
5.5 非法状态处理 166
习题 168
实验与设计 170
实验5-1 序列检测器设计 170
实验5-2 ADC0809采样控制电路实现 170
实验5-3 数据采集电路和简易存储示波器设计 171
实验5-4 比较器和D/A器件实现A/D转换功能的电路设计 173
第6章 16位CISC CPU设计 176
6.1 顶层系统设计 176
6.1.1 16位CPU的组成结构 176
6.1.2 指令系统设计 177
6.1.3 顶层结构的VHDL设计 180
6.1.4 软件设计实例 183
6.2 CPU基本部件设计 185
6.2.1 运算器ALU 185
6.2.2 比较器COMP 187
6.2.3 控制器CONTROL 189
6.2.4 寄存器与寄存器阵列 192
6.2.5 移位寄存器SHIFT 195
6.2.6 三态寄存器TRIREG 196
6.3 CPU的时序仿真与实现 197
6.3.1 编辑仿真波形文件 197
6.3.2 16位CPU的调试运行 201
6.3.3 应用嵌入式逻辑分析仪调试CPU 201
6.3.4 对配置器件编程 203
6.4 应用程序设计实例 203
6.4.1 乘法算法及其实现 203
6.4.2 除法算法及其实现 204
习题 205
实验与设计 206
实验6-1 16位计算机基本部件实验 206
实验6-2 16位CPU设计综合实验 206
第7章 VHDL语句 213
7.1 顺序语句 213
7.1.1 赋值语句 213
7.1.2 IF语句 213
7.1.3 CASE语句 214
7.1.4 LOOP语句 216
7.1.5 NEXT语句 217
7.1.6 EXIT语句 218
7.1.7 WAIT语句 219
7.1.8 RETURN语句 222
7.1.9 空操作语句 223
7.2 并行语句 223
7.2.1 并行信号赋值语句 224
7.2.2 实体说明语句 227
7.2.3 参数传递说明语句 227
7.2.4 参数传递映射语句 229
7.2.5 端口说明语句 230
7.2.6 块语句结构 230
7.2.7 元件例化语句 233
7.2.8 生成语句 234
7.2.9 REPORT语句 239
7.2.10 断言语句 239
7.3 属性描述与定义语句 241
7.4 直接数字合成器设计 244
7.4.1 DDS原理 244
7.4.2 DDS设计实例 247
7.4.3 基于DDS的移相信号发生器设计 249
7.5 等精度频率/相位计设计 251
7.5.1 主系统组成 251
7.5.2 测频原理 252
7.5.3 VHDL测试程序设计 253
7.5.4 测试与实现 257
7.5.5 相位测试 257
习题 259
实验与设计 261
实验7-1 循环冗余校验(CRC)模块设计 261
实验7-2 直接数字式频率合成器(DDS)设计实验 263
实验7-3 基于DDS的数字移相信号发生器设计 264
实验7-4 等精度数字频率/相位测试仪设计实验 264
第8章 VHDL结构 266
8.1 VHDL实体 266
8.2 VHDL结构体 266
8.3 VHDL子程序 267
8.3.1 VHDL函数 267
8.3.2 VHDL重载函数 270
8.3.3 VHDL转换函数 272
8.3.4 VHDL决断函数 275
8.3.5 VHDL过程 275
8.3.6 VHDL重载过程 277
8.3.7 子程序调用语句 278
8.3.8 并行过程调用语句 280
8.4 VHDL库 281
8.4.1 库的种类 282
8.4.2 库的用法 283
8.5 VHDL程序包 284
8.6 VHDL配置 287
8.7 VHDL文字规则 288
8.7.1 数字 288
8.7.2 字符串 288
8.7.3 标识符 289
8.7.4 下标名 290
8.8 VHDL数据类型 290
8.8.1 预定义数据类型 291
8.8.2 IEEE预定义标准逻辑位与矢量 293
8.8.3 其他预定义标准数据类型 293
8.8.4 VHDL数组类型 294
8.9 VHDL操作符 297
8.9.1 逻辑操作符(Logical Operator) 297
8.9.2 关系操作符(Relational Operator) 299
8.9.3 算术操作符(Arithmetic Operator) 301
8.10 VGA彩条信号显示控制器设计 303
8.11 VGA图像显示控制器设计 307
习题 310
实验与设计 311
实验8-1 乐曲硬件演奏电路设计 311
实验8-2 VGA彩条信号显示控制器设计 316
实验8-3 VGA图像显示控制器设计 316
第9章 DSP Builder设计初步 317
9.1 MATLAB/DSP Builder及其设计流程 317
9.2 正弦信号发生器设计 320
9.2.1 建立设计模型 320
9.2.2 Simulink模型仿真 327
9.2.3 SignalCompiler使用方法 332
9.2.4 使用ModelSim进行RTL级仿真 335
9.2.5 使用Quartus II实现时序仿真 337
9.2.6 硬件测试与硬件实现 339
9.3 DSP Builder层次化设计 339
9.4 基于DSP Builder的DDS设计 344
9.4.1 DDS模块设计 344
9.4.2 FSK调制器设计 347
9.4.3 正交信号发生器设计 348
9.4.4 数控移相信号发生器设计 349
9.4.5 幅度调制信号发生器设计 350
9.5 数字编码与译码器设计 351
9.5.1 伪随机序列 351
9.5.2 帧同步检出 353
9.6 硬件环HIL仿真设计 355
9.6.1 HIL仿真流程 355
9.6.2 FSK的HIL仿真 360
9.7 DSP Builder的状态机设计 361
9.7.1 FIFO控制状态机设计示例 362
9.7.2 状态机设计流程 364
习题 368
实验与设计 369
实验9-1 利用MATLAB/DSP Builder设计基本电路模块实验 369
实验9-2 基于DSP Builder的DDS应用模型设计 370
实验9-3 编译码器设计实验 372
实验9-4 HIL硬件环仿真实验 372
第10章 DSP Builder设计深入 373
10.1 FIR数字滤波器设计 373
10.1.1 FIR滤波器原理 373
10.1.2 使用DSP Builder设计FIR滤波器 374
10.1.3 使用MATLAB的滤波器设计工具 380
10.1.4 使用FIR IP Core设计FIR滤波器 386
10.2 VHDL模块插入仿真与设计 390
10.3 正交幅度调制与解调模型设计 393
10.4 NCO IP核应用 396
10.5 基于IP的数字编译码器设计 396
10.5.1 RS码 397
10.5.2 Viterbi译码 399
习题 399
实验与设计 400
实验10-1 FIR数字滤波器设计实验 400
实验10-2 编译码器与调制解调模块设计实验 401
实验10-3 HDL Import模块应用实验 401
参考文献 402