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

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

3天内不再提示

使用增量综合节省编译时间

XILINX开发者社区 来源:XILINX开发者社区 2023-09-08 11:01 次阅读

增量综合流程:

增量综合的工作方式与增量实现流程相似,但仅适用于综合阶段,并且不会对紧随其后的实现阶段给予引导。

此流程需独立的综合参考文件(综合后 DCP),因此您需完成初始综合运行以获取首个综合后 DCP 文件。增量运行会复用设计中未更改的部分,并且仅对已更改的部分进行重新综合。复用的各部分会在分区级别予以保留。

以下图表显示了含脚本的非工程流程:

9293ed86-4d6e-11ee-a25d-92fbcf53809c.png

图:增量流程图表

在 GUI 中支持通过以下两种方法来指定参考检查点:

使用自动增量参考检查点(当前仅在 GUI 中受支持)

使用用户指定的参考检查点

要在工程模式下启用自动模式,请打开综合设置,并选中“Automatically use the checkpoint from the previous run”(自动使用上一轮运行的检查点)选项。

在此模式下,综合运行将把最近的综合后网表自动复制到工程目录本地的 /project.srcs/utils_1/import/design 区域内。

完成整个流程后,新布线的检查点即可立即用作为下一轮运行的参考检查点,并在运行复位时进行更新。 如不勾选自动模式,也可输入用户指定的 DCP 作为参考检查点,以便引导后续轮次的运行。

92c9defa-4d6e-11ee-a25d-92fbcf53809c.png

图:设计运行设置

何时采用此流程:

当设计所含实例数量超过 50K 时,始终建议启用此流程。如果设计太小,由于改善的空间不够大,将忽略增量模式,设计将以正常流程运行。

当综合运行超过 20 分钟时,采用增量综合流程前后的运行时间平均比值为 2.06,改善显而易见。下图显示了 26 个大型设计的加速趋势,在对设计进行有限的更改时,可节省大量编译时间(低至更改前的四分之一)。

下表所示每项设计所耗用的时间也证明,小幅更改设计的前提下,参考运行时间越长,通过增量运行节省的时间就越多。因此,大型设计利用该流程获益颇丰。

建议您始终为大型设计启用自动模式来运行增量综合。但要立即使用增量综合,必须向参考检查点写入综合数据。为此,可使用 write_checkpoint -incremental_synth 开关。

92f6cd8e-4d6e-11ee-a25d-92fbcf53809c.png93099806-4d6e-11ee-a25d-92fbcf53809c.png

图:部分设计示例中的编译时间节省效果

此处随附的 getSynStepsRunTime.sh 脚本(请点击阅读原文查看)可用于为 synth_design 的每个阶段生成时间剖析表。

要运行该脚本,您可按如下示例所示使用此命令并为初始运行和增量运行生成表格。“actual”(实际)列和“phase”(阶段)列中罗列了用于每个阶段的时间和累计时间。

getSynStepsRunTime.sh ./vivado.log

9328bb5a-4d6e-11ee-a25d-92fbcf53809c.png

增量综合运行期间,下列步骤的编译时间都比参考运行更短:“RTL Optimization”(RTL 最优化)、“Area Optimization”(面积最优化)、“Timing Optimization”(时序最优化)和“Technology Mapping”(技术映射)。

下表显示了用户设计示例。请注意参考运行与增量运行中每个综合阶段所耗费的时间。由于这些阶段占用了大部分的参考编译时间,因此对总体运行时间影响尤为显著。

9352e5a6-4d6e-11ee-a25d-92fbcf53809c.png

增量综合期间,“RTL Elaboration”(RTL 细化)、“Constraint Validation”(约束确认)、“Applying XDC Timing Constraints”(应用 XDC 时序约束)、“I/O Insertion”(I/O 插入)、“Global Opt”(全局最优化)、“Netlist Generation”(网表生成)等其他阶段以及其余用于拼接的阶段在时间上所呈现的改善较少。

注释:非关联流程 (out-of-context) 另有所用,它能让子模块像各 IP 一样来运作,因此需要更多手动干预,如创建模块封装文件和限定约束作用域。它也有助于改善编译时间,如果您有静态且无需更改的大型模块,那么此流程能节省该模块的最优化时间。

可能影响增量综合的因素:

采用此流程前,以下操作有助于您充分发挥增量流程的优势:

选择正确的检查点。您需确保参考检查点与受引导的设计处于同一器件内,综合时采用的 Vivado 版本与当前运行采用的版本相同。不支持由不同版本生成的 DCP。最重要的是,参考 DCP 须在运行同一综合期间生成,并在 write_checkpoint 期间使用 -incremental_synth 开关来创建。

synth_design 设置应始终保持不变,时序约束应始终保持一致。

对受该流程影响的对象数量和跨边界最优化的数量加以限制,确保设计收敛的一致性和时序收敛。设计逻辑更改过多 (>50%) 可能导致更多模块受到影响并且需要重新综合,由此导致增加编译时间或者引导的结果欠佳。

另外,如果少量设计更改引入了参考设计中不存在的新时序问题,则可能需要增加工作量和运行时间,而且设计可能不满足时序。下图显示了 M1 模块和 M3 模块间路径因跨边界最优化而发生改变时,这两个模块进行重新综合的方式。

尽可能将更改局限在单一模块中,否则任何发生更改或消隐的分区都需重新综合。另外,为了防止发生跨边界最优化,您可在层级模块名称上使用 PRESERVE_BOUNDARY 属性,前提是您已寄存输入/输出模块端口。例如:set_property BLOCK_SYNTH.PRESERVE_BOUNDARY 1 [get_cells [list {M1 M3}]]

9369ec74-4d6e-11ee-a25d-92fbcf53809c.png

图:利用跨模块最优化情况下的综合参考运行对比增量运行

如果在设计中多次例化某个设计模块,那么该模块中的任何小幅更改都会对模块的例化次数产生巨大影响。在此情况下,就需要考量设计更改的总量。

就通过增量综合可减少编译时间的效果而言,大型设始终计比小型设计获益更多。

生成增量编译时间节省报告:

综合运行 log 日志中包含网表复用百分比的详细信息

在此示例中,仅对一个小型实例进行了修改,如果更改发生在某个子模块内,那么该表中也将列出该模块的名称。

938ea0fa-4d6e-11ee-a25d-92fbcf53809c.png

总结:

我们通过采用增量综合流程可以快速完成综合运行的迭代。该流程设置方便,并且对于设计一致性和编译时间节省都大有益处。

审核编辑:汤梓红

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

    关注

    0

    文章

    30

    浏览量

    17214
  • 编译
    +关注

    关注

    0

    文章

    652

    浏览量

    32800
  • GUI
    GUI
    +关注

    关注

    3

    文章

    648

    浏览量

    39534
  • 脚本
    +关注

    关注

    1

    文章

    387

    浏览量

    14829

原文标题:开发者分享|节省编译时间系列-使用增量综合

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    浅析可提升Vivado编译效率的增量编译方法

    增量编译:使用增量编译满足最后时刻 HDL 变动需求,仅针对已变动逻辑进行布局布线,从而可节省时间
    的头像 发表于 12-13 10:14 5318次阅读

    fpga编译综合时间过长?

    朋友们,xinlinx有没有增量编译的技术,最近做个工程占用了快80%,用了比较多的ip核,每次改一个参数就要重新综合半天,这样调试效率实在太低,我用的是ise13.2,和工具有关系么?
    发表于 06-14 22:43

    谁能缩短大容量FPGA的编译时间增量编译QIC!

    增量编译(Incremental Compilation)是ALTERA为解决大容量FPGA设计编译时间太长的问题给出的一个新式工具!在本文中我们将阐述QIC在缩短
    发表于 12-25 11:26 4924次阅读

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

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

    如何节省FPGA编译时间

    FPGA到最后自然是规模越来越大,编译时间越来越长。解决问题的方法通常来说应该从工具和设计入手。
    的头像 发表于 08-04 09:16 6608次阅读

    Vivado Design Suite 2015.3新增量编译功能介绍

    了解Vivado实现中2015.3中的新增量编译功能,包括更好地处理物理优化和自动增量编译流程。
    的头像 发表于 11-20 06:56 2815次阅读

    引入增量编译流程进行调试的好处与步骤

    了解使用Vivado 2016.1中引入的增量编译流程进行调试的好处,以及在使用增量编译实现时添加/删除/修改ILA内核所需的步骤。
    的头像 发表于 11-30 06:19 2980次阅读
    引入<b class='flag-5'>增量</b><b class='flag-5'>编译</b>流程进行调试的好处与步骤

    Vivado 2015.3中的新增量编译功能介绍

    了解Vivado实现中2015.3中的新增量编译功能,包括更好地处理物理优化和自动增量编译流程。
    的头像 发表于 11-29 06:32 3617次阅读

    Vivado 2015.3的新增量编译功能

    了解Vivado实现中2015.3中的新增量编译功能,包括更好地处理物理优化和自动增量编译流程。
    的头像 发表于 11-30 19:24 4484次阅读

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

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

    Vivado综合引擎的增量综合流程

    从 Vivado 2019.1 版本开始,Vivado 综合引擎就已经可以支持增量流程了。这使用户能够在设计变化较小时减少总的综合运行时间
    发表于 07-21 11:02 1643次阅读

    Vivadoz中增量编译与设计锁定

    关于增量编译所谓增量实现,更严格地讲是增量布局和增量布线。它是在设计改动较小的情形下参考原始设计的布局、布线结果,将其中未改动的模块、引脚和
    发表于 12-20 19:11 6次下载
    Vivadoz中<b class='flag-5'>增量</b><b class='flag-5'>编译</b>与设计锁定

    节省编译时间系列-使用增量实现

    增量实现自从首次获得支持以来,不断升级演变,在此过程中已添加了多项针对性能和编译时间的增强功能。
    的头像 发表于 09-01 09:36 593次阅读
    <b class='flag-5'>节省</b><b class='flag-5'>编译</b><b class='flag-5'>时间</b>系列-使用<b class='flag-5'>增量</b>实现

    Xilinx Vivado使用增量实现

    增量实现自从首次获得支持以来,不断升级演变,在此过程中已添加了多项针对性能和编译时间的增强功能。它解决了实现阶段针对快速迭代的需求,显著节省编译
    的头像 发表于 09-04 10:07 791次阅读
    Xilinx Vivado使用<b class='flag-5'>增量</b>实现

    Vivado那些事儿:节省编译时间系列文章

    虽然想必您知道,在综合或实现阶段,增量运行可以从参考文件中读取和复制信息,但仅在某些阶段中能节省时间,如果网表发生大量更改,其中引用的内容就会减少,编译
    的头像 发表于 10-09 16:48 2622次阅读
    Vivado那些事儿:<b class='flag-5'>节省</b><b class='flag-5'>编译</b><b class='flag-5'>时间</b>系列文章