1.3.2 FPGA的结构和工作原理
1. FPGA的结构
目前所说的PLD,通常情况下指的是FPGA与CPLD。由于FPGA与CPLD的内部结构不同,导致它们在集成度、运算速度、功耗及应用方面均有一定差别。通常将以乘积项结构方式构成的逻辑器件称为CPLD,如Xilinx公司的XC9500系列、Altera公司的MAX7000S系列和Lattice公司的Mach系列等,这类器件的逻辑门密度在几千到几万个逻辑单元之间。CPLD更适合触发器有限而乘积项丰富的结构,适合完成复杂的组合逻辑。通常将基于查找表(Look-Up-Table,LUT)结构的PLD称为FPGA,如Xilinx公司的Spartan、Virtex和7等系列,Altera公司的Cyclone、Arria和Stratix等系列。FPGA是在CPLD等逻辑器件的基础上发展起来的。作为ASIC领域的一种半定制电路器件,FPGA克服了ASIC灵活性不足的缺点,同时解决了CPLD等器件逻辑门电路资源有限的缺点,这种器件的密度通常在几万门到几百万门之间。FPGA更适合触发器丰富的结构,适合完成时序逻辑,因此在数字信号处理领域多使用FPGA。
目前主流的FPGA仍是基于查找表技术的,但已经远远超出了先前版本的基本性能,并且整合了常用功能(如RAM、时钟管理和DSP)的硬核模块。如图1-2所示(图1-2只是一个示意图,实际上每个系列的FPGA都有其相应的内部结构),FPGA主要由6部分组成,分别是输入/输出块(Input/Output Block,IOB)、可配置逻辑块(Configurable Logic Block,CLB)、数字时钟管理(Digital Clock Manage,DCM)模块、内嵌的块RAM(Block RAM,BRAM)、丰富的布线资源和底层内嵌专用硬核。
图1-2 FPGA内部结构示意图
1)输入/输出块(IOB)
输入/输出块是可编程的,是FPGA与外界电路的接口部分,用于完成不同电气特性对输入/ 输出信号的驱动与匹配要求,其示意结构如图1-3所示。
图1-3 FPGA内部的IOB结构图
FPGA内的I/O按组分类,每组都能够独立地支持不同的I/O标准。通过软件的灵活配置,可适应不同的电气标准与I/O物理特性,可以调整驱动电流的大小,可以改变上、下拉电阻阻值。目前,I/O的频率也越来越高,一些高端的FPGA通过DDR寄存器技术可以支持高达2 Gbps的数据传输速率。外部输入信号可以通过IOB的存储单元输入到FPGA内部,也可以直接输入到FPGA内部。为了便于管理和适应多种电器标准,FPGA的IOB被划分为若干个组(Bank),每个Bank的接口标准由其接口电压VCCO决定。一个Bank只能有一种VCCO,但不同Bank的VCCO可以不同。只有相同电气标准的接口才能连接在一起,VCCO电压相同是接口标准化的基本条件。
2)可配置逻辑块(CLB)
CLB是FPGA内的基本逻辑单元,其实际数量和特性因器件的不同而不同。用户可以根据设计需要灵活地改变其内部连接与配置,从而完成不同的逻辑功能。FPGA一般是基于SRAM工艺制造的,其可配置逻辑块几乎都由查找表(Look Up Table,LUT)和寄存器(Register)组成。FPGA内部的查找表一般为4输入LUT。Altera公司的一些高端FPGA芯片采用了自适应逻辑模块(Adaptive Logic Modules,ALM)结构,可根据设计需求由设计工具自动配置成所需的LUT,如5输入和3输入的LUT,或6输入和2输入的LUT,或2个4输入的LUT等。LUT一般用于完成组合逻辑功能。
FPGA内部的寄存器结构相当灵活,既可以配置为带同步/异步复位、时钟使能的触发器(Flip Flop,FF),也可以配置成锁存器(Latch)。FPGA一般是通过寄存器来完成同步时序逻辑设计的。一般来说,CLB由1个寄存器加1个查找表组成,但是不同厂商的寄存器和查找表的内部结构有一定的差异,而且寄存器和查找表的组合模式也不同。例如,Altera公司的CLB称为LE(Logic Element),由1个寄存器外加1个查找表构成。Altera公司大多数FPGA将10个LE有机地组合起来,构成更大的功能单元—逻辑阵列模块(Logic Array Block,LAB)。在LAB中,除了LE,还包含LE间的进位链、控制信号、局部互连线、LUT链、寄存器链等连线与控制资源,如图1-4所示。Xilinx公司的CLB称为Slice,由上下两个部分构成,每个部分都由1个寄存器加1个LUT组成,称为LC(Logic Cell),两个LC之间有一些共同使用的逻辑,可以完成LC之间的配合与级联。Lattice公司FPGA的底层CLB称为可编程功能单元(Programmable Function Unit,PFU),它由8个LUT和8~9个寄存器构成。当然,CLB的配置结构随着FPGA的发展也在不断更新,一些FPGA常常会根据设计的需求推出一些新的LUT和寄存器的配置比例,并优化其内部的连接构造。
了解CLB中LUT和寄存器的配置比例可为器件选型和规模估算[3]提供参考,很多器件都是用ASIC门数或等效的系统门数来表示器件规模的。但是由于目前FPGA内部除了CLB,还包含丰富的嵌入式RAM、PLL或DLL,以及专用的Hard IP Core(硬知识产权功能核)等,这些功能模块也可以等效为一定规模的系统门,所以用CLB的数量来衡量系统是不准确的,常常会混淆设计者。比较简单科学的方法是用器件的寄存器或LUT数量来衡量系统(一般来说,两者的比例为1:1)。例如,Xilinx公司的Spartan-3系列的XC3S1000有15360个LUT,而Lattice公司的EC系列的LFEC15E也有15360个LUT,所以这两款FPGA的CLB数量基本相当,属于同一规模的产品。同样道理,Altera公司的Cyclone系列的EP1C12的LUT数量是12060个,就比前面两款FPGA规模略小。需要说明的是,器件选型是一个综合性问题,需要综合考虑设计需求、成本、规模、速度等级、时钟资源、I/O特性、封装、专用功能模块等诸多因素。
LE是Altera公司FPGA的基本逻辑单位,通常包含1个4输入查找表和1个可编程触发器,以及一些辅助电路。LE有两种工作模式,即正常模式和动态算术模式。其中正常模式用于实现普通的组合逻辑功能,动态算术模式用于实现加法器、计数器和比较器等功能。
图1-4 典型的LAB结构示意图
LE正常模式的结构如图1-5所示。在正常模式下,4输入的LUT实现组合逻辑功能。LUT的组合输出可以直接输出到行、列互连线,或者通过LUT链输出到下一级LE的LUT输入端,也可以经过寄存器输出到行、列互连线。寄存器同样可以通过触发器链串起来作为移位寄存器。在不相关的逻辑功能中使用的LUT和寄存器可以集成到同一个LE中,而且同一个LE中的寄存器的输出可以反馈到LUT中实现逻辑功能,这样可以增加资源的利用率。
图1-5 LE正常模式的结构
在LE动态算术模式下,4输入的LUT被配置成2个2输入的LUT,用于计算两个数相加之和与进位,如图1-6所示。
图1-6 LE动态算术模式的结构
3)数字时钟管理(DCM)模块
业内大多数FPGA均提供数字时钟管理模块,用于产生用户所需的稳定时钟信号。DCM模块主要由锁相环组成,锁相环能够提供精确的时钟综合、降低抖动,并实现过滤功能。内嵌数字时钟管理模块主要指延迟锁相环(Delay Locked Loop,DLL)、锁相环(Phase Locked Loop,PLL)、DSP等处理核。现在,越来越丰富的内嵌功能单元使单片FPGA成为系统级的设计工具,使其具备了软硬件联合设计的能力,并逐步向SoC平台过渡。DLL和PLL具有类似的功能,可以完成高精度、低抖动的时钟倍频和分频,以及占空比调整和移相等功能。Xilinx公司的FPGA集成了DCM和DLL,Altera公司的FPGA集成了PLL,Attice公司的新型FPGA同时集成了PLL和DLL。PLL和DLL可以方便地通过IP核生成工具来进行管理和配置。DLL的典型结构如图1-7所示。
图1-7 DLL的典型结构
4)内嵌的块RAM(BRAM)
大多数FPGA都具有内嵌的BRAM,这大大拓展了FPGA的应用范围和灵活性。BRAM可被配置为单端口RAM、双端口RAM、地址存储器(CAM),以及FIFO等常用存储结构。CAM内部的每个存储单元中都有一个比较逻辑,写入CAM中的数据会和内部的每一个数据进行比较,并返回与端口数据相同的所有数据的地址。除了BRAM,还可以将FPGA中的LUT灵活地配置成RAM、ROM和FIFO等结构。在实际应用中,芯片内嵌的BRAM数量也是选择芯片的一个重要因素。
对于一般的FPGA来讲,单片BRAM的容量为18 Kbit,即位宽为18、深度为1024。用户可以根据需要改变其位宽和深度,还可以将多片BRAM级联起来形成更大的RAM,此时所配置的最大容量只受限于芯片内BRAM的数量。
5)丰富的布线资源
布线用于连通FPGA内部的所有单元,连线的长度和工艺决定着信号在布线上的驱动能力和传输速率。FPGA有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同,这些布线资源可分为四类:第一类是全局布线资源,用于FPGA内部全局时钟和全局复位信号的连接;第二类是长线资源,用于完成Bank间的高速信号和第二全局时钟信号的连接;第三类是短线资源,用于完成基本逻辑单元之间的逻辑连接;第四类是分布式的布线资源,用于专有时钟、复位信号等的连接。
在实际工程设计中,设计者不需要直接选择布线资源,布局布线器可自动根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个单元。从本质上讲,布线资源的使用方法和设计的结果有密切、直接的关系。
6)底层内嵌专用硬核
内嵌专用硬核是相对底层嵌入的软核而言的,FPGA内部集成了处理能力强大的硬核(Hard Core)。为了提高FPGA的性能,FPGA生产商在芯片内部集成了一些专用的硬核,例如,为了提高FPGA的乘法速度,主流的FPGA都集成了专用乘法器;为了适用通信总线与接口标准,很多高端的FPGA都集成了串/并收发器(SERDES),可以达到10 Gbps以上的收发速率。Xilinx公司的高端FPGA不仅集成了PowerPC系列CPU,还内嵌了DSP Core模块,其相应的系统级设计工具是EDK和Platform Studio,并以此提出了片上系统(System on Chip)的概念,能够开发标准的DSP及其相关应用。Altera公司的高端FPGA不仅集成了大量的DSP核、多个高速收发器模块、PCIe硬核模块,还集成了ARM Cortex-A9等具有强大实时处理功能的嵌入式硬核,从而实现了SoC的开发。
2. FPGA的工作原理
众所周知,类似PROM、EPROM、EEPROM等器件是通过施加高压或紫外线使三极管或MOS管内部的载流子浓度发生变化,从而实现可编程的,但是这些器件大多只能实现单次可编程,并且编程状态不稳定。FPGA则不同,它采用了逻辑单元阵列(Logic Cell Array,LCA),LCA包括可配置逻辑模块(Configurable Logic Block,CLB)、输入/输出块(Input Output Block,IOB)和内部连线(Interconnect)三个部分。FPGA的可编程实际上改变了CLB和IOB的触发器状态,这样就可以实现多次重复的编程。由于FPGA需要被反复烧写,因此它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构。查找表可以很好地满足这一要求,目前主流FPGA都采用了基于SRAM工艺的查找表结构,也有一些军品和宇航级FPGA采用Flash或者熔丝与反熔丝工艺的查找表结构。
根据数字电路的基本知识可以知道,对于一个n输入的逻辑运算,不论与、或运算,还是其他逻辑运算,最多只可能有2n种结果,如果事先将相应的结果存储在一个存储单元,就相当于实现了与非门电路的功能。FPGA的原理也是如此,它通过烧写程序文件来配置查找表的内容,从而在相同电路结构的情况下实现了不同的逻辑功能。查找表(LUT)本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT都可以看成一个有4位地址线的RAM。当用户通过原理图或HDL描述一个逻辑电路以后,FPGA的开发软件会自动计算逻辑电路的所有可能结果,并把真值表(即结果)写入RAM。这样,在对输入信号进行逻辑运算时就相当于输入地址进行查表,找出地址对应的内容后并将其输出即可。
从表1-1中可以看到,LUT具有和逻辑电路相同的功能。实际上,LUT具有更快的执行速度和更大的规模。由于基于LUT的FPGA具有很高的集成度,可以完成极其复杂的时序逻辑电路与组合逻辑电路功能,所以适用于高速、高密度的高端数字逻辑电路设计领域。
表1-1 LUT输入与门的真值表
FPGA是通过存放在片内RAM中的程序来设置工作状态的,因此,工作时需要对片内RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。当加电时,FPGA将EPROM中的数据读入片内RAM,配置完成后FPGA进入工作状态。当掉电时,FPGA恢复成白片,内部逻辑关系消失,因此FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只需要通用的EPROM、PROM编程器即可。Actel、QuickLogic等公司还提供反熔丝技术的FPGA,具有抗辐射、耐高/低温、低功耗和速度快等优点,在军品和航空航天领域中应用得较多,但这种FPGA不能重复擦写,开发初期比较麻烦,也比较昂贵。
3. IP核的概念
IP(Intelligent Property)核是指具有知识产权的集成电路模块或软件功能模块的总称,是经过反复验证过、具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的芯片中。在SoC中,IP核设计已成为ASIC电路设计公司和FPGA厂商的重要任务,也是其实力的体现。对于FPGA开发软件,其提供的IP核越丰富,用户的设计就越方便,其市场占有率就越高。目前,IP核已经变成系统设计的基本单元,并作为独立设计成果被交换、转让和销售。
从IP核的提供方式来看,通常可将IP核分为软核、固核和硬核;从完成IP核所花费的成本来看,硬核成本最高;从IP核的使用灵活性来看,软核的可复用性最高。
1)软核(Soft IP Core)
在EDA设计领域,软核指的是综合之前的寄存器传输级(Register Transfer Level,RTL)模型。在FPGA设计中,软核指的是对电路的硬件语言描述,包括逻辑描述、网表和帮助文档等。软核是已通过功能仿真的功能模块,需要经过综合和布局布线才能使用。软核的优点是灵活性高、可移植性强,允许用户自配置;缺点是对模块的预测性较低,在后续设计中存在发生错误的可能性,有一定的设计风险。软核是IP核应用最广泛的形式。
2)固核(Firm IP Core)
在EDA设计领域,固核指的是带有平面规划信息的网表,在FPGA设计中可以把固核看成带有布局规划的软核,通常以RTL代码和对应具体工艺网表的混合形式提供。在进行FPGA开发时,将RTL描述的标准单元库进行综合优化设计,形成门级网表,再通过布局布线工具布线后即可使用。和软核相比,固核的设计灵活性稍差,但在可靠性上有较大提高。目前,固核也是IP核的主流形式之一。
3)硬核(Hard IP Core)
在EDA设计领域,硬核指经过验证的设计版图,在FPGA设计中硬核指布局和工艺固定、经过前端和后端验证的设计,设计人员不能对其修改。不能修改硬核的原因有两个:首先是系统设计对各个模块的时序要求很严格,不允许打乱已有的物理版图;其次是保护知识产权的要求,不允许设计人员对其有任何改动。硬核的不许修改特点使其复用有一定的困难,因此只能用于某些特定应用,使用范围较小,但其性能优良,可靠性及稳定性较高。