2.1 可编程逻辑器件的历史
2.1.1 PROM是可编程逻辑器件
如今电子技术的发展日新月异,电子器件的发展不仅推动设计手段不断更新,甚至推动了设计理念的更新。
1947年美国新泽西州贝尔实验室里诞生了第一个晶体管,电子管在很短的时间里就失去了存在的意义。20世纪60年代中期,TI(Texas Instruments,德州仪器)公司设计制造出具有一定功能的组件IC(Integrated Circuit,集成电路),此后集成电路开始飞速发展。
我们在数字电路技术课程中学习了数字逻辑电路知识,其中的编码器、译码器、计数器、寄存器等数字逻辑器件的功能是固定的,工程师只能利用器件的固定功能进行设计。这种具有固定功能的逻辑器件称为固定逻辑器件。随着技术的发展,固定逻辑器件很快就无法满足设计的需要了。稍微复杂一点的逻辑电路就需要十几只甚至上百只逻辑芯片来组合实现,不仅增加了设计的难度,电路的稳定性随着规模的增大也越来越难以保证。笔者还能够清楚地记得上大学时,完成数字电路技术这门课的课程作业——设计一个红绿灯系统,感觉有相当的难度。首先要查阅所需用到的每种芯片的使用说明,还要有一定创造性地将这些芯片有机地连接起来,然后用实验电路板安装、调试。当时笔者用了一周的时间,仍未能完成所有的功能。
采用固定逻辑器件设计逻辑电路系统的辛苦,现在的大部分工程师已经无法体会了。时代呼唤更灵活高效的器件,于是1970年,第一个可编程只读存储器(Programmable Read Only Memory,PROM)诞生了,它开启了可编程器件的大门。
有人说可编程逻辑器件的产生是必然的,是不以人的意志为转移的,因为固定逻辑器件或通用集成电路在电路设计中存在两个突出的矛盾:一是大规模、高集成度、高性能的电路无法使用分立器件实现,或实现成本过高;二是复杂集成电路的生产成本较高,不能满足各种低端需求。在这个追求成本和效益的商业社会,有了这两个突出矛盾,可编程逻辑器件的产生就成为必然。
可编程逻辑器件(Programmable Logic Device,PLD),是作为一种通用集成电路产生的,它的逻辑功能按照用户对器件的编程来确定。根据可编程逻辑器件的定义,其核心在于器件的功能可以根据需要由用户编程确定。
虽然PROM与本书要讨论的FPGA之间还存在巨大的差异,但从可编程逻辑器件的定义可知,它们都是可编程逻辑器件。接下来我们看看PROM如何根据用户需求实现逻辑功能。
只读存储器(ROM)可以存储二进制信息,用户将要存储的信息写入存储器中,信息一经写入,即使掉电后信息也不会丢失。读取信息时,只要控制相应的地址值,存储器即可将指定地址空间的值输出。
ROM如何与逻辑电路联系起来?我们回过头来看看第1章讨论的半加器真值表及逻辑结构原理图,如图2-1所示。
图2-1 半加器真值表及逻辑结构原理图
将真值表的输入看作ROM的地址,真值表的输出看作存储空间的数据,半加器正好是一个深度为4、位宽为2bit的ROM。只要按半加器真值表的顺序设置ROM存储空间的值,就可以完全实现双输入半加器的逻辑电路功能。推而广之,对于有n个输入信号的组合逻辑电路,我们用深度为2n的存储器就可以实现任意的组合逻辑电路。我们所要做的是预先根据逻辑电路的真值表,设置ROM存储空间的值,且ROM的存储数据位宽表示可以实现的组合逻辑电路的输出个数。存储空间具备可编程能力的ROM称为PROM(Programmable ROM)。
由以上分析可知,我们将PROM看作可编程逻辑器件,是因为它能利用函数输入所指示的存储器位置上存储的函数值执行组合逻辑。如果有必要,就会实现函数的全部真值表。由于实现函数真值表时没有进行化简,器件资源未必能够得到充分利用,所以存储器执行组合逻辑的效率较低。接下来我们了解一下从PROM到FPGA的发展过程。
2.1.2 从PROM到GAL
PROM的可编程性在于可以对存储空间的数据进行编程。为了理解可编程逻辑器件的发展,有必要了解PROM的结构,如图2-2(a)所示。
图中的“·”表示连接状态,“×”表示可编程状态,“+”表示未连接状态。为简化图形表示,每条连接线的多个连接点和与门及或门之间采用单线表示多输入状态,比如图2-2(a)中从上至下第一个与门输入为A'B'。
由于PROM只是对存储空间的数据进行编程,图2-2(a)中左侧的与门阵列表示逻辑输入(构成PROM的存储空间地址)是固定的,在制造芯片时已设置好,用户无法更改。根据逻辑电路的功能,图2-2(a)中左侧从上至下的与门输入分别为A'B'、A'B、AB'、AB,正好对应0(00)、1(01)、2(10)、3(11)这4个地址。图2-2(a)中的右侧用或门阵列存储数据,是可以由用户编程设置的。对于半加器来讲,我们根据半加器真值表将或门阵列中的相应位置通过编程器连通,形成图2-2(a)所示的结构。对于F1来讲,对应地址为1(01)、2(10)的位置均为1,即F1=A'B+AB'。同样,对于F2来讲,对应地址为3(11)的位置为1,即F2=AB。对比图2-1所示的半加器结构,可知F1为半加器的SUM输出信号,F2为半加器的C_OUT输出信号。
在继续讨论其他可编程逻辑器件之前,先考虑一下为什么图2-2(a)所示的与-或门阵列结构可以实现任何功能的组合逻辑电路?这个问题并不难,从数学角度出发,任何一个逻辑都能由多项式表示。多项式中无非两种运算,即乘法运算和加法运算,而逻辑门中的与门符合乘法运算规则,或门符合加法运算规则。这就是任何一个组合逻辑电路都可以用与门阵列和或门阵列实现的原因。
我们知道,PROM最初是作为计算机存储器来设计的,虽然可以用来实现简单的逻辑功能,但随着应用范围越来越广,它的问题就暴露出来了。对于同样多的输入,PROM的与门阵列是固定的,所以要考虑所有可能的输入乘积项,但真正使用的乘积项可能只是其中的小部分,这样将浪费大量的与门阵列。因此,1975年基于与门阵列、或门阵列都可编程的PLA(Programmable Logic Array,可编程逻辑阵列)开始投入使用。PLA的结构如图2-2(b)所示。
PLA是简单可编程器件中用户可配置度最好的器件,因为它的与门阵列和或门阵列都是可配置的。但PLA也有一个明显的缺点:通过编程连线传输信号需要花费很长的时间。这样一来,PLA的速度就没法做得很高,从而限制了它的应用。为此,20世纪70年代末,速度更快的PAL(Programmable Array Logic,可编程阵列逻辑)被发明了出来。PAL的结构如图2-2(c)所示。PAL是与门阵列可编程的,或门阵列固定。图2-2(c)表示了通过编程实现半加器功能的方法。与PROM、PLA相比,PAL的速度要高很多,但它只允许对有限数量的乘积项做或运算。为了进一步提高速度,于是更大规模的GAL(Generic Array Logic,通用阵列逻辑)被发明了出来。
图2-2 PROM、PLA、PAL结构图
GAL是在PAL的基础上发展起来的增强型器件,它直接继承了PAL器件的与-或门阵列结构,利用灵活的输出逻辑宏单元(Output Logic Macro Cell,OLMC)结构来增强输出功能,同时采用新工艺,使GAL器件具有可擦除、可重编程和可重配置其结构等功能。GAL的型号表示了其输入、输出规模,如GAL16V8表示该芯片输入信号最多可达16个,输出端数为8个,V表示输出方式可编程,其内部结构如图2-3所示。
图2-3 GAL16V8的内部结构
2.1.3 从SPLD到CPLD
可编程逻辑器件从PROM、PLA、PAL,发展到GAL,已初具现代可编程逻辑器件的雏形。之所以说是雏形,是因为无论从器件可编程的灵活性,还是从器件的规模看,这些可编程逻辑器件都比较简单,功能比较单一,主要用于实现组合逻辑电路。因此,业界一般将这些器件统称为简单可编程逻辑器件(Simple Programmable Logic Device,SPLD),且将具备几百个逻辑门的GAL22V10作为简单可编程逻辑器件与复杂可编程逻辑器件的分水岭。
随着技术的发展,SPLD的集成度和灵活性逐渐不能满足各种电子设计需求。到了1983年,美国的Altera公司(Intel于2015年收购了Altera)发明了具有更高集成度和灵活性的复杂可编程逻辑器件(Complex Programmable Logic Device,CPLD)。
典型的CPLD是由PLD(可编程逻辑器件)模块阵列组成的,它们之间有可编程的片内集成互连结构。除性能提高外,它们的结构突破了传统SPLD的限制,不再只有相对较少的几个输入。CPLD有大量的输入输出端口,但并不以面积的惊人增加为代价。CPLD的每个PLD模块都有一个类似PAL的内部结构,它完成输入的组合逻辑功能。PLD中的宏单元输出可通过编程连接到其他模块的输入,从而形成复杂的多层逻辑,超出了单个逻辑模块的限制。
图2-4是Altera的MAX7000系列器件的内部结构图。MAX7000系列CPLD的内部结构包括逻辑阵列模块(Logic Array Block,LAB)组成的阵列、可编程互连阵列(Programmable Interconnect Array,PIA)和可编程I/O控制模块(I/O Control Block)。每个LAB包括36个输入端、16个输出端及16个宏单元(Macrocell),每个宏单元包括处理组合或时序运算的组合逻辑模块和触发器。PIA作为全局总线提供了多重LAB、专用输入端和I/O引脚之间的连接。
图2-4 MAX7000系列器件的内部结构图
I/O控制模块在I/O引脚、PIA和LAB之间建立起连接。专用全局输入时钟信号(GCLK)端和低电平有效清除信号(GCLRn)端与所有宏单元连接。所有与I/O控制模块相连的输出端由低电平有效信号OE1和OE2使能。对LAB的输出引脚8~16,可以通过编程将其连接到I/O引脚,而对I/O引脚8~16,可以通过编程经由I/O控制模块将其连接到PIA。每个LAB包括具有相同基本结构的可编程宏单元阵列,如图2-5所示。
图2-5 MAX7000器件的宏单元结构图
宏单元包括逻辑阵列(Logic Array)、驱动或门的乘积项选择矩阵(Product-Term Select Matrix)及可编程触发器。可编程宏单元阵列的功能与小型PAL类似,形成乘积项并通过或运算得到最终的表达式。每个宏单元拥有来自PIA的36个输入端及16个形成扩展信号的附加输入端。每个宏单元生成5个乘积项,并提供给乘积项选择矩阵(每个宏单元可单独形成由5个乘积项构成的表达式)。由乘积项选择矩阵可将乘积项送到或门、异或门、并行逻辑扩展器(Parallel Logic Expanders)的输入端、预置清除时钟信号端或触发器的使能输入端。
每个宏单元的触发器可以单独编程以实现D型、T型或JK型触发器,或用以实现用于时序电路的RS锁存器。例如,宏单元可转换成T型触发器,实现更为有效的计数器和加法器(将触发器的输出与异或门的一个输入相连,并通过触发器信号驱动另一个输入端)。
2.1.4 FPGA的时代
虽然CPLD的功能和性能已远远超过SPLD,但仍存在触发器数量少、器件规模较小、功耗大等缺点。需要采用大量时序逻辑电路的设计推动可编程逻辑器件不断向前发展。每一个新事物,从诞生到发展壮大都不可避免地要经历艰难的过程,FPGA(Field Programmable Gate Array,现场可编程门阵列)也不例外。
在20世纪80年代早期,晶体管非常宝贵,芯片设计者一直试图发挥电路中每个晶体管的功效。不过,Ross Freeman的想法与此不同。他设计了一块满是晶体管的芯片——FPGA,这些晶体管(有时候,一些晶体管没有被使用)被松散地组织成逻辑单元。这些逻辑单元可被轮流配置。工程师可以根据需要对该芯片进行编程,添加新的功能,满足不断发展的标准或规范要求,并可在设计的最后阶段进行修改。Freeman按照摩尔定律(晶体管数量每两年翻一番)推测,晶体管成本将随时间推移逐步下降,低成本、高度灵活的FPGA将成为各种应用中定制芯片的替代品。
为了销售FPGA芯片,Freeman与他人共同创办了Xilinx(赛灵思)公司(2022年被AMD公司收购)。该公司的第一款产品XC2064在1985年被推出。
2009年2月18日,Xilinx公司宣布,Xilinx公司共同创始人之一Ross Freeman(见图2-6)因发明FPGA荣登2009年美国发明家名人堂。美国发明家名人堂评选副主席Fred Allen表示:“我们非常高兴Freeman能在2009年入选名人堂。他的远见卓识和创造热情催生了可编程芯片。这项技术不仅影响了之后25年的电子产业发展,还推动Xilinx公司的客户不断设计出创造型终端产品,从而让我们的生活质量不断提高。”
图2-6 Ross Freeman
Xilinx公司推出的全球第一款FPGA产品XC2064怎么看都像是一只“丑小鸭”——采用2μm工艺,包含64个逻辑模块和85000个晶体管,门数量不超过1000个。22年后的2007年,FPGA业界双雄——Xilinx公司和Altera公司纷纷推出了采用最新65nm工艺的FPGA产品,其门数量已经达到千万级,晶体管个数更是超过10亿个。
在20世纪80年代中期,可编程器件从任何意义上来讲都不是当时的主流。PLA在1970年左右就出现了,但是一直被认为速度慢,难以使用。然而,FPGA的发明者Freeman认为,对于许多应用来说,如果实施得当的话,其灵活性和可定制能力都是具有吸引力的特性。也许最初其只能用于原型设计,但是未来可能代替更广泛意义上的定制芯片。FPGA走过了从初期开发应用到限量生产应用,再到大批量生产应用的发展历程。从技术上来说,FPGA最初只是逻辑器件,现在强调平台概念,加入了数字信号处理、嵌入式处理、高速串行和其他高端技术,从而被应用到更多的领域。
当1991年Xilinx公司推出其第三代FPGA产品——XC4000系列时,人们开始认真考虑可编程技术了。XC4003包含44万个晶体管,采用0.7μm工艺,FPGA开始被制造商认为是可以用于制造工艺开发测试过程的良好工具。事实证明,FPGA可为制造工业提供优异的测试功能,FPGA开始代替存储器来验证新工艺。新工艺的采用为FPGA产业的发展提供了机遇。
FPGA及可编程逻辑器件产业发展的最大机遇是替代ASIC(Application Specific Integrated Circuit,专用集成电路)和专用标准件(Application Specific Standard Parts,ASSP),主要由ASIC和ASSP构成的数字逻辑市场规模大约为数百亿美元。由于用户可以迅速对可编程逻辑器件进行编程,按照需求实现特殊功能,与ASIC和ASSP相比,可编程逻辑器件在灵活性、开发成本以及产品及时面市方面更具优势。然而,可编程逻辑器件通常比这些替代方案成本更高。因此,可编程逻辑器件更适合对产品及时面市有较大需求的应用,以及产量较低的最终应用。可编程逻辑器件制造技术和半导体制造技术的进步,从总体上缩小了可编程逻辑器件和固定芯片方案的相对成本差。在曾经由ASIC和ASSP占据的市场上,Intel公司已经成功地提高了可编程逻辑器件的销售份额。
“FPGA非常适用于原型设计,但对于批量DSP系统应用来说,成本太高,功耗太大。”这是业界此前的普遍观点,很长时间以来也为FPGA进入DSP领域设置了观念上的障碍。而如今,随着AMD公司和Intel公司相关产品的推出,DSP领域已经不再是FPGA的禁区,而是成了FPGA未来的希望所在。