本书由浅入深、循序渐进地介绍可编程逻辑器件的基本原理、内部结构和设计方法,系统地介绍了用于CPLD/FPGA开发的VHDL语言。对于可编程器件的基本原理,首先从基本逻辑门出发,讲述控制逻辑函数表达式的设计与分解,然后详细介绍SPLD(包括PLA和PAL)、CPLD和FPGA的组成原理及其区别。对于VHDL语言,则先从VHDL基本元素、基本语法、描述模型开始,依次讲解并行语句、顺序语句、元件、库和包、有限状态机等,并配有丰富的实例,有助于学习者对概念的理解和用法的掌握。
本书适合于学习芯片设计的理工科学生和VHDL初学者,可作为高等学校电子类专业的选修教材或有志于研发数字集成电路芯片的工程技术人员的参考书。
本书从硬件电路的角度介绍了可编程逻辑器件的基本原理和用于开发应用的VHDL语言。结合数字逻辑电路的基础知识,由浅入深地联系具体器件介绍了简单可编程逻辑器件、复杂可编程逻辑器件和现场可编程门阵列的结构原理,重点讲解了现场可编程门阵列中的逻辑块设计原理、可编程开关的设计原理,以及不同逻辑功能的编程实现方法。结合具体的电路实例,讲述了VHDL中的基本概念和编程语法。全书体现了VHDL语言作为并行语言在电路设计中的模块化、层次化、各尽其责、相互独立的设计思想,是引导有志于学习可编程逻辑器件设计与开发设计的学生和技术人员的一本值得推荐的入门教材和学习手册。
前言
微电子技术的飞速发展,不仅加快了微处理器的速度,增强了信号处理电路的功能,扩大了系统的存储容量,也推动了可编程逻辑器件(Programmable Logic Device,PLD)在数字电子设计中的广泛应用。借助于常用的集成了各种优化算法的电子设计自动化(Electronic Design Automation,EDA)软件,PLD开发人员可以优化设计电路,在较短的时间内实现用户需求。基于此,PLD原理与电子设计自动化技术成为了电子设计人员进行高效电路设计的基础,在电子类相关专业中开设该课程是必不可少的。PLD分为简单可编程逻辑器件(Simple PLD,SPLD)、复杂可编程逻辑器件(Complex PLD,CPLD)和现场可编程门阵列(Field Programmable Gate Arrays,FPGA)3类。这3类器件出现时间由先到后,容量由低到高。SPLD最早出现在20世纪70年代,由Phillips公司制造出第一个可编程逻辑阵列开始,其应用市场不断扩大,但可编程开关、逻辑平面设计的复杂性限制了其进一步发展。随着电子制作工艺的不断改进,出现了CPLD,它实际上就是将SPLD通过内部连线组合起来,扩大了芯片容量。SPLD和CPLD都是基于与平面和或平面的。随着设计需求规模的不断扩大,工程师设计出了FPGA,它不再是基于逻辑平面的概念,而是使用可配置逻辑块,不仅扩大了芯片容量,也提高了设计的灵活性。由于CPLD和FPGA的结构不同,因此电路的设计优化算法亦不相同。为了统一两者的开发方式,工程师们研究了与硬件无关的VHDL、Verilog HDL语言。使用VHDL和Verilog HDL语言,开发人员借助于EDA软件,对不同类型的器件采用相应的优化综合算法,方便了电路的设计和开发。本书介绍VHDL语言在PLD中的设计方法。本书可分两部分: 第一部分是从第1章到第4章,讲述PLD的基本原理;第二部分是从第5章到第11章,讲述VHDL语言在电路设计中的基本语法及典型应用。第1章到第4章,从基本逻辑门出发,介绍了构成逻辑函数表达式的基于CMOS器件的电路结构及设计方法,它是理解SPLD、CPLD、FPGA等复杂电路的基础。对于SPLD,详细介绍了可编程逻辑阵列(Programmable Logic Array,PLA)和可编程阵列逻辑(Programmable Array Logic,PAL)的原理,并以此为基础,介绍了CPLD。对于FPGA,则重点介绍逻辑块和可编程开关的原理,并结合不同厂家的FPGA结构进行介绍。第5章到第11章,由浅入深、循序渐进地介绍了VHDL语法要素、描述模型、并行语句、顺序语句、元件、包库和有限状态机。在讲解过程中结合常见的基本逻辑电路,强化读者对概念的理解和设计理念的把握。CPLD/FPGA技术发展日新月异,新技术、新工艺、新算法、新软件层出不穷,虽然本书在撰写过程中力求加入最新的资料,但仍有些地方赶不上工艺的发展,因此本书重点讲述原理和基础,使读者在面对新工艺或新技术时能灵活理解其基本原理。在讲述VHDL过程中,本书力求基于语法原理介绍电路设计中各模块间相互独立、各尽其责思想,启发读者面对大型设计时能够自上而下地合理划分设计模块,采用模块化、层次化思想实现设计需求。本书在撰写过程中,参阅了大量的国内外网站,以及与本课程相关的教育工作者和技术培训人员的相关幻灯片及技术资料;同教研室的郝金光老师、徐明铭老师、石磊老师提出了很多宝贵的意见;本书底稿讲义在十余年的科研培训、教学中不断得到补充和发展,学员们提出了各种有助于学习和理解的建议;在写作过程中作者得到清华大学出版社白立军编辑的热情帮助。在此一并向他们表示崇高的敬意和深深的感谢。限于作者水平,书中错误之处在所难免,恳请读者批评指正。
作者2016年7月
目录
第1章绪论/1
1.1可编程逻辑器件与数字电路设计/1
1.2可编程逻辑器件的发展/2
1.3可编程逻辑器件设计/7
1.3.1电子设计自动化/7
1.3.2电子设计自动化的发展/8
1.3.3EDA工具的主要特征/9
1.3.4有代表性的EDA软件/11
1.3.5设计方法/13
1.3.6设计流程/14
思考题/17第2章数字逻辑/18
2.1基本逻辑门及其运算/18
2.2基本扩展逻辑门/19
2.3逻辑门的扩展/20
2.4基本逻辑门的实现/23
2.4.1MOS管/23
2.4.2非门的CMOS实现/25
2.4.3基本与非门的实现/25
2.4.4基本或非门的实现/26
2.4.5逻辑函数表达式的CMOS实现/26
思考题/28第3章可编程逻辑器件原理/29
3.1简单可编程逻辑器件/29
3.1.1可编程逻辑阵列/29
3.1.2可编程阵列逻辑/30
3.2复杂可编程逻辑器件/32
3.2.1Altera MAX系列CPLD/333.2.2AMD
MACH系列CPLD/34
3.2.3Lattice pLSI和ispLSI系列CPLD/35
3.2.4Xilinx XC 7000系列CPLD/36
3.2.5Altera FlashLogic/36
3.3现场可编程逻辑门阵列/37
3.3.1逻辑块/39
3.3.2可编程开关/43
3.3.3典型FPGA内部结构/48
3.4CPLD和FPGA比较/51
思考题/53第4章图形和文本输入/54
4.1Altera Quartus Ⅱ 9.0工作环境/54
4.1.1基于工程的管理环境/54
4.1.2工程设计工具/55
4.2图形输入法/56
4.2.141选择器/56
4.2.2建立工程/56
4.2.3电路设计/60
4.2.4利用41选择器设计81选择器/66
4.3文本输入法/69
4.4配置文件下载/69
思考题/71第5章VHDL基础/72
5.1对象/72
5.1.1对象命名规则/72
5.1.2对象声明规则/72
5.1.3常量/73
5.1.4信号/74
5.1.5变量/75
5.1.6别名/76
5.2标准数据类型/77
5.2.1bit/77
5.2.2bit_vector/77
5.2.3boolean/78
5.2.4boolean_vector/78
5.2.5integer/78
5.2.6natural/79
5.2.7positive/79
5.2.8integer_vector/79
5.2.9character/79
5.2.10string/80
5.3标准逻辑数据类型/80
5.4数值表达方法/82
5.5数据类型转换/83
5.6自定义数据类型/84
5.6.1自定义整数类型/84
5.6.2枚举类型/85
5.6.3子数据类型/85
5.6.4数组类型/85
5.7预定义属性/86
5.7.1标量数据类型的预定义属性/86
5.7.2数组类型的预定义属性/87
5.7.3信号的预定义属性/88
5.8VHDL中的运算/88
5.8.1赋值运算符/89
5.8.2逻辑运算符/89
5.8.3算术运算符/90
5.8.4关系运算符/90
5.8.5移位运算/91
5.8.6合并运算符/91
5.8.7运算符的优先级/92
思考题/92
第6章VHDL语言的程序结构/93
6.1VHDL设计模型/93
6.1.1数据流模型/93
6.1.2行为模型/93
6.1.3结构化模型/94
6.2VHDL程序结构/94
6.2.1实体/95
6.2.2架构/97
6.2.3库和包/98
6.2.4配置/100
6.3简单的例子/100
思考题/104第7章并行语句/105
7.1简单信号赋值语句/105
7.2条件信号赋值语句/110
7.3选择信号赋值语句/114
7.4产生语句/118
7.5块语句/121
7.6多驱动源赋值问题/123
思考题/124第8章顺序语句/125
8.1锁存器和触发器/125
8.2进程/127
8.3IF语句/128
8.3.1IF…THEN…END IF/128
8.3.2IF…THEN…ELSE…END IF/129
8.3.3IF…THEN…ELSIF…THEN…
END IF/129
8.3.4IF…THEN…ELSIF…THEN…
ELSE…END IF/130
8.3.5嵌套式IF语句/133
8.4CASE语句/138
8.5WAIT语句/141
8.6LOOP语句/143
8.6.1无条件循环/143
8.6.2FOR…LOOP循环/143
8.6.3WHILE…LOOP循环/146
8.6.4LOOP…EXIT循环/146
8.6.5LOOP…NEXT循环/147
8.7寄存器的引入问题/147
8.8信号和变量的再讨论/148
思考题/155第9章元件/156
9.1元件的声明/156
9.2元件例化/157
9.3元件声明和例化方法/157
思考题/172第10章库、包与子函数/173
10.1库/173
10.2包/174
10.3子程序/177
10.3.1函数/178
10.3.2过程/181
10.4过程、函数和进程讨论/185
10.4.1子程序与进程/185
10.4.2函数与过程/186
思考题/186第11章有限状态机/187
11.1FSM的系统图和状态图/187
11.2FSM的编程框架/188
11.3Moore型FSM设计/189
11.3.1系统图设计/189
11.3.2状态机描述/189
11.3.3编程实现/190
11.4Mealy型FSM设计/191
11.5综合设计/193
11.6FSM中的问题/200
思考题/201附录AVHDL中的保留字/202附录B缩略语/203参考文献/204