2.2 FPGA逻辑阵列模块
FPGA最核心的逻辑阵列模块由逻辑单元(LEs)或自适应逻辑模块(ALM)组成,如图2-2所示。
FPGA与之前的CPLD差别很大。FPGA逻辑阵列模块(LAB)由许多逻辑单元LE组成,在更高级的设备中由自适应逻辑模块(ALM)组成。这些逻辑块中的每一个都包含查找表、寄存器和其他可配置功能。布线互连,与这些逻辑块隔开。
LE或ALM看起来与CPLD宏单元类似,但它们更易于配置,并提供许多额外功能以提高性能,且最大限度地减少逻辑资源的浪费。典型FPGA的逻辑模块主要由3个主要部分组成:查找表(LUT)、进位逻辑和输出寄存器逻辑。
图2-2 FPGA逻辑阵列模块
2.2.1 查找表(LUT)
LUT是FPGA中生成乘积函数和等组合逻辑的关键。LUT取代了CPLD中的乘积表达项阵列。FPGA使用四输入或更多输入LUT来创建复杂的功能。LUT由一系列级联多路复用器组成,其中LUT输入用作选择线。多路复用器的输入被编程为高或低逻辑电平。该逻辑被称为查找表,因为输出是通过“查找”正确的编程电平并根据LUT输入信号通过多路复用器的正确布线来选择的,所选程序电平基于函数的真值表。例如,图中的查找表值为16进制的9889时,对于输入信号ABCD,得到的逻辑表达式值为:,如图2-3所示。
2.2.2 可编程寄存器
LE的同步部分来自可编程寄存器,如图2-4所示。它通常由全局时钟驱动,但任何时钟域都可以驱动LE。寄存器的异步控制信号,如清除、复位或预置,可以由其他逻辑产生,也可以来自I/O引脚。寄存器的输出可以驱动LE到设备的布线通道,或者反馈到LUT,类似于CPLD宏单元中的反馈。寄存器可以被旁路,产生严格的组合逻辑功能,类似于CPLD。我们也可以完全绕过LUT进行寄存或同步。LE输出级的这种灵活性使其对所有类型的逻辑运算都非常有用。
图2-3 查找表结构示意图
图2-4 可编程寄存器
2.2.2.1 进位和寄存器链
区分LE和CPLD宏单元的一个关键部分是进位和寄存器链逻辑,如图2-5所示。在CPLD中,进位和宏单元输出可以输入到其他宏单元,但这通常需要返回到乘积项阵列。FPGA LE包含LAB内的特定进位逻辑和寄存器链接布线,以提供这些信号的快捷连线方式。进位可以来自LAB内的其他LE或来自设备中的其他LAB。生成的进位可以输出到其他LE或互联的设备。LUT和进位逻辑可以在LAB内完全旁路,链接LAB中的所有LE寄存器,将它们转换为移位寄存器,非常适合DSP类型的操作。进位逻辑和寄存器链接布线的通用性提供了比CPLD更好的性能和资源管理效率。
图2-5 进位与寄存器链
2.2.2.2 寄存器封装
无论是在同一个LAB中,还是通过器件的布线通道,LUT或寄存器都可以输出到器件中的其他位置,FPGA LE可以被配置来形成一个函数,这称为寄存器封装,如图2-6所示。通过寄存器封装,可以从单个LE输出两个独立的功能,一个来自LUT和进位链逻辑,另一个来自输出寄存器。这可以节省设备资源,因为完全不相关的寄存器函数可以打包到仅使用模块组合逻辑部分的LE中。
图2-6 寄存器封装
2.2.3 LABs和LE:更进一步的观察
了解了这些构建模块之后,让我们再仔细研究它们是如何连接在一起来构建FPGA芯片的。FPGA器件中LAB视图如图2-7所示。图2-7来自英特尔Quartus Prime软件中名为Chip Planner的工具,可以轻松查看FPGA设计中的逻辑位置。图中,颜色较深的LAB表明LAB中包含更多资源,还可以看到LAB之间运行的布线通道。要获得有关特定结构特征的更多细节,可以放大该特征,如突出显示的LAB。放大这个特定的LAB,可以看到没有使用任何逻辑资源、由浅蓝色背景表示及LAB中的资源都是白色的现象。该LAB和该器件中的所有LAB都包含16个LE,它们相互连接,并通过许多可见的线相互连接成行和列。
查看单个LE,可以很容易地看到LE是如何由LUT和进位逻辑及同步寄存器逻辑组成的。
图2-7 FPGA器件中的LAB视图
2.2.4 自适应逻辑模块(ALM)
虽然到目前为止所讨论的FPGA LE与CPLD宏单元相比具有明确的设计灵活性优势,但是仍然需要级联和反馈来生成输入多于可用输入的函数。为了更好地解决这个问题,所有新FPGA都使用更加通用的逻辑块作为LE的替代,称为自适应逻辑模块(ALM),如图2-8所示。ALM类似于LE,但更具一些核心优势。
图2-8 ALM
ALM包括2个或4个输出寄存器,为逻辑链、寄存器封装及在单个逻辑块内生成多个函数提供了更多选项。ALM还具有内置硬件加法器块。ALM中的加法器是专用资源,可以执行标准算术运算,而无须在LUT或DSP中生成这些数学函数,这可以提高计算性能并简化LUT逻辑。
ALM中的LUT是其与LE的主要区别。ALM中的LUT是自适应LUT或ALUT。ALUT类似于LUT,但它可以拆分并配置成不同大小的LUT,以适应任何类型的两个独立的函数,从非常简单到非常复杂。所有八输入都可用于执行复杂的算术功能,但ALUT可以以不同的方式分割,以实现更简单的功能。例如,两个LUT,每个LUT分别具有三输入和五输入。ALUT也可以被拆分,以支持更复杂的七输入功能,其中额外的输入用于寄存器打包,分成两个四输入的LUT,使ALUT向后兼容标准LE中的四输入LUT技术。如果可以在两个函数之间共享输入,则可以进行一些其他分割。基于ALM的FPGA可以使用少量资源和智能资源管理提供高性能的逻辑运算。