Incremental Place and Route(增量布局和布线)的核心理念是,当项目的某些部分发生变化时,只对这些变化的部分及其相关的依赖项进行重新布局和布线,而不是对整个项目进行全面的重新处理。这种增量式的处理方法可以显著提高开发效率,减少不必要的编译和集成时间。
一、运行增量布局和布线
Vivado 读取参考检查点之后,会执行以下操作:
• 对增量设计自动执行与参考运行中相同的物理优化。
• 比较增量设计中的网表与参考设计,以识别匹配的单元和网络。
• 重用参考设计检查点中的布局,将匹配的单元放置在增量设计中。
• 布线重用是基于每个负载引脚来路由匹配的网络的。如果由于网表更改导致负载引脚消失,则其布线将被丢弃,否则将重用。因此,可能会存在部分重用的布线。
增量布局和增量布线可能会丢弃单元布局和网络布线而不是重用它们,如果这样做有助于改善网表的布线能力或有助于保持与参考设计相当的性能。
在增量布局完成后,参考设计与当前设计之间不匹配的设计对象将被布局;在增量布线完成后,这些对象将被布线。
需要注意的是,虽然增量实现可以显著提高设计迭代的效率,但它仍然是一个复杂的过程,需要仔细管理以确保设计的一致性和性能。
二、影响运行时间改进的因素
• 时序关键区域的变化量。如果关键路径的布局和布线无法重用,则需要更多的努力来保持时序。此外,如果小的设计更改引入了参考设计中不存在的新时序问题,那么可能需要更高的努力和运行时间,并且设计可能无法满足时序要求。
• 布局和布线运行时间的初始化部分。在短暂的布局和布线运行中,Vivado布局器和路由器的初始化开销可能会消除增量布局和布线过程带来的任何增益。对于运行时间较长的设计,初始化成为运行时间的一小部分。
了解这些因素有助于用户在实施增量流程时做出更明智的决策,以最大限度地提高运行时间的改进效果。通过仔细分析这些因素,用户可以优化流程配置,减少不必要的计算,从而加快设计迭代的速度并提高整体效率。
三、read_checkpoint -incremental
在当前设计加载后,使用read_checkpoint -incremental 命令加载参考设计的检查点。-incremental选项启用了增量编译设计流程,用于后续的布局和布线操作。
1、增量实现控制
如果除了-incremental之外没有指定其他命令参数,工具将尽可能重用参考检查点中的信息。然而,
read_checkpoint -incremental命令可以接受一些参数,允许用户控制哪些信息被重用,哪些不被重用。
①-auto_incremental 选项
启用了在“自动增量”中描述的自动增量流程。
②-reuse_objects 选项
-reuse_objects
接收cells、时钟区域或SLR(Slice Logic Region)作为参数。
当指定cells时,可以使用get_cells命令。在使用get_cells时,可以指定hierarchical或leaf cells,并在使用-filter开关时指定单元类型。
当指定时钟区域(使用get_clock_regions)或SLR(使用get_slrs)进行重用时,如果它们存在于增量运行中,则参考检查点中的该区域中的cells将被重用。
当指定任何参数时,net的重用是基于已识别为重用的cells来推断的。
通过适当地使用这些选项,可以精确地控制增量编译过程中哪些部分的信息被重用,哪些部分被重新计算,从而优化编译时间和设计质量。然而,需要注意的是,不恰当的增量实现控制可能会导致设计不一致或性能下降,因此应该谨慎使用。在设计迭代过程中,定期验证设计的完整性和性能是很重要的。
③-fix_objects 选项
-fix_objects
可以用来锁定cells的子集。这些cells不会被增量布局和布线工具修改。
仅对匹配且被识别为cells重用的单元有效。如果没有指定 -reuse_objects,那么它将作用于整个设计空间;如果指定了 -reuse_objects,则它仅作用于相关联的cells。
示例
以下是 -fix_objects 和相关选项的使用示例:
• 仅重用并固定 Block Memory 的布局:
read_checkpoint -incremental routed.dcp -reuse_objects [all_rams] -fix_objects [all_rams]
• 仅重用并固定 DSP 的布局:
read_checkpoint -incremental routed.dcp -reuse_objects [all_dsps] -fix_objects [all_dsps]
• 重用 Block Memory 和 DSP 的布局,并固定所有指定为重用的单元的布局:read_checkpoint -incremental routed.dcp -reuse_objects [all_rams] \ -reuse_objects [all_dsps] -fix_reuse [current_design]
• 重用指定层次及其以下的所有单元,并允许工具在处理关键区域的变化时具有一定的灵活性(注意:这里 -fix_objects 应该是 -fix_reuse,因为 -fix_objects 用来锁定特定单元,而 -fix_reuse 用来锁定所有重用的单元):read_checkpoint -incremental routed.dcp \ -reuse_objects [get_cells <cell_name>] -fix_reuse [get_cells <cell_name>]
在最后一个示例中,[get_cells <cell_name>] 应该替换为实际的cells名称或用于选择特定cells集的命令。
请注意,-fix_objects 和 -fix_reuse 的使用要谨慎,因为它们会阻止工具对指定的单元进行任何修改。这可能会导致在某些情况下无法优化布局和布线,或者甚至导致设计失败。因此,在决定使用这些选项时,应该确保它们符合设计目标和约束。
2、使用 report_incremental_reuse
report_incremental_reuse 命令在 read_checkpoint -incremental 使用后的流程的任何阶段都可用。这个报告允许用户比较参考设计和当前设计运行之间的以下方面:
• 检查当前运行中cells、net、I/O和引脚的重用情况
• 运行时间
• 流程每个阶段的时序WNS(最差负时序裕量)
• 工具选项
• 工具版本
• Iphys_opt_design replaying优化
• 应用于增量流程的QoR(质量优化结果)建议
通过检查cells重用和上述其他因素,用户可以确定增量流程的有效性。如果判断流程无效,用户通常会更新检查点到设计的较新版本或调整工具流程。
该报告分为七个部分:
①Flow Summary
报告了当前整个增量流程的一般信息。它可能包含关于流程的开始和结束时间、使用的工具版本、以及可能涉及的主要步骤或阶段的概述。
②Reuse Summary
提供了关于重用的cells、net、引脚和端口的概述。它会显示重用了哪些元素,以及它们各自的重用程度,这有助于用户了解增量编译中哪些部分被有效地重用了。
③. Reference Checkpoint Information
包含关于参考检查点的信息。例如:
• 生成它的Vivado版本
• 实现的阶段
• 记录的最差负时序裕量(WNS)和最差正时序裕量(WHS)
• 参考运行和增量运行的速度文件版本信息
这些信息有助于了解参考设计的状态以及它与当前增量设计之间的比较基础。
④ Comparison with Reference Run
包含了与参考运行进行比较的有用指标。
• 运行时间信息
• 流程每个阶段的最差负时序裕量(WNS)
• 流程每个阶段的工具选项
通过比较这些指标,用户可以了解增量流程是否有效地利用了之前的工作,以及它在哪些方面可能还有改进的空间。
⑤ Optimization Comparison With Reference Run
包含了从参考DCP(Design Checkpoint)中检索到的iphys_opt_design重放信息,以及在当前增量流程中生成和应用的RQS(质量优化结果)建议。这些信息有助于用户了解优化策略在增量流程中的应用效果,以及这些策略如何影响最终的设计质量。
⑥Command Comparison with Reference Run
包含了用于流程命令比较的已执行命令。通过比较参考运行和增量运行中的命令,用户可以了解哪些命令被重复执行,哪些是新添加的,从而更深入地了解增量流程的执行细节。
⑦Non-reuse Information
包含了关于哪些部分没有被重用以及原因的度量指标。这些信息有助于用户识别流程中可能存在的问题,从而采取相应的措施来提高重用率,进而优化增量流程。