0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

三个对分析编译时间非常有效的Tcl脚本

FPGA技术驿站 来源:FPGA技术驿站 2023-02-10 15:00 次阅读

针对特定的设计,就编译时间而言,我们要分析时间都消耗在哪些环节从而有针对性的缩短编译时间。通常,时间可能花费在加载约束上,也可能花费在某个子步骤如布局。有时面对的情况是同一设计在不同Vivado版本上运行时间出现较大差异。

report_constraints

我们先来介绍第一个命令:report_constraints。运行该命令之前需要先在Vivado Tcl Console中执行如下命令:

source report_constraints.tcl

同时最好将该脚本与待分析的dcp放置在同一目录下,这样在读取dcp时就只用提供当前工作目录即可。另外,需要注意的是report_constraints只能在Linux系统下运行。report_constraints可报告出设计中所用到的约束的种类(包括时序约束也包括非时序约束)、数量以及有效性。

通常情况下,Xilinx建议采用如下顺序描述时序约束。除第10条set_bus_skew之外,约束的优先级也是依此顺序的,即1号优先级最低,9号优先级最高。因此,不合理的顺序以及不合理的描述方式会导致一些约束被覆盖,从而造成设计“假收敛”的现象。

poYBAGPl6-KAVvYYAABv_DOGcGU688.jpg

对于一个复杂的设计,除了用户约束文件外,还可能会有IP的约束文件,这些约束文件可能在用户约束文件之前被调用(约束文件属性PROCESSING_ORDER为EARLY),也可能在用户约束文件之后被调用(约束文件属性PROCESSING_ORDER为LATE)。report_constraints可报告出所有约束文件所包含的约束。

案例1:只报告上述10种时序约束的个数

如下图所示(使用report_constraints时需要在添加作用域即tb::)。该报告第1列显示约束类型,第2列显示需要在用户约束之前调用的约束个数,第3列显示用户约束的个数,第4列显示需要在用户之后调用的约束个数,第5列显示和开发板相关的约束个数(当Part选择为开发板时),最后一列显示OOC综合时用到的约束个数。

pYYBAGPl7A2AEyXxAACmFGgfqhk078.jpg

案例2
:报告所有约束及约束用到的命令

通过添加-all选项,report_constratins可报告所有约束(时序约束+非时序约束)的数目以及这些约束用到的Tcl命令的个数,如下图所示。

在Vivado Commands Summary中,可以看到get_cells、get_pins、get_ports以及set_property等命令的使用情况。

pYYBAGPl7CWAMmboAAEzkgq53Es078.jpg

案例3
:报告约束的具体信息

添加选项-details和-verbose,report_constratins可报告约束的详细信息,如下图所示。
poYBAGPl7DmAOfAxAAIgD5m09W8916.jpg

案例4:报告时序画像

选项-timing_graph和-verbose可用于报告时序画像,如下图所示。当Status列由Invalidatetiming变为Required valid timing时,Estimatedupdates加1,这个值越小越好,根据此值可判断约束描述的顺序是否是最优的。

poYBAGPl7E-AcXm1AAF5_IVfvYU759.jpg

profiler

对Vivado编译时间进行调试时,命令profiler可帮助用户查看特定操作的运行时间,分析指定命令的调用次数,从而确定整体运行时间的瓶颈。profiler命令的具体使用方法如下所示:

profiler add *

profiler start

open_checkpoint top_routed.dcp

profiler stop

profiler summary

profiler summary -log profiler.log

profiler summary -log profiler.csv -csv

生成的csv文件可用excel打开,第一部分内容如下。第一列显示了所执行的命令,倒数第2列(ncalls)显示了该命令被调用的次数,最后一列显示了执行该命令所耗时间占整体运行时间的百分比。

pYYBAGPl7G6AUf6LAAJocEoytlk536.jpg

profiler生成报告还能显示前50条最耗时的命令,如下图所示。可用看到除open_checkpoint之外,get_clocks最耗时。

pYYBAGPl7ISATEPFAALexMBl-ck872.jpg

报告的第三部分可以看到设计中Tcl命令的使用情况,如下图所示。图中commands列(最后一列)为Tcl命令,size列为该命令返回的对象的个数,count列为返回同样个数的命令的个数,total列等于size与count的乘积。以第122行get_cells为例,返回120个对象的get_cells有24个,所以总对象个数为120x24即2880。

poYBAGPl7JqAJL7BAAFXC_4eAf0485.jpg

profiler命令还可用于查看指定命令的运行时间,这对于发现约束中哪些命令最为耗时很有帮助,使用方法如下所示。从生成报告中可以看到get_cells命令共耗时32.984ms。

profiler start

set cells [get_cells

-hier -filter"REF_NAME==FDRE"]

profiler stop

profiler summary

pYYBAGPl7NaAD70-AAF0ij7LGXo057.jpg

vivadoRuntime

命令vivadoRuntime可用于查看不同策略下每个阶段所消耗的时间,使用方法如下图所示。每个Elapsed列对应1个策略(也就是1个DesignRun)。

poYBAGPl7PKARcrBAAExMILM4qM505.jpg

使用上述3个命令我们可用快速侦测出约束中耗时的命令以及implementation阶段耗时的子步骤。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DCP
    DCP
    +关注

    关注

    0

    文章

    30

    浏览量

    17214
  • Vivado
    +关注

    关注

    19

    文章

    808

    浏览量

    66332
  • csv
    csv
    +关注

    关注

    0

    文章

    38

    浏览量

    5805

原文标题:缩短Vivado编译时间(4):时间都去哪儿了

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    tcl命令用于时序分析如何检查输入或输出的时间

    我只有非常有限的知识来使用tcl命令进行时序分析(不用于时序约束,仅用于时序分析)。这些命令如下:check_timingreport_timing_summary我希望知道一些最常见
    发表于 03-11 13:41

    如何将库添加到设计中并使用Tcl脚本编译

    你好,我编写了一Tcl脚本来合成Vivado Design Suite 2014.4中的设计(适用于Zynq ZC 706)。设计中的库未编译。弹出错误,表示找不到特定的.vhd文件
    发表于 04-16 10:15

    非常高效三个linux shell命令分享

    了开发效率。本文浅析三个非常高效的linux shell命令(awk,grep,sed),在开发工程中的实际应用。1,从系统命令的打印中获取有用信息。演示:上图为开发板网络信息,现在从中获取...
    发表于 12-23 06:38

    Vivado之TCL脚本语言基本语法介绍

    TCL脚本语言 Tcl(Tool Command Language)是一种很通用的脚本语言,它几乎在所有的平台上都可以解释运行,而且VIVADO也提供了
    发表于 04-11 12:09 9848次阅读

    关于Tcl的介绍和用途

    在处理if命令时,Tcl解释器只指导这个命令有三个词,其中第一是命令名if。Tcl解释器并不知道if的第一输入参数是表达式,第二
    的头像 发表于 07-27 09:28 4873次阅读
    关于<b class='flag-5'>Tcl</b>的介绍和用途

    机器学习对分析地理空间图像非常有帮助

    机器学习对分析地理空间图像非常有帮助。卫星照片往往会创建大量数据,而AI软件可以比人类观察者更快地标记出感兴趣的项目。例如,在澳大利亚,消防员定期分析卫星图像以监测野火的蔓延,并努力保持领先地位。
    的头像 发表于 03-22 16:23 2058次阅读

    三个方面分析电磁兼容的问题

    分析电磁兼容的问题,从三个方面入手。这三个方面分别是:骚扰源、敏感源、耦合路径。
    发表于 10-13 14:18 1445次阅读

    有什么方法可以减少Quartus II的编译时间吗?

    对于减少Quartus II的编译时间的方法,可从三个角度进行考虑。
    的头像 发表于 05-18 10:27 4768次阅读
    有什么方法可以减少Quartus II的<b class='flag-5'>编译</b><b class='flag-5'>时间</b>吗?

    三个有效的HMI设计原则

    无论你是为机器制造商、系统集成商工作,还是终端设备用户,让我们来探究一下为什么会这样,以及能做些什么。为了帮助评估任何HMI改进,考虑三个有效的HMI设计原则是非常有帮助的。
    的头像 发表于 02-10 15:57 1623次阅读

    17非常有用的Python技巧

    Python 是一门非常优美的语言,其简洁易用令人不得不感概人生苦短。在本文中,作者 Gautham Santhosh 带我们回顾了 17 非常有用的 Python 技巧,例如查找、分割和合并列表等。这 17
    的头像 发表于 04-10 14:28 523次阅读

    三个Makefile模板分享

        本文分享三个Makefile模板:编译可执行程序、编译静态库、编译动态库。 1 写在前面     对于Windows下开发,很多IDE都集成了
    的头像 发表于 07-10 09:07 937次阅读
    <b class='flag-5'>三个</b>Makefile模板分享

    FPGA设计之tcl脚本的应用

    目前已经学完了基础实验,这里要介绍Quatus自带的两非常重要的功能,第一tcl脚本,第二
    的头像 发表于 09-07 18:30 2501次阅读
    FPGA设计之<b class='flag-5'>tcl</b><b class='flag-5'>脚本</b>的应用

    利用Tcl脚本节省编译时间

    这篇博文介绍了多种自动生成报告的有效途径,以便您在尝试对设计中特定阶段所耗用的编译时间进行调试时使用,例如,自动报告加载设计约束的时间、每条命令的持续
    的头像 发表于 09-15 10:44 767次阅读
    利用<b class='flag-5'>Tcl</b><b class='flag-5'>脚本</b>节省<b class='flag-5'>编译</b><b class='flag-5'>时间</b>

    Linux内核编译脚本

    ,则: make V= 2 内核编译脚本 最后分享我常用的内核编译脚本 mk.sh ,给大家参考: #!/bin/sh export ARCH=arm export PATH=~/to
    的头像 发表于 09-27 11:52 612次阅读

    keil自动化编译脚本

    这是一 keil 的自动化编译脚本,可被其他脚本或程序调用,接收参数并按参数编译 keil 工程,而不必打开 keil 软件,实现程序上的
    的头像 发表于 10-16 17:04 1774次阅读
    keil自动化<b class='flag-5'>编译</b><b class='flag-5'>脚本</b>