Home CMU 18-643可重构计算笔记-3:FPGA架构的原理与演进
Post
Cancel

CMU 18-643可重构计算笔记-3:FPGA架构的原理与演进

原文:FPGA Architecture: Principles and Progression.

FPGA已被广泛用于实现来自不同领域的无数应用。由于其低级硬件可重构性,与定制设计的芯片相比,FPGA具有更快的设计周期和更低的开发成本。FPGA架构的设计涉及许多不同的设计选择,从高级架构参数到晶体管级实现细节,目标是制造高度可编程的器件,同时最大限度地减少可重构性的面积和性能成本。本文介绍了现代商业FPGA架构关键组成部分的演进,以及设计决策背后的原理与挑战。

3-1 包含了可编程逻辑与IO的早期FPGA架构与包含RAM、DSP和其他硬件的现代异构FPGA架构

本文首先概述了评估FPGA架构理念的CAD流程和方法,然后介绍了FPGA每个关键组件的架构挑战和设计原则,重点包括过去三年中这些组件的设计和实现中的关键创新与前沿研究领域。

FPGA架构评估

3-2 FPGA架构评估流程

FPGA架构评估流程主要由一套基准测试、一个架构模型以及一个CAD系统组成。

测试套件可能和ASIC不太一样,通常每个FPGA供应商都有一套自己收集的基准测试,还有一些开源的测试,如经典的MCNC20(规模很小)、VTR和Titan23等。随着 FPGA 容量和应用程序复杂性的持续增长,经常需要新的基准套件。

FPGA的设计涉及许多不同的决策,从架构级别的组织(例如逻辑块的数量和类型、线长分布、逻辑集群和逻辑元件的大小)到晶体管级别的电路实现(例如可编程开关类型、路由缓冲晶体管尺寸,寄存器实现),还涉及不同的实现风格。一些模块(RAM、IO)甚至包括模拟电路。所有这些不同的组件都需要仔细建模,以全面评估FPGA架构。通常使用架构描述文件来捕获,该文件指定不同FPGA模块的组织和类型以及布线架构,以及从每个组件的电路级实现获得的面积、时序和功率模型。

最后CAD系统将基准测试映射到指定的FPGA架构上,由一系列复杂的优化算法组成,这些算法将用HDL编写的基准综合到电路网表中,并进行布局布线,然后评估关键指标,包括总面积、时序、功耗等,也包括一些其他指标,包括CAD工具运行时间、是否容易进行布线等。

FPGA架构经常需要考虑的问题是:应该特别强化哪些功能(即作为硬件块的形式实现)?这些块的灵活程度应该是什么样的?灵活性和效率往往无法兼得。FPGA架构师可能会尝试许多想法,然后才能找到正确的设计选择组合,在正确的位置添加适量的可编程块和硬件IP,也要评估对布局布线的影响,对成本和收益进行量化。

FPGA架构演进

可编程逻辑

3-3 PAL架构

最早的可重构计算设备是可编程阵列逻辑(PAL)架构,如上图所示,但是在之前的文章中我们也提过,PAL不能很好地进行扩展。随后,复杂可编程逻辑器件(CPLD)将and/or阵列作为基本逻辑元件,试图通过集成多个PAL 并在它们之间使用交叉互连来解决可扩展性挑战,但代价是更复杂的设计工具。Xilinx在1984年率先推出了第一个基于LUT的FPGA,由一系列基于SRAM的LUT组成。

3-4 (a) 4-LUT的晶体管级实现,在第二和第三LUT级之间有内部缓冲器,(b) 两级Mux电路,(c) 基本逻辑元件(BLE),(d) 逻辑块(LB)内部架构

随着器件逻辑容量的增长,LUT(K)和LB(N)的大小逐渐增加。随着K的增加,可以将更多功能打包到单个LUT中,不仅减少了所需的LUT数量,还减少了关键路径上的逻辑层数,从而提高了性能,此外,随着通过增加N将更多连接捕获到快速本地互连中,对LB间路由的需求减少。然而,LUT的面积随着K的增加呈指数增长并且其速度线性下降,同时如果将LB本地互连实现为Crossbar,则其大小呈平方增加,其速度随LB中的BLE数量N线性下降。研究表明,4-6大小的LUT和3-10大小的LB最为合适,4-LUT面积最小但6-LUT会有更好的性能。

3-5 6-LUT可拆分成两个 5-LUT:(a) 没有额外的输入端口,有5个共享输入;(b) 两个额外的输入端口和转向用Mux,有2个共享输入

架构的下一个重大变化是,在2003年,Altera在Stratix II架构中首次引入可拆分LUT,追求实现较大LUT的性能和较小LUT的面积效率。上图中,第二种设计增加了面积,但是更容易找到两个可以打包在一起的函数,在Stratix II中,ALM具有8个输入和2个输出,可以实现一个6-LUT或两个共享2个输入的5-LUT,也可以在没有共享输入的情况下实现一对较小的LUT,兼顾了性能和面积效率。Xilinx后来在Virtex-5架构中也采用了类似的方法。在LB大小方面,Altera和Xilinx在最近几代都使用了相对较大的LB,分别包含10个和8个BLE。

3-6 (a) 正沿触发器 (b) 脉冲锁存器

另一个重要的架构选择是每个BLE的FF数量,早期FPGA为每一个LUT配置一个FF,但当开始使用可拆分LUT时,Altera和Xilinx都为每个BLE添加了第二个FF,可供两个输出同时使用。除此之外,Stratix V实现了上图中的脉冲锁存器。

3-7 (a) Xilinx 和 (b) Altera/Intel FPGA逻辑块中的硬件算术电路(红色)

算术运算(加法和减法)在FPGA设计中非常常见,因而所有现代FPGA架构在其逻辑块中都包含硬件算术电路,如上图所示。A[i]B[i]是两个加法操作数A和B的第i位,Xilinx LE计算进位传播并在LUT中生成,而Altera使用LUT将输入传递给硬件加法器。

可编程路由

可编程路由通常占结构面积和关键路径延迟的50%以上,因此其效率至关重要。FPGA路由架构主要有两类,分层和岛式。分层路由架构会导致布线较长,物理上相邻的块实际布线很长,因此主要用于较小的FPGA。另一种是岛式,由Xilinx首创,包括三个组件,即布线段、将功能块输入连接到布线的连接块(Mux)、以及开关块(可编程开关)。

3-8 分层路由架构

3-9 岛式路由架构(实线是物理导线,虚线是可编程开关)

创建一个好的路由架构涉及许多复杂的权衡,应该包含足够的可编程开关和线段,可以实现绝大多数电路,但是过多的电线和开关会浪费空间。一些布线架构参数包括:每个逻辑块输入或输出可以连接多少条布线(FC)、每根线可以连接多少其他路由线(Fs)、布线段的长度、开关模式、电线和开关本身的电气设计、以及每个通道的布线数量。例如在上图中,FC=3,Fs= 3,通道宽度为4根线,一些布线的长度为1,其他的长度为2。

早期的岛式架构仅包含在可编程开关之间穿过单个逻辑块的短线,但是会导致比必要更多的可编程开关,现代架构包括多种长度的布线段,以更好地满足短连接和长连接的需求,但最丰富的布线段保持中等长度,通常为四个逻辑块。更长距离的连接可以使用更长的线段来实现更低的延迟,但在最近的工艺节点中,跨越许多(如16个)逻辑块的线必须在上层金属层上使用宽厚的金属线才能实现可接受的电阻,这种长距离布线的数量是有限的。为了最好地利用这种稀缺的布线,Stratix FPGA允许长线段仅连接到短线段,而不是功能块输入或输出,在岛式FPGA中建立了一种布线层次结构。

3-10 使用传输晶体管(左)、三态缓冲器(中)或缓冲Mux(右)的SRAM控制可编程开关的不同实现

可编程开关的电气设计也有多种选择,如上图所示。早期的FPGA使用由SRAM单元控制的传输晶体管来连接导线,虽然这是传统CMOS工艺中可能的最小开关,但通过传输晶体管串联连接的布线延迟呈平方增长。三态缓冲器会占用空间,但提升速度。大多数最新的FPGA采用最后一种设计。

FPGA布线的一个主要挑战是长线的延迟并没有随着工艺扩展而改善,这意味着即使时钟频率上升,跨芯片的延迟也会停滞或增加。这导致FPGA应用开发人员在其设计中增加了流水线的数量,从而允许多个时钟周期用于长路径。为了使这种策略更有效,一些FPGA制造商在路由网络内集成了寄存器。

可编程IO

FPGA 包含独特的可编程IO结构,允许与各种其他设备进行通信,使FPGA成为许多系统的通信枢纽。一组物理IO以可编程方式支持许多不同的IO接口和标准具有挑战性,因为需要适应不同的电压电平、电气特性、时序规范和命令协议。FPGA上用于IO的大面积区域凸显了可编程IO的价值和挑战。

3-11 实现可编程IO的不同技术

片上存储器

FPGA架构中片上存储器元件的第一种形式是集成在FPGA逻辑块中的 FF,然而随着FPGA逻辑容量的增长,FPGA被用于实现更大的系统,这些系统几乎总是需要内存来缓冲和复用芯片上的数据,因此非常需要更密集的片上存储,且在FPGA上实现的应用程序的RAM需求非常多样化,很难决定应将哪种类型的RAM块添加到FPGA以使其运行高效用途广泛。FPGA逐渐集成了更大、更多样化的BRAM,通常现代FPGA 25%的区域用于BRAM。具体的工作原理如下图所示,可以参考原文。

3-12 基于双端口SRAM的FPGA BRAM的电路结构(蓝色组件在任何SRAM内存中都很常见,而绿色是FPGA独有的,此BRAM最大数据宽度为8位,但输出crossbar配置为4位输出模式)

设计FPGA BRAM的主要架构决策是选择容量、数据宽度和读/写端口的数量。功能更强大的BRAM需要更多面积,因此必须仔细平衡BRAM设计选择,同时考虑最常见的应用。SRAM单元占用的面积随着BRAM的容量线性增长,但外围电路的面积和路由端口的数量呈亚线性增长,较大的BRAM具有较低的每比特面积,从而使大型片上缓冲区更有效,但同时,如果应用程序只需要小RAM,则可能会浪费较大BRAM的大部分容量。类似,具有更大数据宽度的BRAM可以为下游逻辑提供更高的数据带宽,但比容量相同但数据宽度更小的BRAM占用更多的面积。最后,增加BRAM的读/写端口的数量会增加SRAM单元和外围电路的面积,但又会增加BRAM可以提供的数据带宽并允许更多样化的用途。FPGA片上存储器必须满足在该FPGA上实现的每个应用程序的需求,所以通常为BRAM添加额外的可配置性以使其适应应用程序的需求。

3-13 不同数量和类型的BRAM读/写端口所需的路由端口数量(W为数据宽度,D为BRAM深度)

与传统内存块相比,FPGA BRAM的另一个独特组件是它们与可编程路由结构的接口,如上图所示。除了构建BRAM之外,FPGA供应商还可以添加电路,使设计人员能够将构成逻辑结构的LUT重新用于RAM块。

3-14 将2048×32位2r+1w逻辑RAM映射到1024×8位1r+1w物理BRAM

设计人员在典型设计中需要许多不同的RAM,必须通过芯片上的固定BRAM和LUT-RAM资源来实现。迫使设计人员为他们需要的每种内存配置确定组合BRAM和LUT-RAM的最佳方式并编写RTL来实现是不现实的,而且还会将设计与特定的FPGA架构联系起来,因此,FPGA CAD工具包括一个RAM映射阶段,将用户使用的逻辑存储器映射到物理存储器,如上图所示。

3-15 Altera FPGA每个LE需要的内存位数的趋势,图上也注明了每种架构中BRAM的大小

在过去的25年中,FPGA存储器架构有了长足的发展,也变得越来越重要,因为FPGA芯片上的存储器与逻辑的需求的比值显着增长,如上图所示。为了深入了解不同RAM块的相关面积和效率,下表显示了Quartus在Stratix IV器件上实现的2048×72位逻辑RAM的资源使用、硅片面积和频率。

3-16 在Stratix IV上使用BRAM、LUT-RAM和寄存器的2048×72位1r+1w RAM的实现结果

DSP模块

最初,商业FPGA架构中唯一的专用算术电路是进位链以实现高效的加法器,使用LUT和进位链在软逻辑中实现乘法器会产生很大的面积和延迟损失。由于高乘法器密度信号处理和通信应用构成了主要的FPGA市场,设计人员提出了新颖的实现方案,以减轻软逻辑中乘法器实现的低效率。

3-17 Altera/Intel和Xilinx FPGA的DSP模块演进(增量添加的功能以红色突出显示)

多年来,DSP模块架构不断发展,以最适合FPGA关键应用领域的要求,并提供更高的灵活性,使许多不同的应用程序都可以从其功能中受益。这一演进的所有步骤的共同焦点是尽可能重用乘法器阵列和路由端口,以最好地利用这两种昂贵的资源。具体的演进过程可以参考原文。

系统级互联:片上网络

FPGA在容量和其外部IO接口(例如DDR、PCIe和以太网)的带宽方面都在不断增加,在这些高速接口和越来越大的逻辑结构之间分配数据流量是一项挑战。这种系统级互联传统上是通过配置部分FPGA逻辑和路由来实现相关端口之间的多路复用、仲裁、流水线和布线的总线,这些外部接口的工作频率高于FPGA架构所能达到的频率,因此匹配其带宽的唯一方法是使用更宽的总线,会使用大量FPGA逻辑和布线资源。此外,系统级互联往往会跨越很远的距离。这两者导致时序收敛很难,并且通常需要对软总线实现深度流水线,进一步增加资源使用。

我们可以在FPGA架构中嵌入一个硬件实现的片上网络来实现更高效且易于使用的系统级互联。为FPGA设计NoC具有挑战性,因为FPGA架构师必须对芯片做出许多选择(如路由器的数量、链路宽度、NoC拓扑),但仍要保持FPGA的灵活性,以使用许多不同的外部设备来实现各种应用,需要能灵活地连接到FPGA架构中实现的用户逻辑。NoC可以在固定高频率下运行,与具有不同速度和带宽要求的FPGA逻辑和IO接口连接。NoC也很适合数据中心FPGA,数据中心中的FPGA通常配置为两部分,包括提供与外部接口的系统级互联以及应用程序加速器,NoC可以显著提高资源利用率、频率和路由拥塞状况。

3-18 (a) Xilinx Versal (b) Achronix Speedster7t架构中的片上网络系统级互联

其他FPGA组件

现代FPGA也包含了其他重要组件。

一个例子是将比特流加载到数百万个LUT、路由开关、配置位SRAM单元中的配置电路。上电时,配置控制器从板载闪存或PCIe接口等串行加载比特流,当缓冲了足够多的配置位时,并行写入一组配置SRAM单元。该配置电路也可以由FPGA逻辑访问,允许对器件的一部分进行部分重新配置,而另一部分继续处理。FPGA CAD工具也可以选择性地加密比特流,使比特流只能由密钥正确的FPGA使用。

FPGA应用程序通常以不同的速度与许多不同的设备进行通信,通常包含数十个时钟,这些时钟大多由可编程锁相环(PLL)、延迟锁定环(DLL)和时钟数据恢复(CDR)电路在片上生成。

This post is licensed under CC BY 4.0 by the author.

CMU 18-643可重构计算笔记-2:Altera FPGA架构白皮书(2006)

CMU 18-643可重构计算笔记-4:类C语言硬件综合的挑战