Verilog HDL数字系统设计入门与应用实例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 可编程逻辑器件

数字电子技术发展日新月异,使集成电路不断发展、更新换代,由早期的电子管、晶体管、中小规模集成电路,发展到超大规模集成电路及许多实现专门功能的专用集成电路。同时随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担,设计工程师们希望自行开发设计出可用的集成电路芯片。因此出现了各种可编程逻辑器件,至今主要有5种器件可供实现专用集成电路的要求,它们是:

简单可编程逻辑器件(Programmable Logic Device,PLD);

复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD);

现场可编程器件(Filed Programmable Gate Array,FPGA);

标准单元(Standard Cell);

门阵列(Gate Array)。

这些器件的出现,使电子系统的设计工程师利用与器件相应的计算机辅助设计(Com-puter Aided Design,CAD)软件,在实验室里就可以设计出应用最为广泛的ASIC芯片。

2.1 可编程逻辑器件概述

规模可编程逻辑器件(Programmable Logic Devices)是集成电路技术发展的产物。它是EDA得以实现的硬件基础,由设计人员自行编程将数字系统“集成”在一片PLD上,可灵活方便地构建和修改数字电子系统,而不必去请芯片制造厂商设计和制作专用的集成电路芯片。

1. PLD的发展概述

随着微电子设计技术与工艺的发展,数字集成电路从电子管、晶体管、中小规模集成电路、超大规模集成电路(VLSIC)逐步发展到今天的专用集成电路(ASIC)。ASIC的出现降低了产品的生产成本,提高了系统的可靠性,缩小了设计的物理尺寸,推动了社会的数字化进程。但是ASIC因其设计周期长、改版投资大、灵活性差等缺陷制约着它的应用范围。硬件工程师希望有一种更灵活的设计方法,根据需要,在实验室就能设计、更改大规模数字逻辑,研制自己的ASIC并马上投入使用,这是提出可编程逻辑器件的基本思想。

可编程逻辑器件随着微电子制造工艺的发展取得了长足的进步。从早期的只能存储少量数据、完成简单逻辑功能的可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储器(E2 PROM),发展到能完成中大规模数字逻辑功能的可编程阵列逻辑(PAL)和通用阵列逻辑(GAL),今天已经发展为可完成超大规模复杂组合逻辑与时序逻辑的复杂可编程逻辑器件(CPLD)和现场可编程逻辑器件(FPGA)。随着工艺技术的发展与市场需要,超大规模、高速、低功耗的新型FPGA/CPLD不断推出。新一代的FPGA甚至集成了中央处理器(CPU)或数字处理器(DSP)内核,在一片FPGA上进行软、硬件协同设计,为实现片上可编程系统(System On Programmable Chip,SOPC)提供了强大的硬件支持。

2. PLD的分类及特点

广义上讲,可编程逻辑器件是指一切通过软件手段更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。目前常用的可编程逻辑器件主要有简单的逻辑阵列(PAL/GAL)、复杂可编程逻辑器件(CPLD)和现场可编程逻辑阵列(FPGA)3大类。

PAL/GAL:PAL(Programmable Array Logic)即可编程阵列逻辑;GAL(Generic Array Logic)即通用可编程阵列逻辑。PAL/GAL是早期可编程逻辑器件的发展形式,其特点是大多基于E2 CMOS工艺,结构较为简单,可编程逻辑单元多为与、或阵列,可编程单元密度较低,仅适用于某些简单的数字逻辑电路。虽然PAL/GAL密度较低,但是它们一出现即以其低功耗、低成本、高可靠性、软件可编程、可重复更改等特点引发了数字电路领域的巨大震动。虽然目前较复杂的逻辑电路一般使用CPLD甚至FPGA完成,但是对应很多简单的数字逻辑,GAL等简单的可编程逻辑器件仍然被大量使用。目前,国内外很多对成本十分敏感的设计都在使用GAL等低成本可编程逻辑器件,越来越多的74系列逻辑电路被GAL取代。GAL等器件发展至今已经近20年了,新一代的GAL以功能灵活、小封装、低成本、重复可编程、应用灵活等优点仍然在数字电路领域扮演着重要的角色。目前比较大的GAL器件供应商主要是Lattice半导体。

CPLD:CPLD(Complex Programmable Logic Device)即复杂的可编程逻辑器件。Altera为了突出特性,曾将自己的CPLD器件称为EPLD(Enhanced Programmable Logic Device),即增强型可编程逻辑器件。其实EPLD和CPLD属于同等性质的逻辑器件,目前Altera为了遵循称呼习惯,已经将其EPLD统称为CPLD。CPLD是在PAL、GAL的基础上发展起来的,也釆用E2 CMOS工艺,也有少数厂商釆用Flash工艺,其基本结构由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块构成。CPLD可实现的逻辑功能比PAL、GAL有了大幅度的提升,一般可以完成设计中较复杂、较高速度的逻辑功能,如接口转换、总线控制等。CPLD的主要器件供应商有Altera、Lattice和Xinlinx等。

FPGA:FPGA(Filed Programmable Gate Array)即现场可编程逻辑阵列,是20世纪80年代中期出现的高密度可编程器件,短短二十几年来,取得了惊人的发展,其单片集成密度从最初的1200门发展到目前的几百万门,而且时钟频率由最初不到10MHz发展到目前的300MHz。FPGA是在CPLD的基础上发展起来的新型高性能可编程逻辑器件,一般釆用SRAM工艺,也有一些专用器件釆用Flash工艺或反熔丝(Anti-Fuse)工艺等。它可以完成极其复杂的时序与组合逻辑电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。FPGA的基本组成部分有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元、内嵌专用硬核等。FPGA的主要器件供应商有Altera、Lattice、Actel和Xinlinx等。

尽管FPGA、CPLD和其他类型的PLD的结构各有其特点和长处,但概括起来,它们都是由三大部分组成的:一个二维的逻辑块阵列,构成了PLD器件的逻辑组成核心;输入/输出块;连接逻辑块的互连资源。连线资源由各种长度的连线线段组成,其中也有一些可编程的连接开关,它们用于逻辑块之间、逻辑块与输入/输出之间的连接。

2.2 CPLD的结构和工作原理

大部分的CPLD是基于乘积项(Product-Term)结构的。采用这种结构的CPLD芯片有:Altera的MAX 7000、MAX 3000系列(E2 PROM工艺),Xilinx的XC 9500系列(0.35μm CMOS Fast Flash工艺),Lattice的ispMACH 4000、ispMACH 5000(0.18μm E2 CMOS工艺)系列器件,Cypress的大部分产品。它们的结构基本相同,都是由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块构成的。

下面以Lattice的ispMACH 4000系列为例,具体讲述CPLD的结构。ispMACH 4000系列的功能框图如图2-1所示。

图2-1 ispMACH 4000系列的功能框图

对照功能框图可以看出,ispMACH 4000系列CPLD主要由基本逻辑单元GLB(Generic Logic Block)、全局布线池GRP(Global Routing Pool)、输出布线池ORP(Output Routing Pool)、I/O单元(I/O Block)等部分组成。这里的GLB有36个输入,包含16个宏单元MC(Macrocell)。宏单元是CPLD的基本逻辑单元。GLB的所有输入都来自于GRP,GLB的所有输出都输出到GRP,即使GLB要用到自己的输出信号也必须通过GRP,这样每个GLB的输出都可以通过GRP输入到芯片上的所有其他GLB。GLB的输出通过ORP布线到I/O引脚。GLB由可编程与门阵列、逻辑分配器(Logic Allocator)、16个MC和GLB时钟发生器组成。GLB的框图如2-2所示。

与门阵列所有的36个输入全部来自GRP,首先对36个输入信号取反,形成正反总共72个列信号,行线总共有83条。每一个行列交叉点有一个可编程节点,用于形成与信号。前80个与输出,从第0个开始每5个为一个乘积项“簇”(Cluster),总共为16个簇,分别对应16个MC。剩下的3个与输出作为共享的PT时钟、初始化和OE信号。与门阵列示意图如图2-3所示。

图2-3 与门阵列示意图

图2-2 GLB的框图

逻辑分配器以簇为单位来分配乘积项,其框图如图2-4所示,每一个MC都有这样的一个逻辑分配器。

图2-4 逻辑分配器框图

宏单元MC由逻辑分配器的输出驱动,每个MC包含一个可编程异或门、一个可编程寄存器及一些布线和控制逻辑,如图2-5所示。

图2-5 宏单元MC

GLB中的16个MC是分别被来自逻辑分配器的16个输出所驱动的,MC的输出用来驱动ORP和GRP。来自逻辑分配器的信号首先要经过一个可编程的异或门。可以看到该异或门的另一个输入端是直接来自引脚的信号,这样可以用MC来构建一个高速输入寄存器。图2-5中的Delay可以让用户在信号的最快建立时间与零保持时间之间进行选择。

2.3 FPGA的结构和工作原理

与CPLD基于门阵列来实现逻辑功能的方式不同,FPGA是基于查找表(Look-Up-Ta-ble)结构的。查找表(Look-Up-Table)简称LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16 × 1的RAM。当用户通过原理图或HDL语言描述了一个逻辑电路以后,FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM。这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。

不同厂家、不同系列FPGA的结构不尽相同,下面以Altera的Cyclone II系列为例说明FPGA的结构,其结构框图如2-6所示。

图2-6 FPGA的结构框图

四个角上的PLL是锁相环,一般用它对输入的时钟进行分频、倍频,以产生所需要的时钟频率。IOE(Input/Output Elements)是I/O单元,用于将FPGA内部的信号布线到I/O引脚。中间黑色的部分是内置的18 × 18乘法器(有多个)。两边灰色的是内部RAM模块。剩下白色的部分是逻辑阵列,它由多个LAB(Logic Array Block)组成。还有用于内部信号互连的布线逻辑,图中没有画出。

Cyclone II提供4个PLL(每个PLL最多可有4个输出)和由16根全局时钟线组成的全局时钟网络。全局时钟网络贯穿整个芯片,可以给片内所有时序器件提供时钟,如IOE、LE、内部乘法器和内置RAM模块等。

Cyclone II中18 × 18乘法器的数量因具体的芯片不同而各不相同,每个18 × 18乘法器可以配置成两个9 ×9乘法器使用。

一个LAB由16个LE(Logic Element)组成。LE是Cyclone II系列FPGA的基本单元,逻辑函数就是靠它来实现的。一个LE由1个4输入查找表、1个可编程寄存器、进位链逻辑、寄存器链逻辑和控制逻辑等组成。LE的可编程寄存器可以配置成D、T、J、K操作。每个寄存器有数据、时钟、时钟使能和清零输入。从全局时钟网络、I/O引脚或任何其他内部逻辑过来的信号,都可以驱动寄存器的时钟端。I/O引脚或任何其他内部逻辑过来的信号,可用于驱动寄存器的时钟使能端。如果是实现组合逻辑函数,寄存器可以被旁路。每个LE有3个输出,可用于驱动本地、行或列布线资源。LE中的LUT和寄存器可以分别单独驱动这些布线逻辑,允许在LUT驱动一个输出的同时寄存器驱动另一个输出。这一特性提高了LE的利用率。寄存器的输出还允许反馈到LUT的输入端,增强了布线能力。

在同一个LAB中的LE,可以通过寄存器链逻辑进行级联。通过寄存器链逻辑可以将同一个LAB中的LUT用于实现组合逻辑,把LE中的寄存器级联在一起作为移位寄存器,两者互不相关。这样做提高了同一个LAB中寄存器的连接速度,节省了本地布线资源,同时也提高了LE的利用率。一个LAB由16个LE、LAB控制信号、LE进位链、寄存器链和本地互连资源等组成,其框图如2-7所示。

图2-7 LAB框图

本地互连资源传递在同一个LAB中不同LE之间的信号。寄存器链互连资源传递在同一个LAB中相邻两个寄存器的信号。本地互连资源由行、列互连资源和同一个LAB中的LE输出驱动。通过直接连接资源(Direct Link Interconnect)也可以将相邻的LAB、PLL、RAM模块和内部乘法器的输出连接到本地互连资源中。使用直接连接资源布线可以减少对行、列互连资源的占用,同时可以提供更好的性能和灵活性。

2.4 主流FPGA/CPLD产品

目前生产FPGA/CPLD的公司主要有Xilinx、Altera、Actel、Lattice、QuickLogic等,生产的FPGA/CPLD品种和型号繁多。

Altera主要有以下产品系列:MAX、Cyclone、Cyclone II、Stratix、Stratix II等。其中MAX是CPLD系列(有MAX 3000、MAX 7000和最新的MAX II),其他的都是FPGA。MAX II系列CPLD具有低成本、低功耗、高密度等优点,MAX II的成本是MAX的一半,密度是MAX的4倍,功耗仅是MAX的1/10。它采用0.18μm Falsh工艺,于2004年年底推出,采用FPGA结构,配置芯片集成在内部,和普通PLD一样上电即可工作。容量比上一代大大增加,内部集成一片8Kb串行E2 PROM,增加了很多功能,采用2.5V或3.3V内核电压。MAX II还采用不同于传统乘积项结构的CPLD结构,使其密度大大提高,最大的MAX II具有2210个LE。表2-1是MAX II器件家族的部分芯片。

表2-1 MAX II器件家族部分芯片

Cyclone和Cyclone II系列是低成本FPGA,面向中低端应用。Cyclone II采用90nm工艺技术,1.2V内核供电,其中18 × 18乘法器多达150个,片内嵌入式存储器高达1.1Mb,提供多达68416个逻辑单元(LE),密度超过第一代Cyclone FPGA的3倍,支持最多达4个可编程锁相环(PLL)和最多16个全局时钟线,具有较高的性能。Cyclone II器件内部的嵌入式乘法器是低成本DSP应用的理想解决方案。部分Cyclone器件参数见表2-2,部分Cy-clone II器件参数见表2-3。

表2-2 部分Cyclone器件参数

表2-3 部分Cyclone II器件参数

Stratix和Stratix II是高性能FPGA,面向高端应用。Stratix II FPGA采用TSMC的90 nm低K绝缘工艺技术生产,等价逻辑单元(LE)高达180 K,嵌入式存储器达到9 Mb。Stratix II器件包括高性能的嵌入DSP块,它能运行在370 MHz,并为DSP应用进行优化,具有比DSP处理器更强大的数据处理能力。每个Stratix II器件具有多达16个高性能的低偏移全局时钟,可用于高性能功能或全局控制信号,具有多达12个可编程PLL,具有健全的时钟管理和频率合成能力,Stratix II具有极高的性能和密度。Stratix II系列概览见表2-4。

表2-4 Stratix II系列

Xilinx的CPLD产品系列主要有:CoolRunner(1.8V低功耗,性能指标优于XC 9500,主要用于电池供电系统)、XC 9500系列(常见型号有XC 9536、XC 9572、XC 95144等,型号后两位表示宏单元数量)。FPGA产品系列主要有:Virtex、Spartan(新一代FPGA产品,结构与Virtex II类似,全球第一款90nm工艺FPGA,1.2V内核,于2003年开始陆续推出)系列等。Xilinx CPLD的特点是功耗很低。Spartan系列是与Altera的Cyclone系列相竞争的产品,而Virtex系列与Altera的Stratix系列相当。

Lattice在PLD领域发展多年,拥有众多产品系列,目前主流产品是ispMACH 4000系列PLD和LatticeEC/ECP系列FPGA。此外,其在混合信号芯片上也有诸多建树,如可编程模拟芯片ispPAC、可编程电源管理、时钟管理等。

MachXO是Lattice利用FPGA技术和结构设计的新一代PLD,采用0.13μm Flash工艺;不需要加载,和传统的PLD一样上电即可工作;部分型号还集成了锁相环和RAM块。MachXO系列见表2-5。

表2-5 MachXO系列

ispMACH 4000V/B/C/Z是Lattice收购Vantis公司以后推出的新一代PLD,目前的主流PLD产品,采用0.18μm工艺。其中4000Z系列是零功耗PLD,静态功耗非常低,适用于电池供电系统。4000系列是Lattice目前最成功的产品之一。表2-6是4000系列的部分参数。

表2-64000系列的部分参数

LatticeEC/ECP是Lattice的FPGA产品,采用0.13μm工艺,1.5V内核供电。LatticeEC不包含DSP单元,侧重于普通逻辑应用,ECP包含DSP模块,可用于数字信号处理,该FP-GA可以使用通用的存储器对FPGA进行配置,不需要专用的配置芯片。

2.5 FPGA/PLD的设计流程

完整的FPGA/PLD设计流程包括设计输入、功能仿真、综合、综合后仿真、实现、布线后仿真与验证、板级仿真验证与调试等主要步骤。

1)设计输入 在做设计时,首先需要利用文本编辑器或EDA工具中的专用图形编辑器将设计表达出来,进行编译后变成VHDL文件格式,为进一步的逻辑综合做准备。常用的设计输出方式有以下几种。

(1)原理图输入方式:原理图输入方式比较容易掌握,直观方便,很容易被人接受,而且编辑器中有许多现成的单元可以利用。然而原理图输入法的优点同时也是它的缺点:随着设计规模的增大,设计的易读性迅速下降;完成设计后要改变电路结构比较困难,因此设计的可重利用性差;移植、交流、设计的交付都存在困难,因为没有一个标准化的原理图编辑器。

(2)VHDL程序设计方式:这是最一般化、普遍采用的设计输入方法。VHDL设计方法用文本方式来描述设计,虽然没有原理图方式直观,但对于设计规模较大的设计,其可读性要远强于原理图方式,而且易于修改;由于VHDL有统一的标准,因此VHDL设计的可重用性、可移植性强,沟通交流方便。

2)逻辑综合与优化 综合就是将设计输入针对给定硬件进行编译、优化、逻辑化简等,最终获得门级电路的描述文件,综合的过程就是将设计的高级语言描述转换成低级的、可与FPGA/CPLD等结构相映射的网表文件。所以在综合之前必须给定最后实现的硬件结构参数(即选定综合器所支持的硬件)。显然,综合器是软件描述与硬件实现的一座桥梁。

3)目标器件的布局布线 适配器的功能是将综合器产生的网表文件映射到指定的目标器件中,包括底层器件的配置、布局和布线,适配完成后可以利用适配所产生的仿真文件进行精确的时序仿真。综合器可以由专业的第三方EDA公司提供,而适配器则需由FPGA/CPLD厂家自己提供,因为适配器直接与器件结构相对应。

4)编程/下载 如果编译、综合、布线/适配和功能仿真、时序仿真都没有问题,则可将适配器产生的下载文件通过编程器或下载电缆载入目标器件中进行测试。

5)设计过程中的有关仿真 一般来说,在完成开发流程中的每一步(源程序编写、综合、适配)之后都可以进行相应的仿真,分别称为行为仿真、功能仿真、时序仿真。行为仿真就是将VHDL设计直接送到VHDL仿真器中仿真,此时的仿真只是根据VHDL的语义进行的,与具体的电路无关。功能仿真仅是对VHDL所描述的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计要求,仿真过程不涉及具体的硬件特性,如时延等。时序仿真是接近真实器件运行的仿真,仿真过程中已将器件特性考虑进去,因而仿真精度要高得多。

2.6 FPGA与CPLD的对比

FPGA/PLD既继承了ASIC的大规模、高集成度、高可靠性的优点,又克服了普通ASIC设计周期长、投资大、灵活性差的缺点,逐步成为复杂数字硬件电路设计的理想首选。其特点包括:规模越来越大;开发过程简单;可反复地编程、擦除;开发工具智能化,功能强大;新型FPGA内嵌CPU或DSP内核,支持软、硬件协同设计,可作为片上可编程系统(SOPC)的硬件平台。但由于CPLD和FPGA结构上的差异,其具有各自的特点,主要体现在以下三个方面。

1)功能不同

CPLD更适合完成组合逻辑,FPGA更适合完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。

CPLD的连续式布线结构决定了它的时序延迟是均匀和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

CPLD比FPGA使用起来更方便。CPLD的编程采用E2 PROM或FastFlash技术,无须外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。

在编程方式上,CPLD主要是基于E2 PROM或Flash存储器编程,编程次数可达1万次,优点是系统断电时编程信息不丢失。CPLD又可分为在编程器上编程和在系统中编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。

CPLD保密性好,FPGA保密性差。

2)内部结构不同 CPLD由可编程逻辑宏单元围绕中心的可编程互连矩阵单元组成。而FPGA由三部分组成:可编程逻辑功能块、可编程I/O块和可编程互连。

3)编程方式不同 CPLD采用现场可编程的方式为器件定义功能并进行编程。FPGA采用在线重配置的方式为器件定义功能并进行配置。通常把对CPLD的程序下载称为编程,针对FPGA的程序下载称为配置。

2.7 思考与练习

(1)PLD的分类有哪些?

(2)PLA与PAL在结构上有哪些区别?

(3)FPGA与CPLD在结构上有什么区别?各有什么特点?