CPLD 是可以等价于 GAL 的阵列,编程的数学模型是基于多项式的乘用与门电路实现,而多项式的加用或门电路实现。那么我们 FPGA 的编程机理是什么呢?它为什么能够实现我们任意的函数表达式呢?我们在上一讲已经知道了 FPGA就实现技术是可以分成三种不同 FPGA 的结构特点、实现的机理,这三种 FPGA 分别是基于 SRAM 技术、基于反熔丝技术、基于 E2PROM/FLASH技术。
就电路结构来讲, FPGA 可编程是指三个方面的可编程,一个是可编程逻辑块,一个是可编程 IO,还有一个就是可编程布线资源。可编程逻辑块是 FPGA 可编程的核心,这一节里我们着重就这个方面可编程进行讨论。
在前面我们提到过,最早出现的 FPGA 是基于 SRAM 技术的,它也是目前发展到现在发展的最快的,所谓走的早,走的路就越长。那么我们讲什么是 SRAM 技术呢?关于这个概念,可能有些初学者是很模糊的。
半导体 RAM 是有动态 RAM 和静态 RAM 之说,就是 DRAM 与 SRAM。 DRAM我们可能接触的更多一点,因为我们如果有自己组装机器或者选购电脑的时候,都会考虑一个内存大小的问题,目前市场上这个内存大部分都是动态的,从开始的 DDR 到 DDR2,再到现在的 DDR3。 DRAM 与 SRAM 的区别在于 DRAM 是要隔一段时间进行刷新的,而构成DRAM 的最小单元只需要一个晶体管一电容对构成,相对于 SRAM 来讲是非常节省硅片的。但是缺点就是 DRAM 需要额外的定时刷新电路,对于小规模的 DRAM 来讲,这种刷新电路的消耗是得不偿失的。有人疑问对于大规模来讲还是可以考虑的啊,的确是这样的,规模大了,总有一个界限,总体 DRAM 消耗的硅面积(包括刷新电路)会比 SRAM消耗的硅面积要小。但是对于可编程来讲,还是有些不足,实现起来比较复杂。但也说不定将来技术提高了,关注更多的是硅面积的时候,会出现基于 DRAM 技术的 FPGA 出现。
相比之下, SRAM 是不需要动态刷新的,但是它最小单元是一个消耗更多硅面积的多晶体管的结构。之所以不需要动态刷新,是因为一旦 SRAM 单元被载入数据后,它将保持不放电,但是如果整个供电系统断了的话,器件配置的数据将会丢失,这就是说这种器件在系统上电时需要重新配置。但是这种器件的特点是可迅速反复地编程,这也是当时选中SRAM 技术实现 FPGA 的很大原因。
我们知道,从数学上任何一个逻辑都能用有限多项式来实现或逼近, CPLD 是从具体多项式实现的角度考虑来从电路上映射实现。那么我们放大一些思维,直接从多项式结果上考虑,针对不同的输入组合,我们可以得到不同的多项式结果,如果我们将这些结果存起来,然后不同的输入组合进行索引结果,便可直接输出多项式结果了。当时基于 SRAM 技术的FPGA 思想就是这个,把事先可能的输入组合带入多项式进行计算,把结果存在 SRAM 中,用输入进行索引得出结果。这个存放结果的 SRAM 我么称作查找表 LUT,也有些地有说基于 LUT 技术的 FPGA,其实我们基于 SRAM 技术的 FPGA 就是这个基于 LUT 技术的 FPGA的本质,后面会提到基于 E2PROM/FLASH 技术的 FPGA,它其实也是基于 LUT 技术的 FPGA。 基于 LUT 技术的 FPGA 实现机理,通过综合器事先将所有可能的输入的进行换算得到所有可能的结果,然后把这些结果载入到 LUT 存储单元中,然后通过不同输入进行索引出相应的结果,这就是整个基于 LUT 技术的 FPGA 实现逻辑机理。
上面的例子中,我们看到所用的 LUT 是一个三输入,存储单元为 8 比特的规模,对于同一块面积来讲,是用越多的小规模的 LUT 好还是用少一点的规模大的 LUT 好呢?这是我们接下来要讨论的问题。对于一个 n 输入查找表来说,它能够实现任何具有 n 输入组合函数功能,假如增加一位输入的话,它可以实现的函数复杂度是成倍增加的,当然使用的 SRAM 也是成倍增加的。在历史上第一片 FPGA 是基于 3 输入 LUT 的,后来也出现过的 LUT 有 3 输入、 4 输入、 5输入、 6 输入以及片内混合型的(即兼有其中两种或两种以上类型的 LUT)。无论怎样,需要知道的是查找表越小,它的配置使用率就越高,但是逻辑综合器的工作量就越大。经过一些性能和成本的最后衡量,于是市面上主流厂商的片子是基于 4 输入 LUT 的,但是一些高端的器件,比如 Xilinx 的 V4 及以上系列,即存在 4 输入 LUT,也存在 5 输入的 LUT。主要的考虑是随着面积的增大,全都采用 4 输入的,综合器的工作量很多,如果全部使用 5输入的,那么有很大一部分 LUT 利用率不是很高,比如一个函数是 4 输入的功能规模,也得用一个 5 输入的 LUT 实现,剩下的 1 输入不能被重新利用,就浪费掉了。经过这么一综合, 4 输入和 5 输入的 LUT 都有了。随着技术的发展,多少输入的 LUT 来构成 FPGA 相信也会在目前大部分基于 4 输入的基础上有所改变。对于我们逻辑开发者来说,在确定好开发平台后,明确了构成该型号 FPGA 的 LUT 后,编写逻辑时,要尽量充分利用 LUT,如果构成该 FPGA 的 LUT 是 4 输入的,那么逻辑信号宽度尽量用 4 的倍数,比如你用到一个计数器是 23 位宽的,这里建议用 24 位宽的,一个是不浪费资源,二个是可以防止计数溢出,除非有目的的设计它为 23 位用来加 1 清零。
通过上面的了解,我们知道了基于 SRAM 技术的 FPGA 可编程机理,基于这种技术的FPGA 的优缺点是什么?我接下来做个总结。在前面叙述三种技术的时候,提到了一点,就是基于 SRAM 技术的 FPGA 可反复的重新配置,这就意味着设计者可以不断的反复的下载设计的逻辑做验证,一次不行可以快速修改设计后重新配置,这是它的一个最大的特点,它的另一个优点是 FPGA 制造厂商可以依靠很大的致力于存储设备研发的公司的力量推动 FPGA 的发展,正式由于这一点,基于SRAM 的 FPGA 比其他技术的要先进一代甚至几代。世界上没有尽善尽美的东西,基于 SRAM 技术的 FPGA 也是,他既然有可重新配置的优势,带来的不利就是它每次在系统掉电后,之前载入的程序将丢失,系统上电后需要重新配置。配置是从外部专用的外部存储器件中引导配置的,这就带来了板级有关的花费和面积消耗。
另一个我们在使用基于 SRAM 技术的 FPGA 需要考虑的是安全问题。大家都知道,现在很多复杂一点的电路,抄板,其实 80 年代末 90 年代初的时候就开始了,只不过当时还是表测,高级一点的是抄板机。同样, FPGA 设计需要考虑知识产权的保护。用来对基于 SRAM技术的 FPGA 上电配置的数据文件是存储在外部存储器中的。虽然还没有什么商业工具可以读取存储的配置文件转换成相应的原理图和网标描述,但是这也是迟早的事。
在叙述基于反熔丝技术 FPGA 的电路原理之前,我们先来看看什么是熔丝,什么是反熔丝,以免在后面的叙述中大家会一直带着这个问题,一致越看越费劲。熔丝的概念大家可能没有,但是保险丝的概念相信更接近我们生活,它们并不仅仅有个丝的关系在里面,其实原理是一样的。小时候,那时候还是老一代电表,几户人家公用一个电表,晚上用的电器多了,特别是那时农村里电视是个打发时间的好东西,一到晚上功率一大,经常断电,一查就是烧了保险丝,当时家里没少备着,看大人们楼梯一架,马上就好了,还以为他们很厉害,修电成了那时的梦想。当然后来才知道这是一件多么容易实现的理想。我们这里的熔丝是小型的保险丝,小到只有用显微镜才能看得到,它的基本原材料也是硅。保险丝是大功率时会过载熔断,熔丝也一样遇到大电流大电压的时候也会断开。反熔丝呢?反熔丝仅从文字上看猜到,它们的技术原理正好相反。反熔丝最开始的时候是连接两个金属连线的微型非晶体硅柱,在未编程状态下,非晶体硅就是一个绝缘体,也就是意味着断开,当遇到大电流和大电压的时候就会变成电阻很小的导体,几乎就是通路了。
我们大概知道了这个反熔丝的概念了,我们是如何利用这样的技术来实现我们大规模的可编程逻辑阵列的呢?我们先来看几个简单的例子,看看我们这个熔丝和反熔丝是如何形成我们简单逻辑的可编程。其实最早的为人所知允许开发者进行器件可编程的是这个熔丝技术。
不管是熔丝还是反熔丝,都相当于开关,只不过熔丝编程操作的是需要的逻辑的反断开,而反熔丝的编程操作是将需要的逻辑给接上。这样就为反熔丝型 FPGA提供的可编程基础。这里需要说明的是,我们现在的基于各种技术的 FPGA 里并没有基于熔丝型的 FPGA,但是在可编程的 PROM 里面有采用熔丝技术的,所以在这里对熔丝可编程性一并做一个说明,也说不准以后会出现熔丝型 FPGA。
什么是 MUX?在介绍基于 SRAM 技术的 FPGA 里有用门电路搭建过,它是二选一多路选择器。为什么介绍它呢?它是构成基于反熔丝型 FPGA 的基本结构,是怎样构成的呢?我们还是先看一个这个简单的二选一多路器,如图。
在输入信号 s、 a、 b 输入端各选一个反熔丝进行通电拉长。不知道大家发现一个规律没有,当发生乘操作的时候,都有 s 信号或其反信号,为二选一的选择开关信号;当发生加操作的时候,加的两项加数是作为二选一的被选择信号。从 CPLD 结构里得知,有了乘和加,就能够实现任何多项式,也就能实现或逼近任意函数了。有些地方有说基于 MUX 结构的 FPGA 和这里说的基于反熔丝技术的 FPGA 结构至少目前说的是一回事,因为目前还没有基于其他技术的FPGA 是 MUX 结构的。
既然是讨论,那我们就得带着问题进行探讨。为什么我们有了这个基于 SRAM 技术的FPGA 还要用反熔丝技术?它为什么会产生?哪种需求需要它?等等带着这些问题,我们来说下基于反熔丝技术的优缺点。
在上面介绍 SRAM 技术的之后,我们知道了,基于 SRAM 技术的最大的缺点就是掉电失配,上电重配,外围必须要用配置存储芯片,占用板级空间,而且基于 SRAM 的 FPGA本身最小单元的面积相对来说比较大,也就决定了由它得到的同等逻辑的 FPGA 面积大。然而基于反熔丝技术的 FPGA 是非易失性的,配置数据在系统掉电后依然存在,上电后,系统会立刻使用,不需要额外的配置存储芯片来配置,这样就节约了额外的板级面积了,同时尽管基于反熔丝的需要额外的编程电路,但是当规模达到了百万千万的时候,它的密集性就会很明显了,而现在的一些基于 SRAM 技术的已达到这个规模了,所以这一点在今后看会越来越明显。其实大家细心一点就会发现, ACTEL 的一些型号 FPGA 芯片大部分面积很小的。
反熔丝型的 FPGA 的另一个很大的优点也是它能够和基于其他技术的 FPGA 竞争生存下去的特性就是,它生来就是免疫辐射。这个对于军事航空航天等有特别要求的场合来讲还是非常有用的。在这些环境下,基于 SRAM 技术的 FPGA 里面的 LUT 存储单元在受到外部辐射,粒子流射线会导致存储在 SRAM 中的逻辑 1 和 0 翻转,最终导致整个逻辑功能错乱。虽然基于 SRAM 的 FPGA 早期这针对这些环境也有解决策略,对设计采用多倍冗余设计,采用多偏制,一个表保存多份,当其中一份或者几份发生倒转,但是大部分没有发生倒转,程序通过判断后还能正常运行,但是这不是根本解决问题的方法,只是减小错误发生概率,也是以消耗几倍的资源来满足的。其实基于反熔丝的器件还有一些有点的,功耗低速度快延时小等,问题是说了这么多好处,为什么还是发展的相对基于 SRAM 技术的 FPGA 落后很多呢?问题出在于反熔丝制造工艺上,它必须要一些很复杂的处理,能力不行,即使再好也只能眼巴巴的看着。但是后面的发展,这些诱惑性还是会引起厂商的重视的。
FLASH 我觉得大家非常不陌生,即是常听的闪存,我们生活学习中经常用到。如果要追述 FLASH 技术的发展的话可以追述到 EPROM 和 EEPROM,闪存一方面具有 EPROM 的浮置栅晶体管单元,另一方面具有 EEPROM 的薄氧化层特性,所以具有电可擦除性能,其他结构方面的特性和具有双晶体管的 EEPROM 相似,从而可以实现以字为单元的操作。具体的电路我们可以查找半导体相关介绍,这里对于我们了解 FPGA 来将,只要知道这个层次就足够了。
在对 FLASH 有了一定了解后,我们来看看基于 FLASH 的 FPGA 的原理,就目前市面上来讲,纯 FLASH 结构的 FPGA 并不多见,更多的是形式是 FLASH 与 SRAM 混合形式的FPGA,如图 XX。其中 SRAM 用于构成器件正常工作时的电路,而 FLASH 则是用来在上电时对 SRAM 进行配置,本身 FLASH 是具有掉电非易失性,所以并不需要额外的片外配置电路。
由于市面上基于 FLASH 架构的 FPGA 主要厂家是 ACTEL,所以大部分基于 ACTEL 有的 FLASH 型 FPGA 来说明。首先是单芯片可重配性。在前面提到,基于反熔丝的 FPGA 不需要额外的配置存储但是是一次性编程的,用在较成熟的产品中,不能重复的配置验证,基于 SRAM 技术的 FPGA可以重复下载验证,但是需要外部额外的配置存储器件,上电后需要一定的配置延时时间。两者都不是很尽人意。那么基于 FLASH 技术的 FPGA 它在两者当中都取得了优势,既可以重复下载配置,也不需要额外的片外配置芯片。
第二个是高安全性。基于 SRAM 的 FPGA 很大的问题就是安全性很难保障,逆向工程工作者通过努力可以分析出配置在片外的存储器的配置文件,推出其电路网表结构。而ACTEL 的 FLAHS 架构的 FPGA 可以从三个层次很好的对电路进行保护。第一层是这个物理层的保护,在 ACTEL 的第三代 FLASH 器件中,晶体管有多层金属保护,去除它非常困难,很难实现逆向,同时采用的是片内配置,不用担心在上电配置过程中数据流被截取。第二层就是基于 FLASH LOCK 加密技术,通过将密钥下载到芯片中进行加密来防止对芯片非授权的操作,载入密钥后,从器件中读取数据或写入数据的唯一途径就是 JTAG 端口。第三层就是加密算法了,采用的是 AES 加密算法,该算法目前来说只能采用暴力破解的方式,然而目前的 JTAG 端口速度大约是 20MHz,按照 128 位密钥, 1 秒钟算一个密钥的话,也得算上几亿年。
第三大优点是低功耗, ACTEL 的 FPGA 的功耗低也是其卖点。特别是很多手持设备的低功耗要求。 FPGA 的功耗主要考虑有四个方面,分别是上电功耗、配置功耗、静态功耗和动态功耗。ACTEL 的 FLASH 型 FPGA 上电不需要大电流启动,且非易失性,几乎是没有上电功耗和配置功耗的,同时因为其相比 SRAM 型 FPGA 的可编程开关的 6 个晶体管,它只需要 2 个,静态功耗也好 动态功耗也罢,都具有很强的竞争力。
FLASH 型的 FPGA 还有很多的有点,比如另一个卖点,相比 SRAM 型的稳定性可以抵抗辐射,成本低等等,但是事实的情况是大部分的市场还是给 ALTERA 和 XILINX 占据,主要的问题和基于反熔丝技术的 FPGA 一样,在其生产过程中存在更多的工序,工序一多,一种技术的提高要求各道工序都的有提高,这个有点类似水桶原理。对之前未涉及该类型的FPGA 厂家来讲,是不太愿意做的事情,除非本身的领域受到强烈的冲击。