查找表的一个重要功能是用作逻辑函数发生器。本质上,逻辑函数发生器存储的是真值表(Truth Table)的内容,而真值表则是通过布尔表达式获得的。在Vivado中,打开网表文件,选中相应的LUT,可在属性窗口中查看真值表。从逻辑电路的角度看,查找表是构成组合逻辑电路的重要单元,正因此,也成为时序路径中影响逻辑级数的重要因素。了解常规逻辑电路的逻辑级数对于设计初期的时序评估是很有必要的。
以加法器为例,相应的RTL代码如下图所示。
对于16-bit有符号加法运算,其逻辑级数为3,如下图所示。
对于32-bit有符号加法运算,其逻辑级数为6,如下图所示。
对于48-bit有符号加法运算,其逻辑级数为8,如下图所示。
此外,1个LUT6可以实现4选1的数据选择器(MUX),同时LUT6可以与SLICE中的F7MUX、F8MUX、F9MUX等一起构成更大MUX。对于8选1的MUX,相应的RTL代码如下图所示,其逻辑级数为2(1个LUT 1个F7MUX);对于16选1的MUX,其逻辑级数为3(1个LUT 1个F7MUX 1个F8MUX);而32选1的MUX可在一个SLICE(针对UltraScale和UltraScale Plus芯片)中实现,消耗8个LUT6,4个F7MUX,2个F8MUX和1个F9MUX,因此,逻辑级数为4(1个LUT 1个F7MUX 1个F8MUX 1个F9MUX)。
另一种常见运算是关系运算。相应的RTL代码如下图所示。当数据位宽为8-bit或16-bit时,对应的逻辑级数为2;当数据位宽为32-bit时,对应的逻辑级数为3。
结论: