目录
一、概述
1.1 增量综合的工作原理
1.2 增量综合的优点
1.3 注意事项
二、设置增量综合
2.1 Write Incremental Synthesis 复选框
2.2 Incremental Synthesis 选择框
2.2.1 自动使用上一次运行的检查点(Automatically use the checkpoint from the previous run)
2.2.2 指定设计检查点(Specify design checkpoint:)
2.2.3 禁用增量编译(Disable incremental compile)
三、日志文件解释
四、重新综合整个设计
一、概述
增量综合(Incremental Synthesis)是一种在 FPGA 设计过程中应用的综合方法,它允许设计者对设计的一部分进行修改和重新综合,而不需要重新综合整个设计。这种方法可以显著减少综合时间,特别是在进行小的修改或迭代开发时。
Vivado 工具从2019.1版本开始,综合引擎支持增量综合(Incremental Synthesis)。在这种流程中,工具会在生成的 DCP(Design Checkpoint)文件中放置增量综合信息,以便在后续运行中引用。它会检测设计何时发生变化,并且只对设计中发生变化的部分重新运行综合。这种流程的主要优点是,对于只有小改动的设计,运行时间会显著减少。此外,当在 RTL 中插入小改动时,设计的质量结果(Quality of Results,QoR)波动较小。
1.1 增量综合的工作原理
-
初始综合:首先,对整个设计进行一次完整的综合,生成一个基线综合结果。
-
修改设计:在设计的开发过程中,对设计的某个部分进行修改。
-
增量综合:只对修改过的部分以及受影响的相关部分重新进行综合,而保持其他部分不变。
-
集成结果:将重新综合的结果与未修改部分的原始综合结果集成,形成最终的综合结果。
1.2 增量综合的优点
- 提高效率:只综合修改过的部分可以显著减少综合时间,提高开发效率。
- 减少资源消耗:减少了综合过程中的资源消耗,如计算资源和存储资源。
- 加速迭代:在迭代开发过程中,可以快速验证修改,加速设计的迭代和优化。
1.3 注意事项
- 依赖管理:需要确保增量综合正确处理设计中的依赖关系,以避免因遗漏相关更改而导致的错误。
- 测试和验证:尽管增量综合可以节省时间,但仍需进行充分的测试和验证,确保修改不会引入新的问题。
- 工具支持:并非所有的综合工具都支持增量综合,需要检查所使用的工具是否提供该功能。
- 设计变化:增量综合最适合那些只有小部分变化的设计。如果设计变化很大,可能需要完整重新综合以获得最佳结果。
- 配置和管理:需要正确配置和管理增量综合流程,以确保正确地识别和处理设计变化。
总之,增量综合是一种有效的方法,可以加速 FPGA 设计过程中的综合步骤,特别适用于大型或复杂设计的迭代开发。
二、设置增量综合
您可以在“设置”对话框的“综合”页面中使用项目设置“增量综合”:
在 Vivado 设计套件中,"Write Incremental Synthesis" 复选框和 "Incremental Synthesis" 选择框是用于配置增量综合设置的关键选项。以下是这些设置的具体作用:
2.1 Write Incremental Synthesis 复选框
当您选中此选项时,Vivado 综合会将增量综合信息写入到综合后的检查点(checkpoint)。这是运行增量综合的必要条件。它使得综合工具能够记录设计的哪些部分在综合过程中已经完成,从而在后续的综合运行中,只对有变动的部分进行处理。
2.2 Incremental Synthesis 选择框
在 Vivado 设计套件的项目模式中,以下是可用于增量综合的选项:
2.2.1 自动使用上一次运行的检查点(Automatically use the checkpoint from the previous run)
这个选项会利用上一次运行的增量信息。使用这个选项时,用户可以继续运行他们的设计,进行小的更改,而无需管理这个流程。使用此选项时,首次运行总是完整综合。
2.2.2 指定设计检查点(Specify design checkpoint:)
这个选项允许你指定来自特定检查点的信息,这个检查点是在启用“Write Incremental Synthesis”功能时创建的。它使得用户可以选择一个特定的起点,用于增量综合的基础。
2.2.3 禁用增量编译(Disable incremental compile)
这个选项告诉工具不使用之前生成的任何增量信息。将会对整个设计进行全新的综合。
选择正确的选项取决于你的综合需求和设计的特定阶段。如果你频繁地进行小修改,并且想要最大化增量综合的效益,自动使用上一次运行的检查点可能是最方便的选择。如果你想要从一个已知的设计状态开始增量综合,可以选择指定设计检查点。如果你需要确保设计的每个部分都是最新综合的,或者在做了大量更改后重新评估整个设计,你可能会选择禁用增量编译。
重要的是要理解这些设置的用途和如何正确配置它们,以便在设计迭代过程中最大限度地利用增量综合的优势,从而节省时间并保持设计的高质量。如果您的设计经常进行小的迭代更改,配置和使用增量综合可以显著加快综合过程。
三、日志文件解释
在进行参考运行(Reference Run)时,工具会在执行综合过程中对设计进行分区。然后,在开始增量运行时,工具会将详细设计(Elaborated Design)与参考运行进行比较,识别出已更改的模块。参考运行中的分区在增量运行中被初始化。包含更改模块的分区以及受其影响的分区都会被标记。基于此,工具将对已标记的分区执行综合。关于设计的哪些部分以及哪些部分被重新综合的信息,可以在增量运行后的日志文件中找到。
这些信息将在“增量综合报告摘要(Incremental Synthesis Report Summary)”中。以下是该报告的一个示例:
- 模块名称:在设计分区内 RTL 被更改的模块。请注意,一个分区下可能包含不止一个模块。
- 复制:所提到模块的实例化总数。复制数取决于直接实例化的数量。
实例:在 elaboration 阶段之前“rtlRam”下的单元/原语数。在 elaboration 和综合阶段之后,这个数字可能会有所变更。
变更百分比:RTL 变更/未变更设计总数
整个设计的大小:整个设计中的单元总数(包括已更改和未更改的设计)
再综合设计的大小:请注意,如果属于分区的某一个模块中有任何更改,工具即会重新综合整个分区。
通过解读日志文件中的这些信息,设计者可以了解综合过程中的哪些部分受到了变化的影响,这有助于他们评估增量综合的效果,并决定是否需要进一步的优化或调整。日志文件是了解综合过程的关键工具,它提供了验证和调试设计所需的详细信息。
四、重新综合整个设计
重新综合整个设计可能会在特定情况或针对某些类型的设计时触发。当发生以下条件之一时,可能会导致工具执行全面重新综合:
- 顶层层次结构发生变化时:如果在设计的最顶层进行了修改,这通常会影响整个设计,因此触发全面重新综合。
- 综合设置发生变化时:综合过程中使用的任何设置或优化选项的更改都可能需要全新的综合,以确保这些更改被正确应用。
- 小型设计包含的分区较少时:如果设计较小,分区数量有限,即使只有几个分区发生变化,也可能需要对整个设计进行重新综合。
- 超过 50% 的分区有变化时:如果变化影响到了设计的大部分分区,那么执行增量综合可能不再有效,因此需要全面重新综合。
此外,异常大的 XDC 文件也可能触发对整个设计的重新综合。在未来的版本中,这一点可能会有所改进。
需要注意的是,尽管 -mode out_of_context
是一个综合设置,它不会触发全面的重新综合。这意味着,如果你在特定模块上使用了“脱离上下文”模式,它不会导致整个设计需要重新综合,这通常用于IP核或模块级的单独综合。
在管理和运行综合流程时,了解这些触发全面重新综合的条件是很重要的,以确保综合过程尽可能高效,同时也为了在设计迭代过程中合理安排时间和资源。