2.1基于SRAM技术原理2.1.1SRAM与DRAM在前面我们提到过,最早出现的FPGA是基于SRAM技术的,它也是目前发展到现在发展的最快的,所谓走的早,走的路就越长。那么我们讲什么是SRAM技术呢?关于这个概念,可能有些初学者是很模糊的。
我们半导体RAM是有动态RAM和静态RAM之说,就是DRAM与SRAM。DRAM我们可能接触的更多一点,因为我们如果有自己组装机器或者选购电脑的时候,都会考虑一个内存大小的问题,目前市场上这个内存大部分都是动态的,从开始的DDR到DDR2,再到现在的DDR3。DRAM与SRAM的区别在于DRAM是要隔一段时间进行刷新的,而构成DRAM的最小单元如图xX所示,只需要一个晶体管一电容对构成,相对于SRAM来讲是非常节省硅片的。但是缺点就是DRAM需要额外的定时刷新电路,对于小规模的DRAM来讲,这种刷新电路的消耗是得不偿失的。有人疑问对于大规模来讲还是可以考虑的啊,的确是这样的,规模大了,总有一个界限,总体DRAM消耗的硅面积(包括刷新电路)会比SRAM消耗的硅面积要小。但是对于可编程来讲,还是有些不足,实现起来比较复杂。但也说不定将来技术提高了,关注更多的是硅面积的时候,会出现基于DRAM技术的FPGA出现。
相比之下,SRAM是不需要动态刷新的,但是它最小单元是一个消耗更多硅面积的多晶体管的结构。之所以不需要动态刷新,是因为一旦SRAM单元被载入数据后,它将保持不放电,但是如果整个供电系统断了的话,器件配置的数据将会丢失,这就是说这种器件在系统上电时需要重新配置。但是这种器件的特点是可迅速反复地编程,这也是当时选中SRAM技术实现FPGA的很大原因。
2.1.2 SRAM构成FPGA机理 我们知道了,SRAM是可以在系统不断电的情况下维持被载入的数据,那么基于SRAM是如何构成我们FPGA可编程的呢?
图XXX展现了基于SRAM实现FPGA可编程的模型,整个存储逻辑0或1的单元驱动着一个额外的控制晶体管,根据SRAM存储的0和1决定了晶体管的开还是关,也就是0和1的输出。
我们知道,从数学上任何一个逻辑都能用有限多项式来实现或逼近,CPLD是从具体多项式实现的角度考虑来从电路上映射实现。那么我们放大一些思维,直接从多项式结果上考虑,针对不同的输入组合,我们可以得到不同的多项式结果,如果我们将这些结果存起来,然后不同的输入组合进行索引结果,便可直接输出多项式结果了。当时基于SRAM技术的FPGA思想就是这个,把事先可能的输入组合带入多项式进行计算,把结果存在SRAM中,用输入进行索引得出结果。这个存放结果的SRAM我么称作查找表LUT,也有些地有说基于LUT技术的FPGA,其实我们基于SRAM技术的FPGA就是这个基于LUT技术的FPGA的本质,后面会提到基于E2PROM/FLASH技术的FPGA,它其实也是基于LUT技术的FPGA。
2.1.3查找表举例为了更好有效的说明查找表的概念,这里举出了一个实现二选一多路器的例子,首先,按照我们要实现的功能,从数学表达式上得出:
然后把这个数学表达式和我们电路逻辑门映射起来得到图xxx电路图,由两个与门、一个反相器和一个或门组成,如果按照CPLD实现的话最终结果就是由晶体管构成的这样些的门电路组成,如果是时序电路的话,再在后面加一级寄存器。要在FPGA里通过查找表的方式实现,由于查找表里放的都是我们不同的组合电路输入得到的最终结果值,所以我们先来计算二选一多路选择器的真值表,结果如表x所示。
真值表
这个真值表的计算其实就是我们开发流程中综合的过程,这里暂且提一下,有了这个真值表,我们就可以按照LUT的结构对号入座了。图XX显示的是3输入LUT的结构,这里需要说明的是LUT中本身应用到了这个二选一多路器,也就是说硬件上本身存在二选一多路器,有人就会问,直接用这个二选一多路器不就可以了?需要强调的是我们这里实现的是输入是三个变量,同时这里只是举这个经典二选一多路器逻辑来叙述我们这个LUT实现逻辑的机理。
在上图中,由于是三输入的LUT,从真值表中看出不同的输入组合就有8种映射,我们这里就有8个这样的存储单元来存储这些结果。在图中我们标定0号至7号,至于综合器怎样将这些存储单元存放我们的8种结果的呢?假设这里的二选一多路器的选择真值关系如图:
按照上图约定的关系及要实现的功能的真值表,我们来试图填一下第0号存储器,从LUT结构图上,我们知道第0号应该填充的是当a=1,b=1,s=1时要实现功能的真值表中对应的结果,查表得到第0号应该填充1。换个角度,当a=0,b=1,s=0时,那么应该是第5号应该填充数据,查表得出应该填充逻辑0,相信其他的大家都会填了。
通过上面的例子,大家应该明白了基于LUT技术的FPGA实现机理了,通过综合器事先将所有可能的输入的进行换算得到所有可能的结果,然后把这些结果载入到LUT存储单元中,然后通过不同输入进行索引出相应的结果,这就是整个基于LUT技术的FPGA实现逻辑机理。
2.1.4 LUT的讨论 上面的例子中,我们看到所用的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清零。
2.1.5基于SRAM优缺点通过上面的了解,我们知道了基于SRAM技术的FPGA可编程机理,基于这种技术的FPGA的优缺点是什么?我接下来做个总结。
在前面叙述三种技术的时候,提到了一点,就是基于SRAM技术的FPGA 可反复的重新配置,这就意味着设计者可以不断的反复的下载设计的逻辑做验证,一次不行可以快速修改设计后重新配置,这是它的一个最大的特点,它的另一个优点是FPGA制造厂商可以依靠很大的致力于存储设备研发的公司的力量推动FPGA的发展,正式由于这一点,基于SRAM的FPGA比其他技术的要先进一代甚至几代。
世界上没有尽善尽美的东西,基于SRAM技术的FPGA也是,他既然有可重新配置的优势,带来的不利就是它每次在系统掉电后,之前载入的程序将丢失,系统上电后需要重新配置。配置是从外部专用的外部存储器件中引导配置的,这就带来了板级有关的花费和面积消耗。
另一个我们在使用基于SRAM技术的FPGA需要考虑的是安全问题。大家都知道,现在很多复杂一点的电路,抄板,其实80年代末90年代初的时候就开始了,只不过当时还是表测,高级一点的是抄板机。同样,FPGA设计需要考虑知识产权的保护。用来对基于SRAM技术的FPGA上电配置的数据文件是存储在外部存储器中的。虽然还没有什么商业工具可以读取存储的配置文件转换成相应的原理图和网标描述,但是这也是迟早的事。在培训当中接触过一批人,做逆向工程的,本着这个来参加培训的。所以对一些商业技术秘密有要求的产品或者军用技术保密的项目,用基于SRAM技术的FPGA还是有待考虑的。