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

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

3天内不再提示

缩短Vivado编译时间之审视时序约束描述

FPGA技术驿站 来源:FPGA技术驿站 2023-02-23 09:03 次阅读

在描述时序约束时,一个重要的原则是确保约束简洁高效。简洁高效意味着约束只针对指定的对象,即约束对应的对象的个数(通常这些对象由命令get_pins、get_cells、get_nets、get_ports或get_clocks获取)尽可能少,少的同时还要足够的精确,能够安全地覆盖到期望的时序路径。

既不会出现遗漏某些对象也不会出现包含了不期望的对象,两者都会造成工具无法对相关路径按照指定要求进行时序分析,从而造成设计“伪收敛”。这通常会出现在使用-from、-to或-through等选项的约束中,例如:

set_clock_groups,set_false_path

set_max_delay,set_multicycle_path

等时序例外约束。

Vivado提供了一些方法用于分析时序例外约束的有效性,其中之一就是用命令report_exceptions生成时序例外报告。这里我们首先介绍一下这个命令的使用方法。 report_exceptions -scope_override

选项-scope_override可用于查看是否存在作用于某个子模块的约束(约束的作用域仅限于该子模块)被顶层约束部分或者全部覆盖。注意这里仅限于子模块约束与顶层模块约束之间的覆盖情况,而不会报告不同子模块之间的约束覆盖情况。借助此选项查看IP的约束是否被用户约束所覆盖将变得非常容易。如下图所示,我们可以在生成报告的Status列发现IP约束被用户约束覆盖。

99ebad40-b30d-11ed-bfe3-dac502259ad0.png9a02bd00-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -coverage

选项-coverage可查看约束的覆盖率,其描述形式是时序例外约束所施加的路径的起点或终点的pin个数与-from/-through/-to选项所获得的pin的个数的百分比。我们看一个例子,如下图所示报告。其中的红色方框可以看到这里使用的是set_max_delay,-from是通过get_cells获得的,因为只有1个cell且时序路径的起点是触发器的时钟端口,所以From的覆盖率就是100%(触发器只有1个时钟端口)。

-to也是通过get_cells获取,获取到1个cell,这个cell也是触发器,其数据端口是该约束对应的时序路径的终点。但实际上,触发器除了数据端口之外,还有时钟使能端口/复位端口,所以To的覆盖率就是1/3也就是这里的33.33%。显然,覆盖率越高表明我们描述得越精确。

9a2bd988-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -ignored

选项-ignored可报告出设计中被完全覆盖的约束(Totallyoverridden),需要注意的是不会报告部分被覆盖的约束(PartiallyOverridden)。下图中可以看到set_multicycle_path被set_max_delay所覆盖。 9a5a1a28-b30d-11ed-bfe3-dac502259ad0.png   9a795a00-b30d-11ed-bfe3-dac502259ad0.png

report_exceptions -ignored_objects

选项-ignored_objects可报告出被忽略的起点或终点。之所以被忽略是因为这些路径不存在,例如下图中触发器的D端口恒接地,这样在使用set_false_path -to时,-to的值如果是通过get_pins获取到该触发器的D端口, 那么这条路径的终点就会被工具忽略,从而这条约束也就无效。

9a8e606c-b30d-11ed-bfe3-dac502259ad0.png

从编译时间的角度看,描述约束时越精确越好。一个事实是在网表中pin的个数通常是cell个数的几倍甚至几十倍,因此直接搜索pins会比较耗时,Xilinx推荐的方法是利用cell和pin的关系,先找到cell再找到对应的pin,例如:需要对下图所示的两个触发器对应的时序路径进行FalsePath约束,采用了三种方式。显然,方案1和方案2会覆盖到不期望的路径,方案3最为精确,耗时也较少。

9aaa02e0-b30d-11ed-bfe3-dac502259ad0.png9ac93480-b30d-11ed-bfe3-dac502259ad0.png

尤其是当get_pins命令使用了通配符时,先get_cells再get_pins更为高效,如下图所示方式。

9af1e6a0-b30d-11ed-bfe3-dac502259ad0.png

另外,在约束中避免使用all_registers,该命令会返回设计中的所有触发器。如果确需用all_registers,那么可通过选项-clock限定作用域,或者用get_clocks取代,如下图所示。 9b1faae0-b30d-11ed-bfe3-dac502259ad0.png

时序约束的描述顺序对编译时间也有很大影响。当时序约束被加载到内存时,时序引擎会对每条约束进行验证。对于可能存在问题的约束,时序引擎会打印出相关的信息。一些约束可能会导致部分时序数据库无效,还有一些约束可能需要更新时序数据库以便正常运行。

例如,MMCM自动生成的时钟若频率或相位发生了改变,那么用到这个时钟的相关约束就需要更新。交织的时序约束以及影响到时序数据库的约束会对编译时间产生较大影响。如下表格显示了会对时序数据库产生影响的一些Tcl命令。

9b457914-b30d-11ed-bfe3-dac502259ad0.png

其中最为耗时的描述方式是同时使用了set_disable_timing和all_fanin或all_fanout,如下图所示。

9b6c51ba-b30d-11ed-bfe3-dac502259ad0.png

根据上述表格,从编译时间的角度来看,最优的约束描述顺序是:

(1)set_disable_timing,

set_case_analysis,

set_external_delay

(2)影响时序数据库的约束如create_clock

(3)不需要更新时序数据库的约束,例如

set_max_delay 我们看一个案例,如下图所示:代码第3至第10行为原始约束顺序,这里将set_disable_timing和set_case_analysis放在了create_clock之后。

代码第14行至第20行为推荐的约束顺序,可以看到先描述set_disable_timing,之后是set_case_analysis,然后才是create_clock,同时将set_max_delay放在了最后。

9b853518-b30d-11ed-bfe3-dac502259ad0.png








审核编辑:刘清

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

    关注

    10

    文章

    1662

    浏览量

    87953
  • 触发器
    +关注

    关注

    14

    文章

    1694

    浏览量

    60434
  • PIN
    PIN
    +关注

    关注

    1

    文章

    298

    浏览量

    23680
  • Vivado
    +关注

    关注

    18

    文章

    790

    浏览量

    65231

原文标题:缩短Vivado编译时间(6):审视时序约束

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

收藏 人收藏

    评论

    相关推荐

    如何缩短Vivado的运行时间

    Vivado Implementation阶段,有时是有必要分析一下什么原因导致运行时间(runtime)过长,从而找到一些方法来缩短运行时间
    的头像 发表于 05-29 14:37 1.4w次阅读
    如何<b class='flag-5'>缩短</b><b class='flag-5'>Vivado</b>的运行<b class='flag-5'>时间</b>

    VIVADO时序约束及STA基础

    时序约束的目的就是告诉工具当前的时序状态,以让工具尽量优化时序并给出详细的分析报告。一般在行为仿真后、综合前即创建基本的时序
    的头像 发表于 03-11 14:39 8848次阅读

    FPGA主时钟约束详解 Vivado添加时序约束方法

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。
    发表于 06-06 18:27 7116次阅读
    FPGA主时钟<b class='flag-5'>约束</b>详解 <b class='flag-5'>Vivado</b>添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>方法

    玩转VivadoTiming Constraints

    时,老是范糊涂,因为Quartus II和ISE对IO端口的约束方式和计算公式略有不同,容易混淆。而老掉牙的ISE中也只是光秃秃的没有任何提示,Vivado可好了,出现了标好了具体约束值的时序
    发表于 01-11 16:55

    时序约束资料包

    Vivado基本操作流程2、时序基本概念3、时序基本约束和流程4、Baselining时序约束
    发表于 08-01 16:45

    vivado时序分析与约束优化

    的strategy里面有一个Flow quick的模式,选择Flow quick模式对比之前的模式可以发现,VIVADO在这个模式下进行布局布线会快很多,但是时序也变的一塌糊涂。小编认为这种模式可以在一些比较大的工程里,比较赶时间
    发表于 08-22 11:45

    时序约束时序分析 ppt教程

    时序约束时序分析 ppt教程 本章概要:时序约束时序分析基础常用
    发表于 05-17 16:08 0次下载

    时序约束用户指南

    时序约束用户指南包含以下章节: ?第一章“时序约束用户指南引言” ?第2章“时序约束的方法” ?
    发表于 11-02 10:20 0次下载

    Vivado中的Incremental Compile增量编译技术详解

    Incremental Compile增量编译Vivado提供的一项高阶功能。目的旨在当设计微小的改变时,重用综合和布局布线的结果,缩短编译时间
    的头像 发表于 07-05 06:06 1w次阅读

    时序约束资料包】培训课程Timing VIVADO

    来维持吗? 1、Vivado基本操作流程 2、时序基本概念 3、时序基本约束和流程 4、Baselining时序
    发表于 08-06 15:08 423次阅读

    FPGA时序约束的建立和保持时间方法

    首先来看什么是时序约束,泛泛来说,就是我们告诉软件(Vivado、ISE等)从哪个pin输入信号,输入信号要延迟多长时间,时钟周期是多少,让软件PAR(Place and Route)
    的头像 发表于 01-28 17:34 3121次阅读
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b>的建立和保持<b class='flag-5'>时间</b>方法

    Vivado进行时序约束的两种方式

    上面我们讲的都是xdc文件的方式进行时序约束Vivado中还提供了两种图形界面的方式,帮我们进行时序约束
    的头像 发表于 03-08 17:17 1.9w次阅读
    <b class='flag-5'>Vivado</b>进行<b class='flag-5'>时序</b><b class='flag-5'>约束</b>的两种方式

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束
    的头像 发表于 06-23 17:44 1410次阅读
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>

    如何在Vivado中添加时序约束呢?

    今天介绍一下,如何在Vivado中添加时序约束Vivado添加约束的方法有3种:xdc文件、时序
    的头像 发表于 06-26 15:21 2282次阅读
    如何在<b class='flag-5'>Vivado</b>中添加<b class='flag-5'>时序</b><b class='flag-5'>约束</b>呢?

    Vivado综合阶段什么约束生效?

    Vivado综合默认是timing driven模式,除了IO管脚等物理约束,建议添加必要的时序约束,有利于综合逻辑的优化,同时综合后的design里面可以评估
    的头像 发表于 07-03 09:03 449次阅读