第1章 现场可编程逻辑门阵列(FPGA)技术现状
产生于20世纪80年代的现场可编程逻辑门阵列(Field Programmable Gate Array,FP-GA),近年来得到了长足发展。FPGA已不只是单纯的一种器件的代名词,它已经发展成为一门与数字信号处理密切相关的技术。目前,FPGA已广泛应用于通信、生物医学、数字控制、音频和视频处理、数字仪表,以及雷达与声呐等领域。FPGA的出现和应用,不仅大大推动了微电子技术的发展,全面提高了数字系统的性能,而且对电路器件及电路系统的构成与设计方法产生越来越大的影响。
1.1 FPGA已进入超大规模集成电路领域
专用集成电路(Application Specific Integrated Circuit,ASIC)可分为数字ASIC和模拟ASIC。对于数字ASIC,按其掩膜是否重新制造可将其分为3类:全定制(Full -custom)ASIC、半定制(Semi -custom)ASIC和可编程(Programmable)ASIC。可编程ASIC是ASIC的一个重要分支,它是一种已制造好的、可直接从市场上买到的芯片,用户只要对它编程就可实现所需要的电路功能。FPGA就是可编程ASIC的典型代表之一。
1.1.1 FPGA在大规模集成电路中的定位
FPGA是20世纪80年代中期出现的一种新概念,是备受现代数字系统设计工程师欢迎的最新一代系统设计积木块,工程师可以通过传统的原理图输入法或硬件描述语言VHDL/Verilog按照需要自由地在一块芯片内设计一个数字系统。由于半导体技术的飞跃发展,数字系统的应用经历了分立元件、小规模集成电路(Small Scale Integration,SSI)、中规模集成电路(Medium Scale Integration,MSI)、大规模集成电路(Large Scale Integration,LSI)和超大规模集成电路(Very Large Scale Integration,VLSI)的发展历程,数字系统应用的基本特征也由中、小规模集成度的标准通用集成电路向设计师定制的专用集成电路过渡。
传统的数字电路设计采用各类不同规模的分立器件搭接而成,其设计过程是先设计出电路原理图,再绘制印制电路板(PCB),然后进行安装调试,整个过程既容易出错,又费时费力,而且设计出的电路规模庞大,可靠性很低。半定制ASIC的集成度很高,它可以使电路设计中的硬件规模缩小,可靠性提高,功耗减小,但是它的设计周期长,费用高,风险也很大。对于现代较复杂的数字系统,若采用SSI或MSI来设计某个特定的应用,则不仅要占用很大的物理空间,而且功耗较大,可靠性低;而采用专用电路设计,则具有较大的投资风险性。20世纪80年代出现的可编程逻辑器件(Programmable Logic Device,PLD)在一定程度上为数字系统设计工程师进行快捷、灵活的设计提供了可能性。PLD的应用使一系列功能强、速度高、灵活性大的系统设计得以成功。但是,随着现代数字系统设计的发展,PLD不论是在集成容量、功耗、速度上还是在逻辑设计的灵活性上,均不能满足现代数字系统的大容量、高速度、现场灵活可编程设计的要求。这类器件的集成度还不是非常高,内部资源和I/O引脚也不够多,在进行大型系统设计时,使用此类器件就显得捉襟见肘了。FPGA的产生将半定制的门阵列电路的优点和可编程逻辑器件的设计师可编程特性结合在一起,使设计的电子产品达到小型化、集成化和高可靠性,这样大大缩短了设计周期,减少了设计费用,同时为设计、更改提供了便利的手段,减小了设计风险。
特征尺寸(Feature Size)是ASIC中的一个重要概念,也是ASIC技术水平的重要标志。它是指器件中的最小线条宽度,对MOS器件而言,通常是指器件栅极所决定的沟道几何长度,是一条工艺线中所能加工的最小尺寸,也是设计中采用的最小设计尺寸(设计规则)。减小特征尺寸是提高ASIC集成度的有效手段之一。当今,CMOS集成电路的特征尺寸已进入了纳米时代。Xilinx公司于1985年首次推出商业化FPGA,随着工艺的发展,特征尺寸不断减小。图1.1显示了Xilinx的高端产品Virtex系列特征尺寸的变化情况。2010年,Xilinx发布了其7系列FPGA,该系列FPGA采用了更为先进的28nm工艺。
图1.1 Xilinx的高端产品Virtex系列特征尺寸的变化情况
特征尺寸的减小意味着芯片集成度的提高和容量的增大。2004年,Xilinx推出了第1代90nm工艺的基于高级硅片组合模块(Advanced Silicon Modular Block,ASMBL)架构的全新FPGA平台Virtex-4,之后相继推出了基于此架构的65 nm工艺的FPGA平台Virtex-5和40nm工艺的FPGA平台Virtex-6。
在容量方面,Virtex-4具有200K个逻辑单元[1] [Logic Cell,简称LC,一个LC包含一个4输入查找表(LUT-4)和一个触发器],Virtex-5达到了350K[2],Virtex-6则达到了760K[3],如图1.2所示。Virtex-5和Virtex-6中的查找表为6输入。一个LUT-6加一个触发器等效于1.6个LC。在7系列FPGA中,LC的数量达到前所未有的2000K,其容量是Virtex-6的2.5倍,可提供1500万到4000万等效ASIC门的所有功能。
图1.2 Virtex-4、Virtex-5、Virtex-6的容量对比
在内嵌的RAM方面,Virtex-4最多有552块BRAM(Block RAM),每块18Kb,共计9.936Mb;Virtex-5达到了516块,每块36Kb,共计18.576Mb;Virtex-6则达到了1064块,每块36Kb,共计38.304Mb,如图1.3所示。在7系列FPGA中,BRAM提供的存储空间达到了84Mb。BRAM可用于高速数据存储、数据缓存及跨时钟域等设计,是FPGA内部一类非常重要的资源。FPGA内部大的存储空间使得大量传统上的“片外”元器件集成于片内,从而可避免系统结构的复杂及片外存储带来的延时,同时,对于满足具有较高数据吞吐率的设计是非常有利的。
图1.3 Virtex-4、Virtex-5、Virtex-6的内部存储空间对比
在高速乘加器(Multiplier Accumulator,MAC)方面,Virtex-4提供了全新的高速乘加器DSP48,可实现18-bit ×18-bit的有符号数乘法运算,并可实现乘加、乘累加等功能,其数量达到了5 12;Virtex-5推出了DSP48E,除具有DSP48的功能外,乘法器的位宽增大到25-bit ×18-bit,其数量达到了1056;Virtex-6推出了具有预加器的DSP48E1,其数量达到了2016,如图1.4所示。在7系列FPGA中,DSP48E1的个数达到了5280,更多的高速乘加器有力地提升了系统并行处理的潜能,从而提高了系统的处理速度。
图1.4 Virtex-4、Virtex-5、Virtex-6的高速乘加器个数对比
在可重配置特性方面,FPGA具有独特的优势,被称为“液体硬件”,即通过加载不同的配置文件可获得不同的硬件结构和硬件功能,体现了灵活的可重配置特性。此外,Xilinx还提出了部分可重配置(Partial Reconfiguration)技术,将分时复用的设计思想由对某一点的逻辑资源放大到对某一特定区域内的逻辑资源。
FPGA的容量越来越大,速度也越来越快,正朝着单芯片系统解决方案的方向发展。
1.1.2 FPGA功能的演变
FPGA从产生至今,其功能不断演变,在数字系统中所扮演的角色越来越重要,这得益于工艺水平的提高,从而可在FPGA内部嵌入越来越丰富的功能模块。
早期的FPGA,由于其规模较小,只用于胶合逻辑(Glue Logic),以连接功能复杂的大逻辑块。在Xilinx的第1代Virtex芯片中,嵌入了BRAM和DLL(Delay Locked Loop),这样FPGA除实现较为复杂的组合逻辑和时序逻辑之外还可实现数据存储,从而,FPGA成为数字系统中的基础级模块。在第2代Virtex芯片Virtex-II中,出现了乘法器模块,可实现18-bit ×18-bit的有符号数乘法运算。在第3代Virtex芯片Virtex-II Pro中,出现了PPC(PowerPC)处理器和高速收发器MGT(Multi-Gigabit Transceiver),这使得FPGA可实现较为复杂的算法和高速的数据传输,从而,FPGA成为数字系统中的平台级模块。第4代Vir-tex芯片Virtex-4具有里程碑意义,首次推出了多平台FPGA,包括LX、SX和FX 3个平台。各个平台面向不同的应用领域。LX平台面向高性能通用逻辑应用,SX平台面向高性能数字信号处理应用,FX平台面向高性能嵌入式系统和高速互联应用。根据不同应用领域的特点,3个平台在资源分布上作了优化。例如,LX平台具有最多的逻辑单元,可达200K;SX具有最多的乘加器,可达5 12个;FX具有硬核处理器PPC、高速收发器和以太网模块。Virtex-4在时钟、运算和存储功能方面都有所增强。例如,Virtex-4具有数字时钟管理器(Digital Clock Manager,DCM)和相位匹配时钟分频器(Phase -Matched Clock Divider,PMCD),可产生丰富的时钟;具有XtremeDSP逻辑单元DSP48,与Virtex-II中的乘法器相比,在结构上有了很大的变化,最为显著的一点是内嵌了48-bit加法器,这样DSP48除实现常规的18-bit ×18-bit的有符号数乘法运算外,还可实现48-bit加法运算和累加运算;具有集成FIFO控制器的SmartRAM技术,便于高速数据缓存和跨时钟域的设计。至此,FPGA已成为数字系统中面向不同应用领域的可优化处理平台。之后的Virtex-5和Virtex-6系列FPGA均沿袭了这一模式。Xilinx FPGA功能的演变过程如图1.5所示。
图1.5 Xilinx FPGA功能的演变过程
1.1.3 XiIinx的Virtex-6架构分析
传统的FPGA内部结构由3个部分构成:可配置逻辑块(Configurable Logic Block,CLB)、输入/输出模块(Input Output Block,IOB)和布线资源(Routing Resource,RR)。其中,CLB是实现组合电路和时序电路的主要逻辑资源;IOB是芯片与外界电路的接口部分,用于完成不同电气特性下对输入/输出信号的驱动与匹配要求;RR用于连接FPGA内部的所有单元,而连线的长度和工艺直接决定了信号在线上的驱动能力和传输速度。
如前所述,FPGA内部已嵌入了越来越多的功能模块。图1.6所示为目前Xilinx主流芯片Virtex-6的内部布局架构。该架构仍采用ASMBL结构,以列为基础。从图中不难看出,FPGA内部资源已非常丰富,除了常规的CLB和IOB之外,还有IO逻辑资源、数据存储资源BRAM、高速乘加器DSP48E1和混合模式时钟管理器(Mixed -Mode Clock Manager,MMCM)。除XC6VLX760外,Virtex-6其他芯片还具有高速收发器GTX、以太网MAC模块TEMAC和PCIE接口模块。这里重点介绍一下CLB、DSP48E1、BRAM、时钟资源和Select IO资源。
CLB是FPGA内部最基本的逻辑资源。Virtex-6中的CLB包含两个SLICE[4]。SLICE可分为SLICEL和SLICEM两类。根据SLICE类型的不同,可将CLB分为CLB_LL和CLB_LM,CLB_LL由两个SLICEL构成,CLB_LM由一个SLICEL和一个SLICEM构成。这一点与Virtex-5是一致的,而与Virtex-4有较大不同,如图1.7所示。每列SLICE有一条独立的进位链(Carry Chain),因此,不论是Virtex-4、Virtex-5还是Virtex-6,每块CLB都有两条进位链,如图1.8所示。其中,Virtex-4中的SLICEM还有一条移位链(Shift Chain)。同一系列的FPGA中SLICEL和SLICEM架构是一致的,不同之处在于SLICEM中的查找表除具有逻辑函数发生器的功能外还具有存储功能,即可作为分布式RAM、移位寄存器和ROM,而SLICEL中的查找表只能用做逻辑函数发生器和ROM。关于查找表的更多应用将在第8章中进行详细阐述。
图1.6 Virtex-6的内部布局架构
图1.7 Virtex-4、Virtex-5 和Virtex-6中CLB的宏观架构
图1.8 Virtex-4、Virtex-5 和Virtex-6 CLB中的进位链
Virtex-6中每个SLICE包含4个6输入查找表(LUT-6)、8个D触发器(D-FF)和3个数据选择器(F7AMUX、F7BMUX和F8MUX),如图1.9所示。其中,触发器位于查找表之后,这表明在FPGA设计中应尽可能地采用“先组合后时序”的模式。Virtex-6与Virtex-5相比,触发器的个数增加了一倍,这表明在FPGA设计中应尽可能地对每个模块的输出数据寄存。
图1.9 Virtex-4、Virtex-5 和Virtex-6中SLICE的宏观架构
在布局上,CLB_LL和CLB_LM交替排列,但在DSP48E1(对于Virtex-5 为DSP48E)中,右侧的两个CLB均为CLB_LM,如图1.10 所示,图中L表示SLICEL,M表示SLI-CEM。
图1.10 CLB的布局规则
DSP48E1 是Virtex-6 中非常重要的运算单元[5],可实现加法、减法、乘法、乘加运算、累加运算和乘累加运算等。更多丰富的应用将在第8 章中进行详细阐述。每两个DSP48E1 和相应的专用互连线构成一个DSP48E1 Tile。每个DSP48E1 Tile具有5 个CLB的高度,而Virtex-4中的DSP48 Tile具有4 个CLB的高度,如图1.1 1 所示,图中C表示CLB。这种高度的增加对于逻辑资源的连接非常有利。
图1.1 1 Virtex-4、Virtex-5 和Virtex-6中DSP48与CLB的位置关系
BRAM是Virtex-6中非常重要的存储单元[6]。每个BRAM的大小都为36Kb,这与Virtex-5是一致的,Virtex-4中每个BRAM都为18Kb。BRAM可配置为单端口RAM、双端口RAM、单端口ROM、双端口ROM和FIFO等。更多丰富的应用将在第8章中进行详细阐述。每个36Kb的BRAM可分解为两个独立的18Kb BRAM来使用,每个18Kb BRAM的高度与一个DSP48E1的高度相同。
时钟可比做同步世界里的发动机,在FPGA设计中占有非常重要的地位。因此,FPGA内部提供了非常丰富的时钟资源,包括全局时钟资源、区域时钟资源和时钟管理单元。具体内容如表1.1所示。这其中的时钟管理单元尤为重要。Virte -4、Virtex-5和Virtex-6有着不同的时钟管理单元,如图1.12所示。Virtex-4中的时钟管理单元为纯数字的时钟管理器(Digital Clock Manager,DCM)和相位匹配时钟分频器(Phase -Matched Clock Divi-der,PMCD)。其中,DCM除可产生丰富的时钟外,还可实现输出时钟的动态相位调整和时钟动态配置;PMCD可产生相位匹配分频时钟和相位匹配延时时钟。Virtex-5中的时钟管理单元则为CMT(Clock Management Tile),每个CMT包含两个DCM和一个模拟锁相环(PLL)。其中,DCM与Virtex-4中的DCM用法一致,而PLL可有效改善输出时钟抖动。采用DCM驱动PLL的模式,可利用DCM实现精确的时钟相移,利用PLL改善DCM输出时钟的抖动;采用PLL驱动DCM的模式,可在时钟进入DCM之前利用PLL滤除时钟抖动,但DCM引入的任何抖动仍会传到输出时钟上。Virtex-6中的时钟管理单元也为CMT,但此CMT包含两个混合模式时钟管理器(MMCM)[7]。MMCM既有DCM的功能又有PLL的功能,因而可产生丰富且低抖动的时钟。
表1.1 Virtex-4、Virtex-5和Virtex-6中的时钟资源
图1.12 Virtex-4、Virtex-5 和Virtex-6中的时钟管理单元
Virtex-6中Select IO资源由I/O Tile构成[8]。每个I/O Tile包括两个IOB、两个ILOG-IC、两个OLOGIC和两个IODELAY,如图1.13所示。每个IOB包含输入、输出和三态Se-lect IO驱动器,这些驱动器可以按照各种I/O标准配置。差分I/O可使用I/O Tile中的两个IOB来实现。每个IOB直接连接一对ILOGIC/OLOGIC。ILOGIC/OLOGIC逻辑对包含输入和输出逻辑资源,可用于数据和IOB的三态控制。此外,ILOGIC和OLOGIC还可分别配置为ISERDES和OSERDES,以实现高速的串并和并串转换,这对于高速的数据传输非常有利。具体内容可参考文献 [8]。
图1.13 Virtex-6的I/O Tile结构