- AMD FPGA设计优化宝典:面向Vivado/VHDL
- 高亚军编著
- 5817字
- 2023-12-12 20:02:29
第1章 FPGA技术分析
1.1 芯片架构的演变
FPGA,英文全称是Field Programmable Gate Array,中文意思是现场可编程门阵列,是在PAL(Programmable Array Logic,可编程阵列逻辑)、GAL(Generic Array Logic,通用阵列逻辑)、CPLD(Complex Programmable Logic Device,复杂可编程逻辑器件)等可编程器件的基础上进一步发展得来的。作为ASIC(Application-Specific Integrated Circuit,专用集成电路)领域中的一种半定制电路,FPGA既弥补了全定制电路的不足,又克服了原有可编程器件门电路数目有限的缺点。
FPGA的两个主要特征就体现在其名称中,即“现场”和“可编程”。“现场”意味着工程师只需要一台电脑,安装了FPGA厂商提供的开发软件,焊接了FPGA芯片的板卡,即可完成从模型搭建到生成烧写文件的全过程。“可编程”意味着工程师可以根据设计需求,通过编程方式把FPGA内部逻辑块连接起来,这就好比把一个电路试验板放在一颗芯片里。一个出厂后的成品FPGA内部的逻辑块和连接方式可以按照工程师的需要而改变,所以FPGA可以完成特定的逻辑功能。更重要的是这种编程是可以反复操作的,即可以编程、除错、再编程。因此,FPGA也称为“液体硬件”。
一般情况下,FPGA比ASIC的速度要慢,若要实现同样的功能,FPGA需要的面积更大,功耗也更高。但相比ASIC,FPGA的优势也很明显,具体如下。①快速成品:这有助于缩短产品上市时间;②反复编程:这使得工程师可以根据设计需求修改电路功能,同时有助于除错;③较低的调试成本:只要有厂商开发工具(如Vivado)、下载器(如Xilinx Platform Cable Usb)、FPGA板卡,即可进行调试。
FPGA芯片起源于Xilinx(赛灵思)公司。1985年,首款FPGA(赛灵思XC2064)采用双列直插式封装,也称为DIP封装(Dual In-line Package),如图1-1所示,只包含64个可配置逻辑模块,每个模块含有两个3输入查找表(Look-Up Table,LUT,后面介绍时,“查找表”和“LUT”会交替使用)和一个触发器(Flip-Flop,FF,后面介绍时,“触发器”和“FF”会交替使用)。按照现在的方式计算,该器件有64个逻辑单元,不足1000个逻辑门。这也构成了早期FPGA的基本架构:可配置逻辑模块(Configurable Logic Block,CLB)、开关矩阵(Switch Matrix,也称为Switch Box)、互连线(Interconnect Wires)和输入/输出管脚,如图1-2所示。较为简单的结构决定了其主要扮演胶合逻辑的角色。
图1-1
图1-2
在摩尔定律的推动下,Xilinx于2001年推出了基于150nm工艺制程的Virtex-II FPGA,其最大亮点是嵌入了硬核的18×18的有符号数乘法器和18Kb(1Kb=1024bit)的Block RAM(简写为BRAM),如图1-3所示(图中未包含布线资源和输入/输出管脚)。其中,XC2V8000中包含168个乘法器和168个BRAM,这大大提升了FPGA的计算能力。
图1-3
时隔一年,也就是2002年,Xilinx推出了基于130nm工艺制程的Virtex-II Pro FPGA,在Virtex-II的基础上嵌入了硬核PowerPC 405处理器(简写为PPC405),这是当时IBM公司的RISC CPU(Reduced Instruction Set Computer,精简指令集中央处理器),主频最高可达400MHz。同时,在接口方面,Virtex-II Pro集成了硬核高速收发器,传输速率最高可达6.25Gbit/s,如图1-4所示。XC2VP70所包含的高速收发器个数达到了20个。
图1-4
2004年,Xilinx推出了基于90nm工艺制程的Virtex-4 FPGA。采用了基于列的ASMBL(Advanced Silicon Modular Block)架构,如图1-5所示,大大提升了FPGA的可编程能力,使得其成为ASIC的强有力的替代者。FPGA也由胶合逻辑的角色变为平台级产品。通过不同列(CLB列、DSP列、BRAM列、GT列等)的组合,Virtex-4 FPGA形成了3个平台级家族:LX、FX和SX,给用户提供了多种选择,以应对不同的应用场景。其中,LX面向高性能逻辑应用,CLB列会更多一些,XC4VLX200中的逻辑单元(Logic Cell,1个Logic Cell等于1个4输入LUT+1个触发器+1个进位链)达到了200448个。SX面向高性能数字信号处理,DSP列会更多一些,XC4VSX55中的乘加器多达512个。FX面向嵌入式应用,增加了GT列,内部嵌入了硬核PowerPC处理器PPC405,主频可达450MHz。和Virtex-II Pro相比,Virtex-4 FPGA扩展了乘法器的功能,将乘法器变为包含48位累加器的乘加器,可将其看作第一代DSP48。DSP48在数字信号处理应用中扮演着重要的角色。例如,在高性能FIR(Finite Impulse Response)滤波器和FFT(Fast Fourier Transform)中,DSP48是重要的计算单元。此外,从功耗的角度看,Virtex-4的核电压也由Virtex-II和Virtex-II Pro的1.5V降至1.2V,这对于降低动态功耗是有益的,因为动态功耗与核电压的平方成正比。
图1-5
2006年,Xilinx推出了基于65nm工艺制程的Virtex-5 FPGA。依托于第二代ASMBL架构,Virtex-5形成了5个平台级家族系列,以满足不同领域的需求,如表1-1所示。实践证明,Virtex-5是非常成功的一代产品。
表1-1
与Virtex-4相比,Virtex-5的SLICE的容量扩大,由2个LUT和2个触发器变为4个LUT和4个触发器。更重要的是Virtex-5中的LUT是6输入LUT,相比Virtex-4中的4输入LUT更有优势。例如,实现一个8选1的多路复用器(Multiplexer,MUX),如果使用Virtex-4 FPGA,就需要消耗4个4输入LUT和3个2选1 MUX(SLICE里固有的)。如果使用Virtex-5 FPGA,那么只需要消耗2个6输入LUT和1个2选1 MUX(SLICE里固有的),如图1-6所示,显然,后者的逻辑延迟会更小。分别选用Virtex-4和Virtex-5最快的FPGA(对应速度等级分别为-12和-3),在ISE 8.1版本下,实现一个6输入布尔表达式,Virtex-4 FPGA的逻辑延迟为1.1ns,而Virtex-5 FPGA的逻辑延迟为0.9ns。从分布式RAM的角度看,实现一个64×1(深度为64,宽度为1)的RAM,Virtex-4与Virtex-5的实现方式如图1-7所示,显然Virtex-5的实现方式具有更小的延迟。
图1-6
图1-7
Virtex-5中的BRAM也有所改进。Virtex-4的每个BRAM大小为18Kb,而Virtex-5的每个BRAM大小为36Kb,由2个独立的18Kb BRAM构成。这对于搭建更大的存储空间非常有利。同时,对于每个独立的18Kb BRAM,如果只使用了其中的9Kb(或小于9Kb),那么剩余的9Kb(或大于9Kb)会被自动关闭,从而可以有效降低功耗。
相比Virtex-4,Virtex-5中的乘加器DSP48E的功能更强大。不仅乘法器的位宽由18×18提升为25×18,而且每个DSP48E的C端口是独立的(Virtex-4中同列相邻的两个DSP48共享C端口),这增强了DSP48E的灵活性,也简化了数字信号处理算法的实现。此外,不得不提的是,DSP48E中的累加器还可用来实现按位逻辑运算,如逻辑与、逻辑或、逻辑异或、逻辑非等。确切地说,DSP48E中的乘法器后面跟随的是算术逻辑运算单元(Arithmetic Logic Unit,ALU),既可以实现加法运算,又可以实现逻辑运算。
在时钟方面,Virtex-5在保留Virtex-4数字时钟管理单元(Digital Clock Manager,DCM)的基础上,引入了模拟锁相环(Phased Lock Loop,PLL),这对于改善时钟抖动非常有利。
此外,Virtex-5 FXT系列嵌入了PowerPC 440(简写为PPC440)处理器,主频最高可达550MHz,性能比Virtex-4中的PPC405有了进一步的提升。
2009年,Xilinx推出了基于40nm工艺制程的Virtex-6 FPGA和基于45nm工艺制程的Spartan-6 FPGA。Virtex-6采用了第三代ASMBL架构,通过不同资源列的配比,形成了三个系列:面向高性能逻辑应用和高速数据传输的LXT系列、面向高性能数字信号处理和高速数据传输的SXT系列、面向高带宽应用的HXT系列。与Virtex-5相比,所有的Virtex-6 FPGA都带有高速收发器,同时,Virtex-6不再提供嵌入PowerPC处理器的FPGA。Spartan-6属于Xilinx的低端产品,与Virtex-6相比,性能略逊一筹。例如,Spartan-6中的乘加器DSP48A1的乘法器位宽为18×18,且其后的累加器不支持逻辑运算,而Virtex-6中的乘加器DSP48E1的乘法器位宽为25×18,其后为ALU。Spartan-6中的BRAM大小为18Kb,可当作两个独立的9Kb BRAM使用。Virtex-6中的BRAM大小为36Kb,由两个独立的18Kb BRAM构成。Spartan-6中的时钟模块由DCM和PLL构成,而Virtex-6中的时钟模块为MMCM(Mixed-Mode Clock Managers)。但是,Spartan-6也有自己的特色,如封装尺寸小,CPG196的封装尺寸只有8mm×8mm,而Virtex-6的最小封装尺寸也要达到23mm×23mm。此外,Spartan-6还集成了硬核存储器控制器模块(Memory Controller Blocks,MCB)。从输入/输出管脚的角度看,Spartan-6的管脚个数依据不同芯片和封装尺寸在102~576间变化,输出电平最大为3.3V;Virtex-6的管脚个数在240~1200间变化,输出电平最大为2.5V。
2011年,Xilinx推出了基于28nm高性能低功耗(High Performance Low Power,HPL)工艺制程的7系列FPGA,分为高端、中端和低端三类产品,对应Virtex-7、Kintex-7和Artix-7。其中,Virtex-7面向对系统性能要求比较苛刻的场合;Kintex-7可提供业界最佳的价格/性能比;Artix-7面向低功耗且需要使用高速收发器的场合。2017年,Xilinx又发布了Spartan-7,具有封装尺寸小(CPGA196的封装尺寸只有8mm×8mm)、性能/功耗比高的特点。不同于Virtex-6和Spartan-6,7系列FPGA采用了统一的内部架构。图1-8对7系列FPGA从逻辑单元个数(K,1K=1024,下同)、BRAM容量、DSP个数、高速收发器个数、高速收发器速率和外部存储器速率几个方面进行了比较(这里显示的均为最大值),可进一步理解其中的差异及各类产品的应用场合。
图1-8
7系列FPGA还首次使用了SSI(Stacked Silicon Interconnect,堆叠硅片互联)技术,包括XC7V2000T、XC7VX1140T、XC7VH580T和XC7VH870T 4颗芯片。SSI技术有效解决了采用传统方式互联多片FPGA时导致的互联资源有限(如输入/输出管脚个数不够)、互联延迟过大、高速串行互联的信号完整性等问题。以XC7V2000T为例,整个芯片包含4个SLR(Super Logic Region,又称为die),这4个SLR被并行放置在一个硅中介板上,如图1-9所示。再看4个SLR的内部布局,如图1-10所示。可以看到,4个SLR的大小和内部结构是完全相同的。图1-10中的GTX代表的高速收发器的最大速率为12.5Gbit/s。每个SLR由3个CR(Clock Region,时钟区域)构成。每个CR的高度为50个CLB,也可以表示为20个DSP或10个36Kb BRAM,如图1-11所示。
图1-9
在图1-9中,英文对应释义如下。High-Bandwidth,Low-Latency Connections,高带宽低延迟互连线;Microbumps,微凸块;Through-Silicon Vias(TSV),硅穿孔;C4 Bumps,C4凸块;28nm FPGA die,28nm FPGA超级逻辑区域;65nm Silicon Interposer,65nm硅中介板;Package Substrate,封装基板;BGA Solder Balls,BGA锡球。
图1-10
图1-11
SLR之间通过(Super Long Line,SLL)互连,实现die间的数据传输。紧邻每个CLB会有一个互联单元(Interconnect Tile),SLL的起点和终点正是这些位于相邻SLR的不同互联单元。每个互联单元列可提供49个SLL,如图1-12所示,不同芯片互联单元列的个数有所不同,因此7系列SSI器件相邻SLR的SLL总个数为10800或13700,从而保证了die间的高带宽数据传输。
图1-12
XC7VX1140T内部结构如图1-13所示,XC7VX1140T由4个SLR构成,有更多的高速收发器(图中,GTH代表的高速收发器的最高速率可达13.1Gbit/s,共96个)。
图1-13
面向高带宽数据传输的XC7VH870T由6个SLR构成,其中,顶部和底部的SLR仅包含GTZ(高速收发器,共16个,最高速率可达28.05Gbit/s),如图1-14所示,因此,这是一颗由异构SLR构成的芯片。
图1-14
在推出传统FPGA的同时,2011年,Xilinx也发布了集成ARM Cortex-A9 CPU的Zynq-7000系列SoC(System on Chip)。将FPGA分割为PS(Processing System)和PL(Programmable Logic)两部分,实现了全可编程:软件可编程、硬件可编程和I/O可编程。其中,PS包含一个或两个ARM Cortex-A9核及丰富的硬核接口,CPU主频最高可达1GHz。PL为传统的逻辑资源,如CLB、BRAM、DSP和GT等,如图1-15所示,图中,灰色部分表示PL。Zynq-7000因其异构特性在Xilinx FPGA发展史上留下了浓墨重彩的一笔。
图1-15
2014年,Xilinx推出了基于20nm工艺制程的UltraScale FPGA,包括Kintex和Virtex两个系列。与Kintex相比,Virtex无论是在规模上还是在性能上都更胜一筹。时隔两年,也就是2016年,Xilinx又推出了UltraScale+FPGA,采用16nm工艺制程,包括Artix(2021年推出)、Kintex、Virtex、Zynq MPSoC(Multiprocessor System on Chip)和Zynq RFSoC(Radio Frequency System on Chip),比较其性能,如表1-2所示(表中,US代表UltraScale,US+代表UltraScale+)。可以看到,UltraScale+FPGA引入了新的存储单元UltraRAM,每个UltraRAM的大小为288Kb(深度为4096,也就是4K,宽度为72),这对于大批量的数据存储非常有用。
表1-2
Vritex UltraScale+还引入了HBM(HighBandwidth Memory),有效地增大了数据存储空间及数据传输带宽,其内部布局如图1-16所示,仍然采用了SSI技术,HBM位于单独的一个SLR上。在与其紧邻的SLR内,集成了硬核的HBM控制器。Vritex UltraScale+HBM FPGA内HBM的容量对比如图1-17所示,可以看到,HBM最小为4GB(也就是32Gb),最大为16GB(也就是128Gb)。在执行机器学习算法时,通常需要存储大量的权值,而且为了保证足够的并行性,需要同时从存储空间读出多个数据,传统的BRAM和UltraRAM很难满足这一需求,而HBM正好解决了这一问题。
图1-16
图1-17
这里不得不提一下Xilinx第二代SSI芯片。Kintex UltraScale FPGA只有KU085和KU115为SSI芯片,均包含2个SLR。Virtex UltraScale FPGA有4颗芯片为SSI芯片,分别为VU125(2个SLR)、VU160(3个SLR)、VU190(3个SLR)和VU440(3个SLR)。而Virtex UltraScale+FPGA的芯片绝大多数为SSI芯片。与第一代SSI芯片相比,第二代SSI芯片不仅有专用跨die布线资源(SLL),还有专用跨die寄存器(LAGUNA寄存器),如图1-18所示。在相邻两个die的边界,每个时钟区域内有2列LAGUNA寄存器,SLL起点和SLL终点位于同列不同die的LAGUNA寄存器上。每2列LAGUNA寄存器,也就是die边界的每个时钟区域可提供2880个SLL,在图1-18中,每个SLR位于边界的时钟区域共有6个,因此可提供17280个SLL。
图1-18
作为第二代嵌入了ARM核的FPGA,Zynq UltraScale+MPSoC的性能进一步提升,共有3个系列:CG、EG和EV。ARM核由Cortex-A9升级为Cortex-A53,采用双核(CG)或四核(EG和EV),扮演着APU(Application Processing Unit,应用处理单元)的角色,主频可达1.5GHz。同时,嵌入了RPU(Real-time Processing Unit,实时处理单元),采用双核ARM Cortex-R5F,主频最高可达600MHz。EG和EV系列还嵌入了GPU(Graphics Processing Unit,图形处理单元)Mali-400MP2,主频最高可达667MHz。在此基础上,EV系列增强了视频处理功能,嵌入了硬核视频编解码处理单元VCU(Video Encoder/Decoder),可支持H.264/H.265,如表1-3所示。以EV系列为例,其内部布局如图1-19所示,图中,灰色部分为PL。
表1-3
图1-19
在Zynq MPSoC的基础上,Xilinx还将射频模数转换器/数模转换器(Radio Frequency Analog-to-Digital Converter/Digital-to-Analog Converter,RF-ADC/DAC)和软判决前向纠错(Soft Decision Forward Error Correction)集成,形成了Zynq RFSoC FPGA,是业界唯一的单芯片自适应射频平台,其内部布局如图1-20所示。在图1-20中,灰色部分为PL。DDC为数字下变频器(Digital Down Converter),DUC为数字上变频器(Digital Up Converter)。ADC的分辨率为12位(如XCZU25DR)或14位(如XCZU42DR),最多可达16个(如XCZU29DR)。采样速率最高可达4.096 GSPS(Gigabit Samples Per Second,每秒千兆次采样),如XCZU25DR。DAC分辨率为14位,最多可达16个,如XCZU29DR,采样速率最高可达9.85 GSPS。SD-FEC仅存在于XCZU21DR、XCZU28DR、ZCZU46DR和XCZU48DR中,共8个。
图1-20
2019年,Xilinx推出了基于7nm工艺制程的Versal芯片,将其定义为ACAP(Adaptive Compute Acceleration Platform,自适应计算加速平台),而不再是FPGA。ACAP包含三大引擎:标量引擎、自适应引擎和智能引擎,通过可编程片上网络(Programmable Network on Chip,可编程NoC)将三者连接在一起,如图1-21所示。其中,标量引擎由双核ARM Cortex-A72和双核ARM Cortex-R5F构成,主频可分别达到1.7GHz和800MHz;自适应引擎由传统的FPGA逻辑资源构成,包括CLB、BRAM和UltraRAM;智能引擎主要提供计算功能,由AIE(Artificial intelligence Engine)和DSP58构成。
图1-21
目前,Versal ACAP已推出5个系列:AI Edge系列、AI Core系列、Prime系列、Premium系列和HBM系列,其性能对比如表1-4所示。表1-4中的存储空间是指分布式RAM,即LUTRAM、BRAM和UltraRAM的总和。AI Edge系列嵌入了针对机器学习推理应用而优化的AIE-ML,AI Core系列嵌入的则是第一代AIE。其他系列没有嵌入AIE。
表1-4
以AI Core系列为例,芯片内部布局如图1-22所示。其中,AIE阵列位于芯片最上方,DDR控制器位于最下方,两者通过可编程NoC实现数据传输。不难看出,与前一代UltraScale+FPGA相比,Versal中的硬核越来越多。为了发挥这些硬核的性能,需要在设计初期研究芯片架构,规划好整个系统的布局。
AIE阵列中的每个AIE核的内部结构如图1-23所示,其核心部分是向量单元,可提供强大的计算能力。例如,其中的乘加器在一个时钟周期内可实现128个8×8有符号数乘法运算或32个16×16有符号数乘法运算。
图1-22
图1-23
从2001年发布Virtex-II FPGA到2019年发布Versal ACAP,在近20年的时间里,Xilinx先后推出了9代产品,如表1-5所示,平均每两年就会有一代新产品诞生。产品性能不断突破:容量越来越大,速度越来越快。产品架构不断革新:从仅有PL到嵌入CPU,再到嵌入AIE。架构的不断演进使得FPGA除了在传统领域(如原型验证、通信、工业控制、航空航天等)继续保持一定优势,还使得FPGA进入新的领域,如数据中心,成为数据中心加速器、AI加速器、SmartNIC(Smart Network Interface Card,智能网卡)及网络基础设施中的加速器。而FPGA厂商除了提供FPGA芯片,还生产制作了各种加速卡,如Xilinx的Alveo加速卡、Varium加速卡,以期在最大限度上满足业务需求,帮助客户缩短研发周期。
表1-5