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

    文章

    1745

    浏览量

    88944
  • 触发器
    +关注

    关注

    14

    文章

    2019

    浏览量

    61397
  • PIN
    PIN
    +关注

    关注

    1

    文章

    305

    浏览量

    24499
  • Vivado
    +关注

    关注

    19

    文章

    815

    浏览量

    66960

原文标题:缩短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约束时序路径分析问题

    时序不满足约束,会导致以下问题: 编译时间长的令人绝望 运行结果靠运气时对时错 导致时序问题的成因及其发生的概率如下表: 由上表可见,造成
    的头像 发表于 11-29 10:34 8832次阅读

    VIVADO时序约束及STA基础

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

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

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

    FPGA时序约束衍生时钟约束和时钟分组约束

    在FPGA设计中,时序约束对于电路性能和可靠性非常重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的主时钟约束
    发表于 06-12 17:29 2902次阅读

    FPGA时序约束建立时间和保持时间

    FPGA中时序约束是设计的关键点之一,准确的时钟约束有利于代码功能的完整呈现。进行时序约束,让软件布局布线后的电路能够满足使用的要求。
    发表于 08-14 17:49 1556次阅读
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>约束</b><b class='flag-5'>之</b>建立<b class='flag-5'>时间</b>和保持<b class='flag-5'>时间</b>

    时序约束资料包

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

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

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

    讲述增量编译方法,提高Vivado编译效率

    当RTL代码修改较少时,使用增量编译功能可以提高工程的编译速度,Incremental Compile增量编译Vivado提供的一项高阶功能。目的旨在当设计微小的改变时,重用综合和布
    的头像 发表于 01-22 17:27 1w次阅读
    讲述增量<b class='flag-5'>编译</b>方法,提高<b class='flag-5'>Vivado</b><b class='flag-5'>编译</b>效率

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

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

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

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

    如何在Vivado中添加时序约束

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束
    的头像 发表于 06-23 17:44 2557次阅读
    如何在<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 4383次阅读
    如何在<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 770次阅读

    浅谈Vivado编译时间

    随着FPGA规模的增大,设计复杂度的增加,Vivado编译时间成为一个不可回避的话题。尤其是一些基于SSI芯片的设计,如VU9P/VU13P/VU19P等,布局布线时间更是显著增加。当
    的头像 发表于 09-18 10:43 1259次阅读
    浅谈<b class='flag-5'>Vivado</b><b class='flag-5'>编译</b><b class='flag-5'>时间</b>