前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vivado综合设置之-no_lc

Vivado综合设置之-no_lc

作者头像
黑马Amos
发布2023-03-21 13:33:24
4720
发布2023-03-21 13:33:24
举报
文章被收录于专栏:李家杂货铺zi李家杂货铺zi

本文详细讨论了当勾选或者不勾选-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位带进位端的加法器)

代码语言:javascript
复制
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运行即可。

代码语言:javascript
复制
#初始化计数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数量。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结论
  • 测试代码(4位带进位端的加法器)
  • 当-no_lc不勾选(默认情况)
    • 原理图
      •  资源利用率
        • Device视图
          • 资源利用率中LUT数量的计算方法
          • 当-no_lc勾选
            • 原理图
              •  资源利用率
                • Device视图
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档