缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug

缩短Vivado编译时间(2):使用增量布局布线

Vivado的增量编译包括增量综合和增量布局布线,通常建议二者同时使用,以有效降低编译时间。下图展示了增量编译对整体编译时间的改善力度,可以看到最高加速比达到了2.82
图片[1]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
QoR的角度看,当RTL代码发生较小的改动时,QoR具有较强的一致性和可预测性,如下图所示。ΔWNS表征的是相比于参考流程WNS的回退情况。
图片[2]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug

增量编译

无论是Project模式还是Non-Project模式,都可运行增量编译。具体流程如下图所示。该流程包含了增量综合和增量布局布线。二者均需要参考dcp文件。

图片[3]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
Project模式下,可通过如下图所示方式指定期望的参考dcp或由Vivado自动选择参考dcp。在Non-Project模式下,通过命令read_checkpoint添加选择-incremental指定参考dcp。此命令要在opt_design之后place_design之前执行。

 

 

什么情形下使用增量编译
情形1:如果设计已经基本稳定下来,后续迭代只会有很小部分的RTL代码发生改变
情形2:时序违例,但接近收敛
增量流程会从参考dcp文件中读取布局、布线信息,然后与当前设计的opt_design阶段生成的dcp进行对比,匹配的逻辑单元会被复用,新加的逻辑单元会被优化,同时优化的还有穿过匹配单元和非匹配单元之间的逻辑。因此,如果绝大多数逻辑单元都可被复用或设计时序接近收敛,那么该流程对于编译时间的改善将较为明显。
还有一种情形是设计时序收敛遇到困难,我们只想在一定程度上对设计进行复用。例如:复用设计中的RAM(包括BRAMLUTRAM),在Non-Project模式下,可通过如下命令复用设计中所有RAM。实际上该命令会将RAM的位置信息反标到当前dcp中。在Project模式下,实现同样的功能需要借助相应的Tcl命令,找到所有的RAM及其位置信息,然后将其回写到xdc文件中,以约束形式提供给当前设计。

 

也可只复用设计中的DSP,命令如下。

 

影响增量流程编译时间的几个因素
在使用增量编译之前,我们要考虑以下几个因素。
1. 选择合适的dcp作为参考dcp
我们要确保参考dcpFPGA型号与当前设计一致,同时确保参考dcp与当前设计使用的Vivado版本一致。不同版本生成的dcp会导致检测匹配单元时不够准确,从而无法达到期望的降低编译时间的目标。
2. 确保关键模块尽可能少地发生改变
这对于保证设计的QoR一致性以及时序收敛是非常有必要的。较大的改动会可能会导致编译时间变长。如果无法复用关键路径的布局布线信息,工具就不得不花费更多努力以实现时序收敛。另一方面,如果小的改动引入了新的时序问题(无法从参考dcp中继承到),工具也会消耗更多努力去消除时序违例。此外,要确保opt_designdirective一致,否则会导致cell的名字发生改变,无法实现高复用。
3. 关于自动模式
如果选择自动模式,工具会自动选择或更新参考dcp,但这个前提是参考dcpWNS大于-0.25ns。否则,没有合适的参考dcp,工具就会采用传统流程,这时编译时间与非增量流程基本一致。此时,工具会给出如下信息。
图片[4]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
4. 高复用模式
当设计的复用率达到或超过75%时,Vivado会进入高复用模式。布局布线算法会被优化为尽可能地复用参考dcp的布局布线信息。当时序已收敛且复用率达到95%时,高复用模式将非常有效。例如:很小的改动或者只有debug core发生变化,那么很容易满足高复用要求。在高复用模式下,place_designroute_design有三种可选directive,分别为DefaultExploreQuickDefault目标是保证WNS和参考dcp至少一致,在此前提下,优化编译时间。Explore目标是时序收敛,因此相比于Default会消耗更多时间。Quick则是在布局布线阶段不会调用时序引擎,当复用率达到99.5%时,不会影响设计的QoR
5. 多线程编译
可通过如下命令设计多线程编译,最大值为8
图片[5]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
生成增量编译报告
命令report_incremental_reuse可用于生成增量编译报告。该报告不仅会给出设计的复用情况,同时也会给出编译时间的改善情况,如下图所示。
图片[6]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
图片[7]-缩短Vivado编译时间(2):使用增量布局布线-Xilinx-AMD社区-FPGA CPLD-ChipDebug
提示:如果需要使用增量编译,建议采用高版本的Vivado2020.1或更高版本)。

 

请登录后发表评论

    没有回复内容