本文详细讨论了当勾选或者不勾选-no_lc时的差异,也详细介绍了using O5 and O6以及using O6 output only的具体含义。
-no_lc表示NO LUT Combining,即无LUT整合,默认不勾选,即默认有LUT整合。LUT整合可以减少对LUT的使用量,但也可能导致布线拥塞( yōnɡ sè)。
在Reports->Report Utilization中可通过using O5 and O6查看整合的LUT6的使用个数。
通过using O6 output only可查看只使用了O6输出引脚的LUT6的使用个数,也即没有整合的LUT6的使用个数。
目录
结论
测试代码(4位带进位端的加法器)
当-no_lc不勾选(默认情况)
原理图
资源利用率
Device视图
资源利用率中LUT数量的计算方法
当-no_lc勾选
原理图
资源利用率
Device视图
结论
1. 当不勾选-no_lc,则有LUT整合,此时资源利用率中的LUT数量常常小于我们在综合后的原理图中用眼睛数出来的LUT数量,这是因为后者需要减去整合后的LUT。
2. 当勾选-no_lc,则无LUT整合,此时资源利用率中的LUT数量等于我们在综合后的原理图中用眼睛数出来的LUT数量。
3. 无论勾选-no_lc与否,综合后和实现后的Schematic总是一样的,不同之处仅体现在Device视图中。
4. 无论勾选-no_lc与否,本文中的2个原理图中均带有IBUF和OBUF,本文发现的一个问题是若在综合设置中将More Options设置为-mode out_of_context(见下图),
即此时产生的原理图中不带IBUF和OBUF,此时-no_lc的作用似乎是无效的,原因待后续确认。因此本文的More Options未设置。
测试代码(4位带进位端的加法器)
module top(
input [3:0] X,
input [3:0] Y,
output [3:0] sum,
output C
);
assign {C,sum} = X + Y;
endmodule
当-no_lc不勾选(默认情况)
原理图
上图中不同颜色的MARK仅为了便于描述,①和②用于描述LUT的整合情况。
资源利用率
LUT用了4个,其中,
using O5 and O6 <> LUT as logic的数量为2,这个表示整合后的LUT使用个数。
using O6 output only <> LUT as logic的数量为2,这个表示未经过整合的LUT使用个数。
以下进一步说明。
Device视图
上图大红框框表示一个SLICEM,上图的颜色MARK与原理图中的颜色一一对应,上图的①可以看出绿色MARK和浅蓝色MARK被整合进一个LUT6中,上图的②可以看出粉色MARK和深蓝色MARK被整合进一个LUT6中,这里的①和②与原理图中的①和②分别对应。
继续放大上图,得到下图:
可以看出,右上图、右下图均是整合后的LUT,因此同时使用了O5和O6,而左上和左下角均是未整合后的LUT,因此仅使用了O6。
这就是using O5 and O6以及using O6 output only都为2的原因。
资源利用率中LUT数量的计算方法
使用如下通用脚本可计算本例的LUT个数=4,复制下方脚本代码,直接粘贴至Tcl Console运行即可。
#初始化计数0
set count 0
#找到设计中被使用的LUT6
set bel_list [get_bels -regexp {SLICE_X\d+Y\d+/(A|B|C|D|E|F|G|H)6LUT} -filter {IS_USED == 1}]
#找到这些被使用的LUT6中LUT5也被使用的情形,并统计被使用的LUT5个数,从而获得了Combined LUT的个数
set combined_lut [list]
set no_combined_lut [list]
foreach bel $bel_list {
set second_bel [string replace $bel end-3 end-3 5]
if {[get_property IS_USED [get_bels $second_bel]] == 1} {
lappend combined_lut $second_bel
incr count
} else {
lappend no_combined_lut $bel
}
}
puts $count
#从总共被使用的LUT(total_used_luts)中减去Combined LUT(因为Combined LUT被统计了两次)即为实际被使用的LUT
set total_used_luts [llength [get_bels -filter {NAME =~ SLICE*LUT && IS_USED == 1}]]
set final_logic_lut_count [expr $total_used_luts - $count]
puts $final_logic_lut_count
当-no_lc勾选
原理图
资源利用率
Device视图
继续放大上图,得到下图:
因为-no_lc被勾选,所以无LUT整合,所以每个LUT6都只使用了O6,也可以发现当无LUT整合时,资源利用率中的LUT数量=综合后的原理图中眼睛数出来的LUT数量。