在信息技术高速发展的现代社会,电子系统的设计方法和设计手段已有了根本性的变化。可编程逻辑器件和EDA技术已广泛应用于通信、工业自动化、智能仪表、图像处理以及计算机等领域。因此,EDA技术是未来电子工程师必须掌握的技术。
全书共分10章,详细介绍了EDA技术的基本知识、大规模可编程逻辑器件CPLD/FPGA的结构原理、EDA开发工具的使用方法、VHDL语言的语法结构和编程技巧以及逻辑电路和状态机的设计。为提高读者的工程设计能力,第6、7、8和9章分别介绍了CPLD/FPGA器件在数字系统、通信工程和计算机等领域的具体应用,并且运用大量综合性实例对各种关键技术进行了深入浅出的分析。此外,基础章节配有习题,应用章节配有设计题。
本书取材广泛,内容新颖并且重点突出,可作为高等院校电子信息工程、通信工程、计算机科学与技术、自动化和仪器仪表等信息类及相近专业的本科生或研究生教材使用,也可以作为从事工程设计工作的专业技术人员的参考书。
本书每章中的教学课件可以到http://www.tupwk.com.cn/downpage/index.asp网站下载。
前 言
由于高密度现场可编程逻辑器件(CPLD/FPGA)和专用集成电路的飞速发展,传统的设计技术已经不适合大规模及超大规模集成电路,以往分立的数字电路已经被可编程逻辑器件所取代。电子设计自动化EDA(Electronic Design Automation)技术正是为了适应现代电子产品设计的要求,吸收多学科最新成果而形成的一门新技术。
利用EDA开发工具进行电子系统的设计,具有以下几个特点:①用软件的方式设计硬件;②由用软件方式设计的系统到硬件系统的转换是由开发软件自动完成的;③设计过程中可用软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低并且可靠性高。当今,可编程逻辑器件在通信系统及复杂的现场控制系统中得到广泛的应用。因此,EDA技术是现代电子设计的发展趋势,基于CPLD/FPGA技术的开发应用正成为数字时代的应用技术潮流。
本书的目的是帮助读者尽快掌握EDA技术,让读者学会应用硬件描述语言、原理图和状态图的混合设计方法设计数字系统。全书共10章:第1章介绍了EDA技术的基本知识;第2章介绍了大规模可编程逻辑器件CPLD/FPGA的结构原理;第3章介绍了VHDL语言的语法结构及编程技巧;第4章介绍了EDA开发工具的使用方法;第5章介绍了逻辑电路和状态机的设计;第6章介绍了CPLD/FPGA器件在数字系统中的应用;第7章介绍了FPGA在通信工程中的实践应用;第8章介绍了FPGA在DSP领域中的应用;第9章介绍了FPGA在计算机领域的具体应用;第10章是关于CPLD/FPGA实验内容及实验要求。本书在选材上注重内容新颖、技术先进并且重点突出。书中给出了经实践验证的大量设计实例,希望能对读者迅速掌握大规模可编程器件设计与应用有所帮助。
全书由刘爱荣、王振成、曹瑞、卢印举、何素霞、马耀峰、单国全、张建平、王欣、李志超和许爽编写,其中第2.2、2.3、2.4、4.1、4.2、4.3、4.4、5.1、5.2节由王振成编写,第1.3、1.4、1.5、5.3、5.4、5.5、5.6和第10章由曹瑞编写,第3.3~3.6节和第8章由刘爱荣编写,第7.3~7.6及9.1~9.3节由卢印举编写,第6.4、6.5、6.6、6.7节由王欣编写,第7.1、7.2、9.4~9.6节由马耀峰编写,第3.1、3.2、4.5、4.6节由张建平编写,第2.5、2.6、2.7、3.7、3.8、3.9节由单国全编写,第1.6~1.10、2.1节及参考文献由许爽编写,第6.1、6.2、6.3、6.8、6.9节由何素霞编写,第1.1、1.2、附录A和附录B由李志超编写,全书由刘爱荣统稿、定稿。另外,张军宝、刘文贤、王卫卫、王延军、张会成和崔小波等为本书的插图和资料整理做了大量工作。
在编写本书的过程中参考了相关文献,在此向这些文献的作者深表感谢!由于EDA技术是一门发展迅速的新技术,加上作者水平有限,书中难免疏漏、不妥甚至错误,恳请专家和广大读者批评指正。我们的信箱:huchenhao@263.net,电话:010-62796045。
作 者
2007年8月
目 录
第1章 绪论1
1.1 EDA技术的含义1
1.2 EDA技术发展历程1
1.2.1 20世纪70年代的计算机辅助
设计CAD阶段1
1.2.2 20世纪80年代的计算机辅助
工程设计CAE阶段2
1.2.3 20世纪90年代电子系统设计
自动化EDA阶段2
1.3 EDA技术的主要内容3
1.3.1 大规模可编程逻辑器件3
1.3.2 硬件描述语言(HDL)4
1.3.3 软件开发工具4
1.3.4 实验开发系统5
1.3.5 关于EDA技术的学习重点及
学习方法5
1.4 EDA软件系统的构成6
1.5 EDA工程设计流程7
1.5.1 设计输入7
1.5.2 逻辑综合和优化8
1.5.3 目标器件的布线/适配9
1.5.4 设计过程中的有关仿真9
1.5.5 目标器件的编程/下载10
1.5.6 硬件仿真/硬件测试10
1.6 数字系统的设计方法简介10
1.7 数字系统的设计准则11
1.8 EDA技术的应用展望12
1.9 本章小结13
1.10 思考和练习13
第2章 大规模可编程逻辑器件14
2.1 可编程逻辑器件概述14
2.1.1 PLD的发展进程14
2.1.2 PLD介绍15
2.1.3 可编程逻辑器件的结构
和分类17
2.1.4 CPLD/FPGA相对于MCU
的优势19
2.2 CPLD的结构与工作原理20
2.2.1 CPLD的基本结构20
2.2.2 Altera 公司的器件产品26
2.3 现场可编程门阵列FPGA40
2.3.1 Xilinx Virtex系列器件
性能特点40
2.3.2 FPGA器件的结构描述40
2.3.3 Xilinx公司的XC4000系列
FPGA简介42
2.3.4 XC5000系列的LCA结构45
2.3.5 Xilinx公司 XC6200、
XC8100系列FPGA简介48
2.4 FPGA的配置模式49
2.4.1 主动串行配置模式50
2.4.2 主动并行配置模式50
2.4.3 外设配置模式51
2.4.4 从动串行配置模式52
2.4.5 菊花链配置模式52
2.4.6 FPGA的配置流程53
2.4.7 FPGA标识说明54
2.5 FPGA和CPLD的开发应用
选择55
2.6 本章小结59
2.7 思考和练习59
第3章 硬件描述语言VHDL的语法
结构及编程60
3.1 概述60
3.1.1 什么是VHDL及VHDL
语言的发展历史60
3.1.2 VHDL的作用61
3.1.3 VHDL语言特点61
3.1.4 VHDL与其他硬件描述
语言的比较61
3.1.5 VHDL的优点62
3.1.6 VHDL程序设计约定63
3.2 VHDL程序基本结构63
3.2.1 VHDL设计简述64
3.2.2 结构体(ARCHITECTURE)67
3.2.3 配置(CONFIGURATION)69
3.2.4 库、程序包72
3.3 VHDL语言要素78
3.3.1 VHDL文字规则78
3.3.2 VHDL数据对象80
3.3.3 VHDL数据类型83
3.3.4 VHDL操作符94
3.4 VHDL顺序语句98
3.4.1 对象与赋值语句99
3.4.2 转向控制语句101
3.4.3 WAIT语句112
3.4.4 子程序调用语句114
3.4.5 返回语句(RETURN)116
3.4.6 空操作语句(NULL)117
3.4.7 其他语句和说明118
3.5 VHDL并行语句125
3.5.1 进程语句127
3.5.2 块语句132
3.5.3 并行信号赋值语句135
3.5.4 并行过程调用语句137
3.5.5 VHDL 的层次化设计与
元件声明(COMPONENT)139
3.5.6 元件例化语句140
3.5.7 生成语句142
3.6 子程序(SUBPROGRAM)148
3.6.1 子程序声明148
3.6.2 子程序主体149
3.6.3 重载函数151
3.7 VHDL描述风格153
3.7.1 行为描述153
3.7.2 数据流描述154
3.7.3 结构化描述155
3.8 本章小结156
3.9 思考和练习156
第4章 常用EDA工具软件操作
指南158
4.1 MAX+PLUSⅡ软件的安装158
4.1.1 概述158
4.1.2 常用的设计输入方法159
4.1.3 MAX+PLUSⅡ的特点159
4.1.4 MAX+PLUS II安装160
4.1.5 MAX+PLUS II软件组成162
4.1.6 MAX+PLUS II的编辑规则164
4.2 MAX+PLUS II操作指南165
4.2.1 原理图编辑工具165
4.2.2 MAX+PLUS II原理图编辑
流程165
4.2.3 其他设计输入方法170
4.2.4 设计项目的处理170
4.2.5 设计项目的校验174
4.2.6 器件编程179
4.3 MAX+PLUS II操作实例182
4.3.1 源文件的编辑182
4.3.2 系统的编译、综合和适配185
4.3.3 系统的有关仿真186
4.3.4 系统的编程下载189
4.4 利用LPM兆功能块的电路
设计190
4.4.1 常用LPM兆功能块190
4.4.2 基于LPM_COUNTER的
数据分频器设计193
4.5 本章小结194
4.6 思考和练习194
第5章 基本逻辑电路设计195
5.1 组合逻辑电路设计195
5.1.1 基本门电路195
5.1.2 三态门及总线缓冲器200
5.1.3 单向总线驱动器201
5.1.4 双向总线缓冲器201
5.2 时序逻辑电路设计202
5.2.1 时序电路特殊信号描述202
5.2.2 常用时序电路设计204
5.2.3 寄存器和移位寄存器207
5.2.4 计数器209
5.2.5 序列信号发生器、检测器216
5.3 存储器设计220
5.3.1 只读存储器ROM220
5.3.2 静态数据存储器SRAM221
5.3.3 先进先出堆栈FIFO223
5.4 状态机的VHDL设计226
5.4.1 状态机概述226
5.4.2 状态机的特点226
5.4.3 状态机的基本结构和功能227
5.4.4 一般状态机的VHDL描述228
5.4.5 摩尔状态机的设计231
5.4.6 米勒状态机的VHDL设计233
5.4.7 ONE-HOT状态机235
5.5 本章小结236
5.6 思考和练习236
第6章 CPLD/FPGA在数字系统中的
应用237
6.1 正负脉宽数控调制信号
发生器的设计237
6.1.1 设计思路237
6.1.2 VHDL源程序238
6.1.3 仿真结果239
6.2 智能函数发生器的设计239
6.2.1 智能函数发生器的设计
思路239
6.2.2 模块及模块功能240
6.3 序列检测器的设计247
6.3.1 序列检测器设计思路247
6.3.2 VHDL源程序247
6.3.3 仿真结果248
6.4 数字频率计的设计248
6.4.1 数字频率计设计思路248
6.4.2 数字频率计的VHDL
源程序250
6.5 数字秒表的设计254
6.5.1 数字秒表设计思路254
6.5.2 数字秒表的VHDL源程序254
6.6 交通信号控制器的设计258
6.6.1 交通信号控制器设计思路258
6.6.2 VHDL源程序259
6.6.3 系统的有关仿真266
6.6.4 系统的硬件验证266
6.6.5 设计技巧分析266
6.7 三层电梯控制器的设计267
6.7.1 三层电梯控制器的功能267
6.7.2 三层电梯控制器的设计
思路267
6.7.3 三层电梯控制器的综合
设计268
6.7.4 三层电梯控制器的波形
仿真分析273
6.7.5 N层电梯控制器的设计
技巧分析274
6.8 本章小结274
6.9 思考和练习274
第7章 FPGA在通信工程中的
实践应用276
7.1 二进制振幅键控(ASK)调制器与
解调器设计276
7.1.1 ASK信号调制原理276
7.1.2 ASK信号解调原理277
7.1.3 ASK调制VHDL程序278
7.1.4 ASK解调VHDL程序280
7.2 二进制频移键控(FSK)调制器
与解调器设计281
7.2.1 FSK信号调制原理281
7.2.2 FSK信号解调原理282
7.2.3 FSK调制VHDL程序及
仿真283
7.2.4 FSK解调VHDL程序及
仿真284
7.3 二进制相位键控(PSK)调制器
与解调器设计286
7.3.1 基本概念286
7.3.2 CPSK信号调制288
7.3.3 DPSK信号调制290
7.3.4 DPSK信号解调290
7.3.5 DPSK调制方框图及电路
符号291
7.4 UART接口设计293
7.4.1 UART概述293
7.4.2 UART系统FPGA接口
电路294
7.4.3 UART系统FPGA程序
设计294
7.5 本章小结294
7.6 思考和练习295
第8章 FPGA在DSP领域中的
应用296
8.1 快速加法器的设计296
8.1.1 4位二进制并行加法器296
8.1.2 8位二进制加法器的
源程序297
8.2 快速乘法器的设计299
8.2.1 设计思路299
8.2.2 快速乘法器VHDL源程序300
8.3 数字滤波器的设计305
8.3.1 数字滤波器概述305
8.3.2 数字滤波器的原理分析305
8.3.3 数字滤波器系统实现306
8.3.4 数字滤波器系统原理框图307
8.3.5 数字滤波器顶层IIR模块307
8.3.6 数字滤波器的VHDL语言
程序308
8.3.7 数字滤波器系统性能测试309
8.4 本章小结310
8.5 思考和练习310
第9章 FPGA在微机工程中的
实践应用312
9.1 键盘接口设计312
9.1.1 键盘工作原理312
9.1.2 矩阵式按键概述313
9.1.3 矩阵式按键FPGA描述315
9.2 LED驱动器设计321
9.2.1 LED数码管工作原理321
9.2.2 静态LED数码管驱动原理
及其FPGA电路设计322
9.2.3 动态LED数码管驱动原理
及其FPGA电路设计323
9.3 D/A接口设计327
9.3.1 D/A 转换器概述327
9.3.2 典型D/A转换器芯片
DAC0832328
9.3.3 FPGA与DAC0832接口
电路原理图329
9.3.4 DAC0832 接口电路时序330
9.3.5 DAC0832 接口电路程序330
9.4 A/D接口设计331
9.4.1 A/D转换器概述331
9.4.2 典型A/D转换器芯片
ADC0809331
9.4.3 A/D接口设计333
9.4.4 ADC0809 VHDL采样控制
程序设计334
9.5 本章小结337
9.6 思考和练习337
第10章 CPLD/FPGA实验338
10.1 实验要求338
10.1.1 概述338
10.1.2 实验报告的撰写338
10.2 实验内容339
10.2.1 实验一:简单逻辑电路
设计与仿真339
10.2.2 实验二:全加器设计、
仿真与下载341
10.2.3 实验三:分频电路与
12归1电路设计343
10.2.4 实验四:利用硬件描述
语言进行数字钟设计344
10.2.5 实验五:串行扫描显示
电路设计345
10.2.6 实验六:复杂数字钟设计
与扫描显示346
10.2.7 实验七:智力竞赛抢答器
的设计346
10.2.8 实验八:数字频率计的
设计347
10.2.9 实验九:交通灯信号
控制器的设计348
附录A VHDL程序设计的语法结构349
附录B 利用WWW进行EDA资源
的检索354
主要参考文献356