Vivado的增量编译包括增量综合和增量布局布线,通常建议二者同时使用,以有效降低编译时间。下图展示了增量编译对整体编译时间的改善力度,可以看到最高加速比达到了2.82。
从QoR的角度看,当RTL代码发生较小的改动时,QoR具有较强的一致性和可预测性,如下图所示。ΔWNS表征的是相比于参考流程WNS的回退情况。
增量编译
无论是Project模式还是Non-Project模式,都可运行增量编译。具体流程如下图所示。该流程包含了增量综合和增量布局布线。二者均需要参考dcp文件。
在Project模式下,可通过如下图所示方式指定期望的参考dcp或由Vivado自动选择参考dcp。在Non-Project模式下,通过命令read_checkpoint添加选择-incremental指定参考dcp。此命令要在opt_design之后place_design之前执行。
情形1:如果设计已经基本稳定下来,后续迭代只会有很小部分的RTL代码发生改变
增量流程会从参考dcp文件中读取布局、布线信息,然后与当前设计的opt_design阶段生成的dcp进行对比,匹配的逻辑单元会被复用,新加的逻辑单元会被优化,同时优化的还有穿过匹配单元和非匹配单元之间的逻辑。因此,如果绝大多数逻辑单元都可被复用或设计时序接近收敛,那么该流程对于编译时间的改善将较为明显。
还有一种情形是设计时序收敛遇到困难,我们只想在一定程度上对设计进行复用。例如:复用设计中的RAM(包括BRAM和LUTRAM),在Non-Project模式下,可通过如下命令复用设计中所有RAM。实际上该命令会将RAM的位置信息反标到当前dcp中。在Project模式下,实现同样的功能需要借助相应的Tcl命令,找到所有的RAM及其位置信息,然后将其回写到xdc文件中,以约束形式提供给当前设计。
我们要确保参考dcp的FPGA型号与当前设计一致,同时确保参考dcp与当前设计使用的Vivado版本一致。不同版本生成的dcp会导致检测匹配单元时不够准确,从而无法达到期望的降低编译时间的目标。
这对于保证设计的QoR一致性以及时序收敛是非常有必要的。较大的改动会可能会导致编译时间变长。如果无法复用关键路径的布局布线信息,工具就不得不花费更多努力以实现时序收敛。另一方面,如果小的改动引入了新的时序问题(无法从参考dcp中继承到),工具也会消耗更多努力去消除时序违例。此外,要确保opt_design的directive一致,否则会导致cell的名字发生改变,无法实现高复用。
如果选择自动模式,工具会自动选择或更新参考dcp,但这个前提是参考dcp的WNS大于-0.25ns。否则,没有合适的参考dcp,工具就会采用传统流程,这时编译时间与非增量流程基本一致。此时,工具会给出如下信息。
当设计的复用率达到或超过75%时,Vivado会进入高复用模式。布局布线算法会被优化为尽可能地复用参考dcp的布局布线信息。当时序已收敛且复用率达到95%时,高复用模式将非常有效。例如:很小的改动或者只有debug core发生变化,那么很容易满足高复用要求。在高复用模式下,place_design和route_design有三种可选directive,分别为Default、Explore和Quick。Default目标是保证WNS和参考dcp至少一致,在此前提下,优化编译时间。Explore目标是时序收敛,因此相比于Default会消耗更多时间。Quick则是在布局布线阶段不会调用时序引擎,当复用率达到99.5%时,不会影响设计的QoR。
命令report_incremental_reuse可用于生成增量编译报告。该报告不仅会给出设计的复用情况,同时也会给出编译时间的改善情况,如下图所示。
提示:如果需要使用增量编译,建议采用高版本的Vivado(2020.1或更高版本)。
没有回复内容