缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug

缩短Vivado编译时间(3):使用增量综合

2019.1版本开始,Vivado引入了增量综合,这有助于工程师进一步降低综合运行时间。该流程既可采用图形界面方式进行也可采用Tcl命令完成。在阐述增量综合之前,我们先介绍几个重要的概念以便更好的理解这一流程。
并行综合
当设计超过10K个模块且至少可以被分割为5RTL分区时,在综合阶段Vivado会采用并行综合的方式。这些小的RTL分区会被独立处理从而降低运行时间,显然设计越大从中受益越多。用户可从综合的日志文件中查看是否使用了并行综合,如下图所示信息。
图片[1]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
RTL分区
Vivado会把大的设计分割为一些小的RTL分区以便并行综合。这些分区会记录在综合的日志文件中。综合日志文件的位置为:.runs/synth_1/runme.log。如下图所示。
图片[2]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
对于增量综合,工具会根据这些分区来判断哪些分区需要重新综合,哪些分区可以复用原有综合结果。如果设计中有≥50%的分区发生了改变,那么工具会采用传统综合方式而非增量综合方式。下图显示了增量综合的流程,图中左侧显示了增量综合流程输入/输出文件,右侧显示了相应的Tcl命令。
图片[3]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug

增量综合时,一个重要环节是提供参考dcp,如下图所示。Vivado允许用户自行指定参考dcp,同时也可以自动选取参考dcp

图片[4]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
图片[5]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
我们看一个采用增量综合的案例:
在综合日志文件中我们会看到设计分区的相关信息,如下图所示。
图片[6]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
在综合日志文件的结尾,可以看到运行时间,如下图所示。这样我们获得了参考dcp
图片[7]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
下面我们对RTL代码进行修改,然后执行增量综合。增量综合报告如下图所示。可以看到模块rtlRam发生了改变,这个模块被实例化了1次(Replication),该模块下有66cells
图片[8]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
再看采用增量综合时的运行时间,如下图所示。
图片[9]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug

 

 

对于增量综合,我们再看一些统计数据。如下图所示,可以看到最大加速比可达3.85
图片[10]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
图片[11]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
影响增量综合的几个因素
1. 设计的顶层不能发生改变
2. 全局综合设置选项
增量综合时的全局综合设置选项要与初始综合时的设置保持一致。如果设计顶层需要底层保持层次,可通过模块化综合方式BLOCK.SYNTH实现。
3. 选择合适的参考dcp
参考dcp需要与当前增量综合所对应的芯片型号完全一致,同时确保用到的Vivado版本完全一致。
4. 时序约束
参考dcp需要与当前增量综合所用到的综合阶段的时序约束完全一致。
5. 设计改变
尽可能使设计发生较小的改变,同时尽可能使这些改变发生在模块内。如果模块对输入/输出使用了寄存器,可阻止边界优化,如下图所示。图中G1G2因边界优化导致两者之间的路径发生了改变,这样G1G2都需要重新综合,此时,可通过模块化综合方式阻止边界优化。
图片[12]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug
图片[13]-缩短Vivado编译时间(3):使用增量综合-Xilinx-AMD社区-FPGA CPLD-ChipDebug

如果设计中某个模块被实例化了多次,而这些改变就发生在这个模块内,那么就要考虑总体的改变量。

 

 

 

请登录后发表评论

    没有回复内容