可编程逻辑器件(简称PLD)是可由用户编程、配置的一类逻辑器件的泛称,它是20世纪末出现的一种新型大规模电子集成电路。它的出现,使电子工程师能在实验室甚至家庭里制造出由用户自行设计的专用集成电路ASIC(Application Specific Integrated Circuits)。使用ASIC不仅可以减少系统的占用空间,而且可以降低功耗,提高电路的可靠性和工作速度。ASIC是一种由用户定制的集成电路,按制造过程的不同又分为全定制和半定制两大类。全定制集成电路是由制造厂家按用户的要求针对专门的应用设计和制造的芯片;半定制集成电路是制造厂家生产出半成品,用户根据自己的要求,用编程的方法对半成品进行加工,制造出具有特定功能的专用集成电路。可编程逻辑器件就属于半定制集成电路。
典型的可编程逻辑器件由一个与逻辑阵列后跟一个或逻辑阵列组成,这两个逻辑阵列或者其中一个是可以进行编程的。输入信号加到与逻辑阵列,实现对输入变量的与运算,产生出相应的乘积项,然后送到或逻辑阵列对这些乘积项进行或运算。输入变量经与、或运算的组合后就可产生所需的输出。由于与、或两个逻辑阵列是可以根据所需的逻辑关系进行编程的,这种芯片可完成组合逻辑电路的功能。典型的可编程逻辑器件芯片中包含有很多的与门和或门,用这样一块芯片构成的逻辑电路,就可达到需很多中小规模逻辑芯片才能完成的逻辑功能。
可编程逻辑器件经历了从PROM、PLA、PAL、GAL到CPLD和FPGA的发展过程,在结构、工艺、集成度、功能、速度和灵活性方面逐步得到改进和提高。近年来,可编程逻辑器件(CPLD/FPGA)已在工业上得到广泛应用。随着制造工艺的进步,可编程逻辑器件正向高密度与高速度方向迅速发展,使其在一块芯片内实现一个完整的电子系统SoC(System on Chip片上系统)成为可能。
可编程逻辑器件一般属于LSI 或VLSI之列,如已投放市场的FPGA XC3090内有9000个等效门,所以一般的逻辑电路表示方法很难描述它们的电路结构,也不便于表示内部配置与逻辑图之间的关系,因此对可编程逻辑器件有一些新的表示方法。
输入或输出缓冲器、反馈缓冲器都采用互补输出结构,如图8-15(a)所示。图8-15(b)、图8-15(c)分别给出了与门的两种表示方法:传统表示法和PLD表示法。传统表示法中的3个输入项A、B、C,在可编程逻辑器件中称为3个输入项,而多输入与门的输出D称为“积项”。图8-16给出了PLD的3种连接方式:实点连接表示硬件连接,即固定连接;“×”连接表示可编程连接,交叉点处的“×”表示这个连接是未经改动的;交叉点处无“×”和实点表示无任何连接,即断开连接。
(a)可编程逻辑器件的输入缓冲器
(b)传统表示法 (c)PLD表示法
图8-15 互补输出结构及与门的表示方法
图8-16 可编程逻辑器件的3种连接方式
图8-17所示为与门的两种特殊情况,表8-3列出了其对应的真值表。由图可见,D=A·A'·B·B'=0。这种输入项全接通,与门输出恒为0的状态称为与门的默认状态。为方便起见,可在与门符号中画“×”以代表这种默认状态,如图中输出E所示。图中输出F无任何输入项与其相连,因此该与项总是处于“悬浮”的状态,输出F恒为1。
表8-3 图8-17的真值表
输 入 |
输 出 |
输 入 |
输 出 | ||||||
A |
B |
D |
E |
F |
A |
B |
D |
E |
F |
0 0 |
0 1 |
0 0 |
0 0 |
1 1 |
1 1 |
0 1 |
0 0 |
0 0 |
1 1 |
图8-17 可编程逻辑器件与门的两种特殊情况
可编程逻辑器件的种类繁多,这里依据器件采用的基本结构,即与或阵列的可编程性可将可编程逻辑器件分为以下3类。
· 与阵列固定、或阵列可编程的可编程逻辑器件:只读存储器就属于这类的可编程逻辑器件,它的与阵列的每一个输出项都是最小项,实现的函数是标准的与或式。这种器件从20世纪70年代出现以来,主要用作存储器使用。20世纪80年代初曾开发出用于设计组合逻辑部件的可编程只读存储器件,但很快就被通用阵列逻辑器件取代了。
· 与、或阵列均可编程的可编程逻辑器件:这类可编程逻辑器件可实现逻辑函数的最简与或式,提高了系统的利用率,缩小了系统的体积,但制造工艺复杂,器件工作速度不高,而且增加了辅助开发系统的难度。可编程逻辑阵列(PLA)就是属于这类可编程逻辑器件。由于缺乏必要的开发工具和相应的支持软件,且工作速度不够快,所以现在也不常用了。
· 与阵列可编程、或阵列固定的可编程逻辑器件:这类可编程逻辑器件不仅能实现大多数逻辑功能,而且提供了最高的性能和速度,是可编程逻辑器件目前发展的主流。相应的代表有可编程阵列逻辑(PAL)、通用阵列逻辑(GAL)等。
用可编程逻辑器件设计数字系统,相对于传统的用标准逻辑器件(门、触发器等)设计数字系统有很多优点,主要表现在以下几个方面。
(1)减小了系统的体积,系统功能密度高。
功能密度是指在给定的芯片面积中可继承的逻辑功能。可编程逻辑器件的功能密度远远高于中、小规模标准器件。目前一般可编程阵列逻辑和通用阵列逻辑可代替5~20片中、小规模标准器件,而FPGA可代替100~200片。由于可编程逻辑器件具有相当高的密度,用一片可编程逻辑器件可以设计一个系统或一个子系统,从而使制成的系统体积小、重量轻。
(2)增强了设计的灵活性。
采用可多次编程的可编程逻辑器件进行产品开发时,不受标准逻辑器件功能的限制,用户通过编程就可以实现自己想要的逻辑功能,又可进行仿真和修改。这给系统的设计带来了极大的灵活性。
(3)提高了系统的处理速度和可靠性。
由于可编程逻辑器件的延迟时间很短,一般从输入到输出引脚的延迟时间仅为几纳秒,这就使得由可编程逻辑器件构成的系统具有更高的运行速度,同时由于用可编程逻辑器件设计系统减少了芯片和印刷版的数量,芯片的布线以及印刷版之间的连线得到了简化,从而提高了系统的可靠性。
(4)缩短了开发周期,降低了系统的成本。
使用中、小规模标准器件设计系统,必要先经过逻辑设计,然后再进行布局和选用器件。在这一过程中,标准器件的功能往往不能有效利用,而安装、焊接、调试也非常繁琐。用可编程逻辑设计逻辑器件,由用户来定义逻辑功能,可使芯片的利用率高。另一方面,在对系统的逻辑功能进行修改时,也无需重新布线和更换印刷版,大大缩短了系统的设计周期,有效的降低了成本。
(5)加强了系统的保密性。
目前广泛使用的可编程逻辑器件都增加了加密位,在系统研制成功后将其“烧断”,芯片内的编程数据便无法被读出,使系统具有保密性。
从前面的介绍可知,可编程只读存储器从结构上可以看成是由一个固定的与门阵列(地址译码器)和一个可编程的或门阵列(存储矩阵)组成的器件,因而可用于实现各种与或逻辑函数。可编程只读存储器采用固定的与门阵列作为完全地址译码器,译码器的每一根输出线对应一个最小项,n个输入变量必须对应全部的2n个最小项。可编程只读存储器存储矩阵中的存储单元,根据函数真值表或最小项的要求写入相应的内容。所以,一个地址码只能读出一个存储单元,反过来一个存储单元也只能被一个地址码选中,即可编程只读存储器的地址码和存储单元——对应。这样,即使多个存储单元的内容相同也必须重复存储,这对于存储空间来说无疑是一种浪费。为了解决这个问题,可编程逻辑阵列(Programmable Logic Array,PLA)应运而生。
20世纪70年代中期出现的可编程逻辑阵列,其基本结构也是由与门阵列和或门阵列组成,所不同的是可编程逻辑阵列的与阵列和或阵列都是可编程的,并且与阵列不再采用全译码方式,即n个输入变量不再产生2n个与项,而是有几个与门就产生几个与项,每个与项与哪些变量有关可由编程决定。或阵列可以通过编程选择需要的与项,形成与或表达式。可见,用可编程逻辑阵列可以实现逻辑函数的最简与或表达式,从而节省器件。在采用可编程逻辑阵列进行逻辑设计时,不需要知道具体的逻辑电路,而是可以直接根据逻辑关系要求,系统地推导出逻辑函数表达式或真值表,采用适当的编程工具把可编程逻辑阵列器件编程为具有所需逻辑功能的器件。它适用于大批量定型产品和高速器件的设计,采用熔丝工艺,为一次性编程器件。
可编程逻辑阵列的容量不仅取决于输入变量和输出端的个数,而且还与它的与项数(即与门数)有关,其存储容量常用“输入变量数(n)-与项数(P)-输出端数(m)”来表示。如图8-18所示的可编程逻辑阵列的容量为3-6-3,其中A、B、C为输入,D、E、F为输出。
图8-18 可编程逻辑阵列逻辑结构图
用可编程逻辑阵列不仅可以用于实现任意组合逻辑电路的功能,而且还可以用于实现时序逻辑电路的功能。用于实现组合逻辑电路功能的可编程逻辑阵列称为组合可编程逻辑阵列,用于实现时序逻辑电路功能的可编程逻辑阵列称为时序可编程逻辑阵列。用可编程逻辑阵列实现时序逻辑电路的功能时,需要在可编程逻辑阵列中加入触发器阵列。
用可编程逻辑阵列A进行组合逻辑电路设计的一般思路是:首先将给定问题的逻辑表达式化为最简与或表达式;然后根据最简与或表达式中不同的与项以及由这些与项所构成的函数表达式中的或关系分别形成与阵列和或阵列;最后画出阵列逻辑图。
下面举例说明用可编程逻辑阵列进行组合逻辑电路设计的一般方法。
【例8-1】 用适当容量的可编程逻辑阵列设计一个由4位二进制码到格雷码的代码转换电路。
解:设4位二进制码用B3B2B1B0表示,4位格雷码用G3G2G1G0表示,4位二进制码转换为格雷码的真值如表8-4所示。将4位二进制码作为可编程逻辑阵列的地址输入端,将4位格雷码作为可编程逻辑阵列的输出端。
表8-4 二进制码转换为格雷码的真值表
二进制码 |
格雷码 |
二进制码 |
格雷码 |
B3 B2 B1 B0 |
G3 G2 G1 G0 |
B3 B2 B1 B0 |
G3 G2 G1 G0 |
0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 |
0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 1 0 1 0 1 0 1 0 0 |
1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 |
1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 1 1 0 0 0 |
根据上表给出的二进制码-格雷码转换对照表列出逻辑表达式,并用卡诺图化简法转换成最简与或式:
G3=∑m(8,9,10,11,12,13,14,15)=B3
G2=∑m(4,5,6,7,8,9,10,11)=B3'B2 +B3 B2'
G1=∑m(2,3,4,5,10,11,12,13)=B2'B1+B2 B1'
G0=∑m(1,2,5,6,9,10,13,14)=B1'B0+B1B0'
可见,上式中共有7个与项,用Yi表示,分别为:
Y0=B3 Y1=B3'B2 Y2=B2'B3 Y3=B2'B1
Y4=B1'B2 Y5=B1'B0Y6=B0'B1
输出Gi用Yi的或关系式表示就是:
G0=Y5 +Y6 G1=Y3 +Y4 G2=Y1 +Y2 G3=Y0
根据这些与项和或项,可列出可编程逻辑阵列的阵列,如图8-19所示。
图8-19 用可编程逻辑阵列实现4位二进制码到格雷码的转换
由图8-19可见,最简与或式中只有7个与项,所以可编程逻辑阵列的与阵列中只要7根字线就可以了;又由于表达式中共有4个或式,所以可编程逻辑阵列的或阵列也只要4根位线。这样,可编程逻辑阵列仅用7×4=28位存储容量,便实现了二进制码到格雷码的转换。若该电路用只读存储器来实现,则需要24×4=64位存储容量。随着输入变量数的增加,完成同样功能的可编程逻辑阵列结构简单的程度将更加显著。
用可编程逻辑阵列来设计时序逻辑电路时,由于时序逻辑电路的输出不仅取决于当时的输入状态,还和电路以前的状态有关,所以时序可编程逻辑阵列和组合可编程逻辑阵列的区别在于除了具有与阵列和或阵列之外,还需要一个具有存储过去状态功能的触发器网络。
利用可编程逻辑阵列可设计出各种组合逻辑电路和时序逻辑电路,电路的功能越复杂,可编程逻辑阵列的优势就越显著。但由于可编程逻辑阵列出现较早,当时缺少成熟的编程工具和高质量的配套软件,且速度慢,价格偏高,所以未能像后来出现的可编程阵列逻辑、通用阵列逻辑那样得到广泛应用。
可编程阵列逻辑器件(Programmable Array Logic,PAL)是在只读存储器和可编程逻辑阵列基础上发展起来的一种可编程逻辑器件。相对于只读存储器而言,可编程逻辑阵列的使用更灵活,且易于完成多种逻辑功能,同时又比可编程逻辑阵列工艺简单,易于编程和实现。可编程阵列逻辑增设了一个保密熔丝(保密位),在验证编程正确无误后将其“烧断”,便无法读出内部程序,可有效防止泄密。
可编程阵列逻辑器件有一个可编程的与逻辑阵列,后面跟一个固定的不可编程的或逻辑阵列。图8-20给出了可编程阵列逻辑的阵列逻辑图,其中A、B、C为输入变量,Y0、Y1、Y2、Y3为输出变量,所有的与门构成一个与逻辑阵列。由于与阵列是可编程的,所以可编程阵列逻辑有许多输入。由于或阵列是固定的,因而可以做得很小。
图8-20 可编程阵列逻辑的阵列逻辑图
可编程阵列逻辑器件有多种结构,其范围涉及以处理一般逻辑设计问题为主的简单器件和处理大型复杂问题的复杂器件。可编程阵列逻辑器件产品的品种与型号的意义如下:可编程阵列逻辑器件分为20引脚和24引脚两大系列,此外还有40(或44)80(或84)引脚的宏可编程阵列逻辑器件。
(1)按内部结构分,每一系列又分为简单组合逻辑、带反馈的寄存器输出和可编程I/O这三大类器件。
(2)按功能分,每一系列又分为标准型、半功耗型1/4功耗型。
(3)按运行速度可分为标准速度、高速、超高速器件。
(4)按工作的可靠性又可分为军用、民用器件等等。下面介绍一下两种简单的可编程阵列逻辑器件:简单组合型和简单寄存型。
图8-21所示的是PAL 12H6的逻辑图。PAL 12H6是一个简单组合型可编程阵列逻辑器件,它具有12个输入、6个输出和16个乘积项。从图中可以看出它的1、2、3、4、5、6、7、8、9、11、12、19脚为输入管脚;13、14、15、16、17、18脚为输出管脚;24条垂直线条代表输入,它们分别对应于12个输入量的原变量和反变量;16条水平线代表16个乘积项。管脚14、15、16、17的输出均含有两个乘积项,而13、18脚的输出含有4个乘积项,由此可见,输出或阵列的形式已经确定,不可更改。而16个乘积项的输入端不固定,也就是图中水平线和垂直线的交点,可以通过编程确定是否相连,所以与门阵列是可编程的。根据需要用编程器完成乘积项输入的连接,就可以实现不同的逻辑组合功能。
图8-21 PAL12H6的逻辑图
简单组合型可编程阵列逻的输出与系统时钟无关,不能实现时序逻辑电路的设计,而简单寄存型可编程阵列逻中含有用于存储状态的触发器,所以这类器件均有内部反馈,将触发器的输出反馈到阵列的输入。图8-22为寄存型可编程阵列逻器件的结构图。由图可以看出,该类可编程阵列逻器件在输出端多了一个D触发器。在系统时钟CLK的上升沿到来时,将或门的输出存入D触发器,触发器的输出端Q通过带公共选通(OE)的三态缓冲器送到输出端。另外,D触发器的Q'输出端通过一个互补输出缓冲器反馈到与阵列,这样可编程阵列逻就有了记忆原来状态的功能,从而满足了设计时序电路的需要。典型的寄存型可编程阵列逻辑器件有PAL 16R8(8个输入、8个寄存器输出、8个反馈输入、一个公共时钟和一个公共选通)。
图8-22 寄存型可编程阵列逻器件的结构图
可编程阵列逻辑器件在逻辑设计领域中曾占有过独特的地位,它为解决系统分散、接口电路等问题节省了大量的时间和资金,避免了在使用定制和半定制ASIC器件时所遇到的实践与资金等方面的风险。可编程阵列逻辑器件把可编程的灵活性与接口功能的可选择性融合在了一起,以实现各种复杂的功能。
可编程阵列逻辑的出现给逻辑设计带来了很大的灵活性,但仍有一定的局限性。例如:可编程阵列逻辑采用熔丝工艺,编程之后不能改写;再有,可编程阵列逻辑的输出结构不够灵活,要满足不同输出结构的需求,就得选用不同型号的可编程阵列逻辑器件。通用阵列逻辑(Generic Array Logic,GAL)是1985年美国Lattice公司在可编程阵列逻辑基础上开发的一种新型的可编程逻辑器件,它比可编程阵列逻辑具有更高的可靠性和更大的灵活性。
通用阵列逻辑电路又称门阵列逻辑电路,它是利用已完成大部分集成电路制造工序的半成品门阵列母片,由厂家根据用户提供的逻辑要求进行布线、封装而制成的专用逻辑电路。由于它是为某种应用特制的,因此对于应用来说,它应该是一种最佳的选择。
通用阵列逻辑由大量门单元规则排列成阵列组成。图8-23为它的结构简图,从图中可以看出,芯片四周是输入/输出缓冲单元,中间是门单元,阵列之间为布线区。作为通用阵列逻辑的单元电路,这些门电路相互独立,可以根据需要再进行布线,构成不同的逻辑电路。与全定制电路不同的是门阵列母片是按照标准规格大批量生产的,所以成本很低,而最后用户定制的那一部分的生产工艺相对比较简单,所以门阵列电路最终的成本大大低于全定制电路的成本,特别是在大批量生产时。另一方面,由于针对用户级的开发,比从头开发整块芯片要简单的多,所以其开发周期及开发费用更容易为用户所接受。
图8-23 门阵列电路结构简图
和电信号可擦除可编程只读存储器相比,通用阵列逻辑在工艺、结构和性能上都有很大的改进,其特点如下:
(1)采用了E2CMOS工艺。由于采用了E2CMOS工艺,不仅使通用阵列逻辑的功耗低、速度快,而且具有电擦写和反复编程的特点。
(2)输出结构配置了输出逻辑宏单元(Output Logic Marco Cell,OLMC)。输出逻辑宏单元可由设计者重组为4种基本输出类型的模式,这4种基本模式为:专用组合输出、专用输入、I/O和寄存器输出。这4种基本模式提供了极大的组态灵活性,以适用于各种各样的实际需要。由于通用阵列逻辑具有输出逻辑宏单元,用户可以通过编程选择输出组态。通用阵列逻辑既可以设置成组合逻辑电路输出,又可以设置成寄存器输出;既可以是输出高电平有效,又可以是输出低电平有效等。这样,通用阵列逻辑就可以在功能上代替可编程阵列逻辑的各种输出类型,从而增加使用的灵活性。
(3)保密性好。通用阵列逻辑具有加密单元,可以有效地防止复制,增强了电路的保密性。但是,如果想用门阵列组合成一个复杂的系统,设计工作量将会很大。若在硅片已经加工出来之后还想要修改设计,开发费用也将是很高的。虽然通常认为门阵列电路的单位成本很低,但这需要很大的批量。由于开发风险很大,所以在使用这种芯片进行设计时要慎重。
现场可编程门阵列逻辑电路(FPGA)是1984年开始推出的新一代产品,算是可编程逻辑家族的后起之秀,它是在通用阵列逻辑器件基础上发展起来的新一代可编程逻辑器件。它保留了通用阵列逻辑器件的优点,同时又融合了ASIC的优点,如功能密度大、用户可用的I/O引脚数多、一片便能完成一个中等规模的数字系统等,而且它克服了通用阵列逻辑集成度不高,ASIC设计周期长、加工费用高及承担设计风险等缺点。
现场可编程门阵列逻辑电路是通用逻辑单元以栅格方式连接起来的集合体。典型的现场可编程门阵列逻辑电路是利用短的、可编程和可寻址的连接线将复杂程度从简单的门电路到大的宏单元的各种逻辑单元连接起来。现场可编程门阵列逻辑电路的编程方式有3种:CMOS-SRAM方式、非易失性存储器方式和熔丝方式。其中以熔丝方式的集成度最高、速度最快、可靠性最好。
现在有一种称为激光可编程门阵列(LPGA)器件。它中和了传统门阵列的性能和密度,并采用激光切割的技术,生产出用户所需要的产品,这种工艺技术具有现场可编程门阵列逻辑电路的周转速度和较低的生产成本,对现场可编程门阵列逻辑电路有相当大的竞争力,还有一种更复杂的可编程逻辑阵列(CPLD)器件,它与现场可编程门阵列逻辑电路的区别在于:CPLD有很长的固定在芯片上的寻址单元,彼此之间靠转换矩阵相连。CPLD比现场可编程门阵列逻辑电路转换速度更快,性能也更可靠。