1.1从第一个晶体管到PROM的出现
1947年12月23日,在创造出科学史上无数个里程碑的美国新泽西州贝尔实验室里,第一个晶体管的诞生打响了微电子革命的第一*。它的出现,使得我们能够使用非常小的体积、消耗非常低的功耗的电子元件,来代替当时体积庞大、功耗大的电子管。也就是说,它的产生为我们能够制造出体积更小,功耗更低的产品可能性发生了阶越性的变化。
在此之后,直接延续到1950年,一种更加复杂的,称为双极型晶体管的器件诞生了。相比第一个晶体管,双极晶体管具有更高的可靠性,制造更为容易,造价也越为低廉,这一点非常重要。因为现在任何一个集成电路都是由成百成千,甚至百万的晶体管构成,一个晶体管性能的提高对集成电路的整体性能的提升会是巨大的。
紧接着到了1962年,在美国新泽西州的普林斯顿微电子研究所,一种叫做金属氧化物半导体场效应晶体管诞生了,这就是我们熟称的MOSFET,简称FET。它具有更小的尺寸,更廉价的制造成本,更低的功耗。
介绍到这里关于晶体管发展的关键历程就告一段落,但是有人会问,晶体管和可编程逻辑器件有什么关系呢?晶体管是构成可编程逻辑器件的原材料,好比沙子泥土和房子的关系,但是却没有砖头和房子的关系那么直接,在由晶体管构成可编程逻辑器件中充当砖头角色的就是门电路。而门电路的构成可以分为两种,对于双极型晶体管,如果以特定方式将相连,就可以形成晶体管-晶体管逻辑门,简称TTL;对于金属氧化物半导体场效应晶体管,由NMOS与PMOS以互补方式就可以构成我们所熟知的互补金属氧化物半导体,简称CMOS。虽然不同的晶体管构成的逻辑门不一样,但是功能是一致的。区别在于用CMOS实现的逻辑门比TTL实现的速度要慢一些,但是COMS逻辑门具有静态功率低、占用面积小的优势。这也是采用TTL实现还是CMOS实现的集成电路的区别。
技术或事物总是朝着由简至烦发展,仅仅依靠这些逻辑门做的事情还是非常非常有限的。在从晶体管到可编程逻辑器件PROM的过程中,还有这么一个环节,就是集成电路的形成。
最初的晶体管是独立封装在一个小金属外壳中做为分立元件提供的。后来人们开始觉得把这个整个电路的制造放在一个半导体里做是个好主意,到了1958年,德州仪器公司便成功地将5个元件的移相振荡器制作在同一片半导体上,这可算得上是第一片集成电路了。几乎同时,现在依然在IC制造业中广泛使用的衬底光学印刷技术出现了。它的出现,极大地促进了集成电路的迅速发展。20世纪60年代中期,TI公司设计制造出了具有一定功能的组件IC,开始了集成电路的飞速发展。
最开始的集成电路的功能都是针对特定应用单一固定的,这对工程实现和学术研究来讲,除非生产量相当大,否则为需求专门设计生产一个这样的集成电路器件代价将是非常高的,于是1970年,第一个可编程只读存储器PROM感受到时代的召唤——诞生了,它开启了可编程器件的大门。
1.2 SPLD与CPLD的时代
我们一般都喜欢用字母缩写来表示一些特有的技术或者事物,那么这里用SPLD(Simple Programmmable Logic Device)来作为简单可编程逻辑器件的缩写,与之相对应,用CPLD(Complex Programmable Logic Device))来作为复杂可编程逻辑器件的缩写。那么SPLD和CPLD的简单和复杂的具体界限是什么呢?它们又是以怎么样的方式发展起来的呢?这就是这一节要叙述的内容。
在上一节中我们提到了,无论是双极型晶体管还是金属氧化物半导体场效应晶体管,它们各自按照特定的连接方式就可以构成逻辑门,而由逻辑门又可以构成可编程逻辑器件。那么,可编程逻辑器件将从逻辑门的层次上进行探讨和描述会比较方便。
在介绍从PROM到CPLD的发展历程前,先提一个问题,不知道大家有没有想过可编程逻辑器件的可编程性在哪?它能实现我们任何逻辑吗?下面就要解答这个问题,从数学角度出发,任何一个逻辑都能由多项式表示,多项式中无非就是两个运算,一个是由乘构成项,另一个是由加构成多项。正好,逻辑门中的与门正好符合乘运算,或门正好符合加运算,那么任何一个逻辑都可以与门和或门来表达实现了。这就是为什么SPLD和CPLD能够实现能和逻辑的本质。
针对与门阵列和或门阵列的可编程方式和一些其他外围元件的不同,这里将SPLD发展到CPLD过程分成如下图所示的几个阶段。
从上图看出,PROM是基于或阵列可编程,PLA是基于与阵列和或阵列都可编程,而之后的PAL、GAL都是基于与门阵列可编程的。注意,这里用门电路表示的电路并不代表实际的电路图。为什么会出现这样的现象呢?早在1970年,设计师们从多项式出发,考虑到或门阵列的可编程性可以用熔丝或EPROM晶体管和E2PROM单元来实现,于是出现了基于或阵列可编程的PROM。这种器件最初作为计算机存储器来存储程序指令和常量数据,并且也可以用来实现简单的逻辑功能。但是随着应用越来越多,它的问题就暴露出来了:对于同样多的输入来讲,PROM的与阵列是固定的,所以要考虑所有的可能的输入乘积项,但是真正使用的乘积项可能只是其中的一小部分,这样将浪费大量的与门阵列。于是在1975年,基于与门阵列、或门阵列都可编程的PLA开始投入使用。PLA是简单可编程器件中用户可配置的最好的器件,因为它的与门和或门阵列都是可配置的。但PLA也有一个不利的一面,与预定义相反,信号通过可编程连线后需要花费很长的时间,这样以来PLA就比PROM的速度要低了。
为了克服PLA的速度问题,在20世纪70年代末,一种可编程阵列逻辑PAL的器件产生了,它是与PROM相反基于与阵列可编程的,速度要比PLA要高的多,但是它只允许有限数量的乘积相或。为了克服这个问题,于是更大规模的GAL产生了。除了规模上更大外,GAL上还有了触发器,出现了小单元思想,可以实现时序电路。20世纪80年代早期,更为复杂的PLD器件出现了,质变在1984年,Altera公司发明了基于CMOS和EPROM组合的CPLD,CPLD本质上是基于某一SPLD的一个阵列。
1.3 FPGA的崛起
还是那句话,任何一件新事物的诞生都是有一定的历史背景和市场需求的。同样,FPGA也不例外。当时一边是具有可配型高、设计和调试时间短,但是相对来说实现功能简单的SPLD和CPLD,而另一边是支持极为大规模和复杂功能但是设计很耗时、开发周期长、昂贵、专对性强的ASIC。在20世纪80年代初,Xilinx开发了第一块FPGA,并于1984年投入市场。FPGA具有两者的共同点,针对不同大小及复杂度的功能,提供了不同规模的FPGA;同时它好比一张未开发的白纸,一方面可以设计成简单的,高度可配置性,设计调试快的PLD,另一方面它可以实现巨大和复杂的,在之前只有ASIC可实现的功能,但是有别于ASIC,依然可以重配置。实际上,现在做ASIC,都是在FPGA的平台上先做验证再做后面的工序。
那么有人会有疑问,现在依然有PLD、ASIC?这就涉及到成本问题。就像为什么现在有了ARM,为什么要有依然在用51单片机一样,PLD的价格相比FPGA来讲是要便宜,同样量产的ASIC也是比FPGA要便宜很多的。
FPGA的类型从内部实现机理来讲,是可以分为几类的,具体的区别将在后面章节叙述。最开始出现的FPGA是基于静态存储器SRAM查找表的,后来才陆续出现熔丝反熔丝与FLASH的FPGA。也正因为这个,现在的基于SRAM技术的FPGA要比其他技术类型的FPGA快一代。
1.4 SOPC的盛世
所谓SOPC就是System On a Programmable-Chip即片上可编程系统。可能很多人在接触嵌入式的时候碰到这个概念,嵌入式的确是SOPC,但是这里主要指以FPGA为核心展开,加或不加其他硬件资源构成的系统,确切的将应该算是FPGA平台。
在具体介绍各种SOPC平台的之前,先讲一下SOPC产生的原由。最开始的FPGA雏形是只具备三大基本要素,即可编程逻辑块、可编程布线资源和可编程IO。对于要抢占PLD和ASIC的市场来说,这些还远远不够,完成不了复杂的功能。随着工艺的进步,FPGA的逻辑资源规模以及逻辑资源密度的提高,在FPGA内部放一个处理器的软核成为了可能,这样在达到以往单片处理器的效果的同时还能利用剩余资源做一些快速的接口粘合。这与以往的嵌入式开发很不一样,不需要额外的片子,在同一片FPGA内即可更好的做控制,同时可按照需求配置外设接口资源,灵活性很大,从成本上考虑可以节俭一块控制器,从空间上也可以节俭很大一面积。由于在FPGA上可以添加一些固有功能的硬件资源,随着各种各样的硬件资源的加入,FPGA也就从低端慢慢发展出一些功能强大的高端芯片,从单板FPGA架构扩展到单板FPGA+CPU/DSP架构,市场竞争力大大增强。
对于不同厂家的器件可以嵌入的软核不一样,在Altera大部分型号里支持嵌入NIOS软核,而在Xilinx大部分器件里支持microblaze(早期是picoblaze)软核。
片内从低端到高端的演进另一方面是可用资源的种类的提高,比如内嵌的乘法器,它可以使一些原来利用逻辑实现的消耗的量多速度又慢的算法,得到很大的优化。如图XX,在这些硬乘法器周围一般紧邻一些内嵌的RAM块,这些内嵌RAM也是为了乘法器数据输入输出专配的,减小输入输出到乘法器的延时,更加减小乘法运算时间。还有一些FPGA包含硬加法器,这样一来,利用硬乘法、加法器构成的乘加器,就可以完成很多DSP利用包含的乘加(MAC)器完成的FFT和滤波器等算法了。
资源种类的增多还有一个典型的就是加入了这个硬吉比特传输模块。它是用来器件与器件传输大量数据的,在传统的器件大量数据传输方式是采用总线的,最开始采用的是8位宽的总线,后来由于传输数据量的需求变大,位宽也从16位变成32、64位等。但是问题也带来了,在电路板上把这么多线布得相同的长度就变得很困难,即使长度一样,由于不同方位对噪声的敏感度不一样,也很难保证总线的信号完整性。于是,在2000年初,FPGA厂家就推出了硬吉比特传输模块。这些模块的输入输出都是以差分对的形式传单比特的形式出现,如图XXX所示,由于工作于极高的速度,每秒能传以十亿计的比特。
随着FPGA应用领域的扩展,更很多硬资源的加入方便了我们使用FPGA,例如硬处理器核的添加,世界上第一个加入的硬处理器是ARM,是加在Excalibur TM器件上的,后来Xilinx也从IBM引进了这个PowerPC4硬核了。随着发展,相信还有很多各种各样的硬核会加入其中来,比如滤波器硬核等。
上面所讲述的只是FPGA本身各方面的发展,下面介绍常用的FPGA平台应用架构。主要分三种,一种是FPGA+处理器的架构,这种架构如果由处理器细分的话又可以分为基于FPGA+ARM、FPGA+CPU及FPGA+GPU等。如下图所示,这样的应用架构处理器主要做一些控制调度,FPGA主要做一些接口特别是高速接口的粘合,或者在FPGA内做一些快速算法,通信系统上做一些基带的调制解调、信道编解码等。
第二种是基于FPGA+DSP的应用架构,如图XX所示,是一个双通道的Xilinx V4+TI 6000系列的一个硬件平台,在通信系统中一路通道做上行一路做下行。这样的架构DSP主要是做一些复杂算法,更多的是一些FFT的算法、滤波器、RS卷积等等,FPGA主要做高速数据的采集、缓存以及做一些快速性的算法。
第三种是FPNA (Field Programmable Node Arrays),它是由很多不同种的可编程节点构成,这样的新概念器件在国外也只是近十年内的事。根据FPNA的相关介绍,FPNA 芯片结合了信号处理器与FPGA 配合设计的灵活性及ASIC 的高性能,把FPGA看作是LEB或LAB的阵列的话,那么FPNA就可以看作FPGA、DSP、CPU等运算、控制节点的阵列。目前QuickSilver与Picochip公司已有相关产品,关于FPNA大家可以登入它们的官方网站查找更多相关介绍。FPNA的产生需求主要是一些基站、雷达等处理数据量巨大的场合,相信在不久的将来,它的应用与推广,也值得我们关注。