FPGA Architectures: An Overview文献阅读笔记
FPGA简介
FPGA的可编程逻辑块和布线互连使其具有灵活性和通用性,但同时也使其比ASIC更大、更慢、更耗电。 这些缺点主要是因为FPGA的可编程路由互连,几乎占FPGA总面积的90%。
FPGA通常包括:
•可编程逻辑块,用于实现逻辑功能。
•连接这些逻辑功能的可编程路由。通过重新编程可编程路由,可以根据需要改变逻辑元件之间的连接方式,从而实现新的电路功能或进行性能优化。
•通过路由连接到逻辑块并进行芯片外连接的I/O块。
Programming Technologies(编程技术)
SRAM编程技术
在基于SRAM的FPGA中,SRAM单元主要用于以下目的:
1.对FPGA的路由互连进行编程。
2.对用于实现逻辑功能的可配置逻辑块(CLB)进行编程。
基于SRAM的编程技术由于其可重新编程性和标准CMOS工艺技术的使用,成为FPGA的主要方法
SRAM单元需要6个晶体管,这使得与其他编程技术相比所使用的面积更大。另外SRAM单元本质上是易失性的,需要外部设备来永久存储配置数据。这些外部设备增加了基于SRAM的FPGA的成本和面积开销。
Flash编程技术
基于SRAM的编程技术的一个替代方案是使用基于闪存或EEPROM的编程技术。基于Flash的编程技术提供了几个优点。例如,这种编程技术本质上是非易失性的。基于闪存的编程技术也比基于SRAM的编程技术更具面积效率。基于Flash的编程技术也有其自身的缺点。与基于SRAM的编程技术不同,基于闪存的设备不能无限次地重新配置/重新编程。
此外,基于闪存的技术使用非标准CMOS工艺。
反熔丝编程技术
该技术的导通电阻和寄生电容比其他两种技术低。
该技术没有使用标准CMOS工艺。此外,基于反熔丝编程技术的器件不能被重新编程。
至此
人们希望拥有一种可重新编程、非易失性且使用标准CMOS工艺的编程技术。
基于SRAM的编程技术是应用最广泛的编程技术。主要原因是它使用了标准CMOS工艺。
可配置逻辑模块
可配置逻辑块(CLB)是FPGA的基本组件,其为目标应用程序设计提供基本逻辑和存储功能。
CLB可以由单个基本逻辑元件(BLE)或本地互连的BLE集群组成(如图2.4所示)。图2.4显示了一组4个BLE;每个BLE包含一个LUT-4和一个触发器。
一个简单的BLE由一个LUT和一个触发器组成。具有k个输入的LUT(LUT-k)包含2^k个配置位,并且它可以实现任何k个输入布尔函数。
补充:什么是LUT?
在FPGA(可编程逻辑门阵列)中,LUT(查找表)是一种基本的逻辑单元,用于实现逻辑功能。LUT是FPGA架构中的重要组成部分,它是一种存储和计算功能的器件。
LUT可以理解为一个存储表,其输入是一个固定位数的二进制数,输出是对应的逻辑函数值。LUT的大小取决于输入位数,常见的有2输入LUT、3输入LUT等。例如,2输入LUT有4个输入组合,因此它有4个存储位置,每个位置对应一个输出值。
LUT的作用是根据输入信号的组合,提供相应的输出信号。它可以实现逻辑函数,如与门、或门、非门等,还可以实现复杂的逻辑函数,如加法器、乘法器、状态机等。通过组合多个LUT,可以构建复杂的数字电路。
在FPGA中,LUT通常用于实现逻辑功能,例如处理器控制逻辑、数据通路、数字信号处理等。FPGA的优势在于其可重新编程性,因此可以通过重新配置LUT来实现不同的逻辑功能,从而适应不同的应用需求。
总之,LUT是FPGA中的基本逻辑单元,通过存储和计算逻辑函数的输出,实现了逻辑功能的实现和灵活性。
FPGA路由体系结构
FPGA架构可以分为层次式或岛式。
岛式路由体系结构

图2.5显示了传统的岛式FPGA架构(也称为基于网格的FPGA架构)。这是学术和商业FPGA中最常用的架构。
路由网络由预制的布线段和可编程开关组成,这些布线段和开关被组织在水平和垂直路由通道中。
FPGA的路由网络占总面积的80-90%,而逻辑区域仅占10-20%的面积[22]。FPGA的灵活性主要取决于其可编程路由网络。
基于网格的FPGA路由网络由水平和垂直路由轨道组成,这些轨道通过交换盒(SB)互连。逻辑块通过接线盒(CB)连接到路由网络。
在基于网格的FPGA中,创建了多长度导线以减少延迟。较长的线段跨越多个块,需要较少的交换机,从而减少了布线面积和延迟。然而,它们也降低了路由灵活性,从而降低了成功路由硬件电路的概率。现代商用FPGA通常使用长短导线的组合来平衡路由网络的灵活性、面积和延迟。
分层路由体系结构
在分层体系结构(也称为基于树的体系结构)中,同一集群内的逻辑块之间的连接是由层次结构的最低级别的线段进行的。
驻留在不同组中的块之间的连接需要遍历一个或多个层次结构级别。
分层路由体系结构已用于许多商业FPGA系列,包括Altera Flex10K、Apex和ApexII体系结构
HFPGA: Hierarchical FPGA(HFPGA:分层FPGA)


Software Flow(软件流程)
FPGA体系结构研究的一个主要方面是开发用于将应用映射到FPGA的计算机辅助设计(CAD)工具。
众所周知,基于FPGA的实现方案的质量在很大程度上取决于CAD工具的效率。因此,CAD算法研究对于缩小FPGA和ASIC等其他计算设备之间的性能差距至关重要。
软件流程(CAD流)采用硬件描述语言(HDL)的应用程序设计描述,并将其转换为最终在FPGA上编程的比特流。
将电路描述转换为可加载到FPGA中的格式的过程大致可分为五个不同的步骤

图2.17显示了在FPGA架构上对应用电路进行编程的通用软件流程。这些模块的细节通常与所使用的路由体系结构类型无关,除非另有说明,否则它们适用于前面描述的两种体系结构。
Logic Synthesis(逻辑综合)
FPGA的流程从映射到其上的网表的逻辑合成开始。逻辑合成将HDL描述(VHDL或Verilog)转换为一组布尔门(布尔门是一种二进制的电路设计元件,能够接收一个或两个输入信号进行运算,结果输出一个二进制信号)和触发器。
Technology Mapping(技术映射)
综合工具的输出是布尔逻辑门、触发器和这些元件之间的布线连接的电路描述。
电路也可以用有向非循环图(DAG)来表示。图中的每个节点代表一个门、触发器、主输入或主输出。图中的每条边表示两个电路元件之间的连接。

技术映射步骤的结果生成LUT(本质上是一个RAM)和触发器的网络。
- 技术映射工具根据FPGA的架构和资源分布,选择适当的LUT和触发器,以实现门级网表中的逻辑功能。它还考虑资源共享、时序约束等因素,以优化设计的性能和资源利用率。
- 最终的技术映射结果是一个新的门级网表,其中的逻辑元件被映射到了特定FPGA的LUT和触发器上。
补充:
技术映射(Technology Mapping)和逻辑综合(Logic Synthesis)是FPGA设计流程中的两个不同步骤,各自具有不同的目标和功能。
目标和功能:
* 逻辑综合的主要目标是将高级逻辑描述(如RTL级)转换为门级描述(如门级网表),以实现特定的功能和时序要求。逻辑综合关注的是从功能描述到门级实现的转换,包括逻辑优化、综合优化和时序优化等,以提高设计的性能、功耗和面积。
* 技术映射的主要目标是将门级描述(如门级网表)映射到特定FPGA的低级元件和资源上,以实现设计的功能。技术映射关注的是从门级实现到实际的硬件资源映射,包括选择合适的逻辑元件、布局和布线等,以满足设计的约束和要求。
输入和输出:
* 逻辑综合的输入是高级逻辑描述(如RTL级),通常使用硬件描述语言(如VHDL或Verilog)编写。逻辑综合的输出是门级描述,通常是门级网表,描述了逻辑元件之间的连接关系和信号传输路径。
* 技术映射的输入是门级描述(如门级网表),它可以是由逻辑综合生成的,也可以是从其他设计来源获取的。技术映射的输出是更具体的门级网表,它描述了设计在目标FPGA上映射的低级元件和连线信息。
执行顺序:
* 在FPGA设计流程中,逻辑综合通常在技术映射之前进行。逻辑综合将高级逻辑描述转换为门级网表,为后续的技术映射提供输入。
* 技术映射是在逻辑综合之后进行的步骤,它将门级网表映射到具体的FPGA资源上,确定了实际的逻辑元件和连线布局。
尽管技术映射和逻辑综合是不同的步骤,但它们在FPGA设计流程中是相互关联的。逻辑综合提供了门级描述作为技术映射的输入,而技术映射利用门级描述在特定FPGA上实现设计的功能。这两个步骤共同促进了FPGA设计的实现、优化和验证。逻辑综合将高级描述转换为门级网表,而技术映射将门级网表中的逻辑元件映射到FPGA的具体资源上,例如LUT和触发器。
Clustering/Packing(归集/封装)
基于Mesh的FPGA中的逻辑元件通常被布置在两个层级中。第一级由作为k输入LUT和触发器对的逻辑块(LB)组成。第二级层次结构将k个LB分组在一起以形成逻辑块簇。FPGA CAD流程的聚类阶段是形成k个LB的组的过程。然后可以将这些聚类直接映射到FPGA上的逻辑元件。
"Packing"步骤主要包括以下操作:
组合门级元件:Packing阶段将门级网表中的逻辑元件进行组合,以形成更大的逻辑单元。这些逻辑单元通常是与门、或门等的组合,可以实现更复杂的逻辑功能。通过组合逻辑元件,可以减少FPGA上的资源使用量,提高设计的效率和性能。
优化资源利用率:Packing步骤优化逻辑元件的放置和连接,以最小化资源的使用。它会尽量将逻辑元件放置在相邻的位置上,以减少连线长度和延迟。此外,Packing还可以利用FPGA芯片上的特定资源(如片上存储器)来优化设计的性能和资源利用率。
端口绑定:Packing步骤将门级网表中的输入和输出端口与实际的FPGA引脚(物理引脚)进行绑定。这确保了逻辑元件正确地连接到FPGA芯片的输入和输出通道。
时序约束:Packing步骤还考虑设计的时序要求,如时钟约束和时序路径限制。它会根据时序约束对逻辑元件进行放置和布线,以确保设计在时序要求下正常工作。
通过Packing步骤,设计人员可以优化FPGA设计的资源利用率、性能和时序。它能够将门级网表中的逻辑元件进行组合和优化,以最大程度地利用FPGA芯片上的资源,并满足设计的要求和约束。最终的目标是生成一个更紧凑、高效的设计,可以进一步用于布局和布线等后续阶段。
Placement(布局)
放置算法确定FPGA中的哪个逻辑块应该实现电路所需的相应逻辑。优化目标包括将连接的逻辑块放在一起,以最大限度地减少所需的布线(布线长度驱动的布局),有时还包括放置块,以平衡整个FPGA的布线密度(路由性驱动的布局(routability driven placement))或最大限度地提高电路速度(时序驱动布局)。
Routing(布线)
时序分析
时序分析用于两个基本目的:
•确定已完全放置和布线的电路的速度
•决定必须通过快速路径进行哪些连接,以避免电路变慢。
比特流生成
一旦网表被放置并路由到FPGA上,就为网表生成比特流信息。该比特流是使用比特流加载器在FPGA上编程的。
网表的比特流包含关于FPGA的哪个SRAM比特被编程为0或1的信息。比特流生成器读取技术映射、封装和放置信息,以对查找表的SRAM比特进行编程。
FPGA的所有这些主要优势都来自于它们的可重新配置性,这使得它们具有通用性和现场可编程性。但是,同样的可重构性是其劣势的主要原因;从而使其比ASIC更大、更慢且更耗电。
在FPGA设计流程中,"Bitstream Generation"(位流生成)是在布局(Placement)和布线(Routing)阶段之后的关键步骤。它的目标是生成一个二进制位流文件,该文件包含了将设计加载到目标FPGA芯片上所需的配置信息。
配置位编码:根据目标FPGA的架构和配置协议,将配置位信息编码为特定的二进制格式。这个过程将设计中的逻辑元件、连线、时钟网络、I/O引脚等转化为FPGA所需的配置位编码,以实现设计的功能。
配置位流生成:根据编码的配置位信息,生成一个包含所有配置位的二进制位流文件。这个位流文件是将设计加载到目标FPGA芯片上的关键文件。
通过"Bitstream Generation"步骤,设计人员可以将经过布局和布线的设计结果转化为FPGA芯片所需的配置位流文件。这个位流文件包含了设计的逻辑功能、连接和资源分配信息,可以被FPGA芯片加载和执行。
总结与结论
本章首先简要介绍了FPGA的传统逻辑和路由体系结构。随后,详细介绍了FPGA设计流程中涉及的不同步骤。最后,描述了各种方法,这些方法被用来减少FPGA和ASIC的一些缺点,无论是否损害它们的主要优点。图2.28显示了用于减少FPGA和ASIC缺点的不同解决方案的粗略比较。

