1引言电子设计的必由之路将是数字化,这已成为有目共睹的事实。在数字化的道路上,我国电子设计技术的发展经历了许多重大的变革和飞跃。从传统的应用SSI、MSI等通用的数字电路芯片构成电路系统到广泛地应用单片机,电子设计技术发生了一个巨大的飞跃。今天,随着VLSI向更高层次的发展,电子产品市场运作节奏的进一步加快,电子设计技术已迈入一个全新的阶段,即CPLD/FPGA在EDA基础上的广泛应用。它在更高层次上容纳了过去数字技术的优秀部分,但在电子设计的技术操作和系统构成上却发生了质的飞跃。CPLD/FPGA不但在逻辑实现上是无限的,而且可触及硅片电路线度的物理极限,并兼有串行、并行工作方式,高速、高可靠性以及宽口径适用性等诸方面的特点。不但如此,随着EDA技术的发展和CPLD/FPGA向深亚微米领域的进军,它们与MCU、MPU、DSP、A/D、D/A、ROM和RAM等独立器件之间的功能界限将日益模糊。特别是软/硬件IP芯核产业的迅猛发展,嵌入式通用与标准CPLD/FPGA器件呼之欲出,片上系统(SOC)已近在咫尺。同时,CPLD/FPGA还打破了软硬件之间最后的屏障,使软硬件工程师有了共同的语言。可以预测,未来的电子设计将是EDA的时代,而掌握EDA这门技术无疑已成为现代每一位电子设计工程技术人员必不可少的基本技能。本篇正是鉴于这样的背景,介绍了可编程逻辑器件(PLD)CPLD/FPGA的结构以及通用的硬件描述语言(VHDL),并着重介绍了Altera公司的软件平台MAX+PLUSII的使用和在此基础上的PLD基本设计原理。2第一章可编程逻辑器件简介1.1PLD设计的数字系统的特点可编程逻辑器件(ProgrammedLogicDevice),简称PLD,是一种由用户通过编程定义其逻辑功能,从而实现各种设计要求的集成电路芯片。它是70年代发展起来的新型逻辑器件,发展至今,已相继出现了PROM、EPROM、PLA、PAL、GAL和ISP等多个品种。它的出现对传统的用中小规模集成电路设计数字电路系统产生了很大的影响,相比之下,采用PLD设计数字系统具有如下特点:1.减小系统体积:单片PLD具有相当高的密度,能实现的逻辑功能大约是中小规模集成电路的几倍到几十倍,高密度PLD器件甚至能大千倍。因此,使用PLD器件能大量节省空间,减小设备体积。2.增强逻辑设计的灵活性:使用PLD器件设计的系统,可以不受标准系列器件在逻辑功能上的限制。在系统设计、系统调试过程中的任何阶段都能对PLD器件的逻辑功能进行修改,给系统设计提供了很大的灵活性。3.缩短设计周期:由于PLD具有可编程特性,用它来设计一个系统所需时间比传统方式大为缩短,而且在调试和生产阶段,对PLD器件的逻辑进行调整十分简便迅速,无需重新布线和更换印制板。4.提高系统处理速度:利用PLD的与或两级结构可实现任何逻辑功能,比用中小规模器件所需的逻辑级数少。这不仅简化了系统设计,而且减少了时延,提高了系统处理速度。5.降低系统成本:采用PLD器件设计的系统,虽然单片PLD器件要比单片中小规模芯片贵得多,但由于PLD集成度高,而且测试与装配的工作量大大减少,加上避免了改变逻辑带来的重新设计和修改等一系列问题,有效地降低了成本。6.提高系统的可靠性:用PLD器件设计的系统减少了芯片和印制板的数量及相互间的连线,从而增加了系统的平均寿命和抗干扰能力,提高系统的可靠性。7.系统具有加密功能:某些PLD器件,如GAL或高密度的可编程逻辑器件本身就具有加密功能。设计者在设计时选中加密项,可编程逻辑器件就被加密,器件的逻辑功能无法被读出,有效地防止逻辑系统被抄袭。因而,使用可编程逻辑器件设计的系统具有保密特性。目前,使用可编程逻辑器件来设计电路需要依靠相应的开发软件平台和编程器。可编程逻辑器件开发软件和相应的编程器多种多样,特别是一些较高级的软件平台,其功能更加灵活,具有图形输入、语言输入和波形输入等多种输入方法;且具有功能分析、时序分析、电路划分、布局连线、编程等多种功能。一个系统除了方案设计和输入电路外,都可用编程软件自动完成。可编程逻辑器件设计电路过程如下图所示,它和传统的采用中小规模集成电路设计方法主要的区别在于增加了“编程”和“计算机参与”。3图1-1PLD设计逻辑电路的基本过程现在,PLD器件已被广泛应用于计算机硬件、工业控制、智能仪表、通讯设备和医疗电子仪器等多个领域。1.2普通可编程逻辑器件1.2.1普通PLD的基本结构PLD的基本结构如图1-2所示。图中虚线框内是PLD的主体,它由与阵列和或阵列构成。与阵列产生有关与项,或阵列将所有与项构成“与或”的形式。由于任何组合逻辑函数均可化成与或的形式,而任何时序电路均可由组合逻辑电路加上存储元件(触发器)构成,所以PLD的与或结构对实现数字电路具有普遍意义。图1-2PLD基本结构图1.2.2普通PLD的分类根据PLD的基本结构,一般可分为以下几类:1.可编程只读存储器PROM(ProgrammableRead-onlyMemory):PROM由固定的与阵列和可编程的或阵列组成,大多用来存储计算机程序和数据。此时,固定的输入用作存储器的地址,输出是存储器单元的内容。2.可编程逻辑阵列PLA(ProgrammableLogicArray):PLA由可编程的与阵列和可编程的或阵列构成,是灵活性最高的可编程逻辑器件。由于它的与或阵列均可编程,因而在实现函数时,只须形成所需的乘积项,再以或的形式输出,从而使得阵列的规模比相同数目输入信号的PROM小得多。但目前PLA的编程缺乏高质量的支持软件和编程工具,且器件的价格偏高,门的利用率不高,因而使用不广泛。设计输入优化电路选择器件编程器件功能时序检测电路设计方案输入电路与门阵列或门阵列输入信号反馈输入信号互补输入乘积项和项输出函数数数输出电路43.可编程阵列逻辑PAL(ProgrammableArrayLogic):PAL由可编程的与阵列和固定的或阵列构成,它结合了PLA的灵活性和PROM的廉价和易编程的特点,是早期实现可编程专用集成电路(ASIC)的主要器件。4.通用逻辑阵列GAL(GenericArrayLogic)GAL继承了PAL器件的与-或结构,并在这一基础上有了新的突破,增加了输出逻辑宏单元OLMC(OutputLogicMacroCell)结构。由于GAL具有高可靠性、可擦除性及输出逻辑可组态的特性,故是一种理想的低密度可编程逻辑器件。1.2.3普通PLD的编程单元可编程逻辑器件中用来存放数据的基本单元称之为编程单元,它分为易失性和非易失性两种。易失性单元:这种基本单元采用SRAM(静态存储器)结构,其特点是掉电以后信息会丢失,但编程速度快,且可无限次编程。非易失性单元:这种基本单元的特点是掉电后信息不会丢失,其结构有多种:1.利用熔丝开关、反熔丝开关进行的一次性编程单元。2.利用紫外线擦除、电编程的UVEPROM编程单元。3.利用电擦除、电编程的EEPROM编程单元。4.闪烁存储器构成(Flash)的EEPROM编程单元。UVEPROM和EEPOM的编程单元均采用浮栅技术生产,是一种能多次编写的ROM结构单元。它是利用绝缘栅场效应管中的存储电荷使开启电压发生变化来记忆信息的。1.3新型可编程逻辑器件从PROM到GAL的所有低密度可编程逻辑器件,由于过于简单的结构,使得它们仅能实现规模较小的电路,通常只有几百门。因为在这些器件中,电路是用乘积项来描述的,而如果乘积项的数目太多,器件中的互连结构将变得十分复杂,这是工艺条件所不允许的。为了弥补这一缺陷,世界上各大集成电路厂商纷纷推出新一代的可编程逻辑器件——高密度可编程逻辑器件HDPLD(HighDensityProgrammableLogicDevice)。目前,国外各大VLSI厂商推出的HDPLD品种繁多,如AMD公司推出了6种MACH系列的ispLSI产品;Xilinx公司推出了多种高性能的XC系列FPGA芯片;Altera公司MAX系列的CPLD、FPGA可谓品种繁多,功能各异,其最大密度已达10万门/片;而作为世界最早发明GAL等可编程逻辑器件的Lattice公司也推出了多种系列的ispLSI器件。与此相适应,各大公司还推出了与自己的器件相关的开发软件平台,如Lattice公司的Synario;Xilinx公司的Foundation;Altera公司的MAX+PLUSII等等。这种新型的可编程逻辑器件,在结构上延续GAL的结构原理,仍是电擦写、电编程的EPLD,但其内部结构规划更合理、更紧凑,单片的密度即可达上万门,可适用于大规模数字逻辑系统的设计。更具突破性的是,这种器件可以实现在系统编程(In-systemProgrammable,简称ISP)。在这种技术的支持下,对芯片编程时无需将芯片从板上取下,只需用五根口线通过并行口和计算机相连,即可对芯片编程。若板上存在若干片ISP器件,5只需通过ISP器件独有的菊花链接法,将所有在系统可编程芯片串联在一起,即可同时对这些芯片编程。根据门阵列编程单元的结构不同,HDPLD又可分为CPLD(ComplicatedProgrammableLogicDevice)和FPGA(FieldProgrammableGateArray)两种。CPLD具有掉电后信息不易丢失的特点,而FPGA则包含了两种结构:1.SRAM-查找表类型。采用SRAM结构的编程单元,掉电后信息易丢失。2.反熔丝的多路开关类型。由于反熔丝是一种双端非丢失的一次性可编程单元,故此类FPGA是具有非丢失性的一次性可编程器件。1.3.1CPLD的组成及内部结构尽管世界上各大VLSI厂商生产的各系列CPLD的结构不尽相同,但其基本组成是一致的,都由多个相似的逻辑阵列块(LogicArraryBlock,简称LAB)、一个可编程连线阵列(ProgrammableInterconnect,简称PI)、多个输入输出控制块(I/OBlock)三部分构成。其结构示意如图1-3所示:图1-3CPLD结构示意图下面我们以Lattic公司的ispLSI1032芯片为例,具体介绍CPLD的内部结构。ispLSI1032芯片是电可擦CMOS器件,为84引脚的PLCC封装,其中72个为I/O引脚,集成密度为6000门,每片含192个D触发器,引脚到引脚的延时为低于10ns。图1-4是ispLSI1032芯片的电路结构框图,它由32个通用逻辑模块(GenericLogicBlock,简称GLB)、64个输入/输出单元(I/OCell,简称IOC)、可编程的内部连线区和编程控制电路组成。其中8个GLB、16个I/O单元、1个输出布线池(OutputRoutingPool,简称ORP)和两个专用输入连接在一起构成一个巨型块(Megablock),四个结构相同的巨型块分布在全局布线池(GlobalRoutingPool,简称GRP)的四周。各部分之间的关系和实现的功能如图1-5所示。1.通用逻辑模块(GLB):图1-6是通用逻辑模块的电路结构图。由图可见,它由可编程的与逻辑阵列、乘积项共享的或逻辑阵列、可重配置寄存器、控制功能四部分组成。与阵列由20个乘积项构成,这些乘积项来自于GLB的18个任何输入的乘积,这18个输入中的16个来自全局布线池,是从GLB或外部的I/O单元反馈过来的信号,其余2个输入直接来自于专用输入引脚。逻辑块逻辑块逻辑块逻辑块O/IO/I/OO/I/O逻辑块内编程连线6图1-4ispLSI1032芯片的电路结构框图图1-5ispLSI1032芯片逻辑功能划分框图输出可灵活配置4个专用时钟输入4648传输延迟时间可预知高速通道6464I/O单元(64)全局布线区(GRP)通用逻辑模块(32)输出布线区(ORP)输出输入专用输入64个I/O引脚时钟网络输出引脚灵活分配7乘积共享阵列的输入和输出关系是可编程的,四个输入F0-F3中任何一个都可以送到四个D触发器当中任何一个的输入端,每个输入又可以同时送给几个触发器,四个输入还可以再组合成更大规