浅谈Vivado编译时间

描述

随着FPGA规模的增大,设计复杂度的增加,Vivado编译时间成为一个不可回避的话题。尤其是一些基于SSI芯片的设计,如VU9P/VU13P/VU19P等,布局布线时间更是显著增加。当然,对于一些设计而言,十几个小时是合理的。但我们依然试图分析设计存在的问题以期缩短编译时间。

通常,综合(Synthesis)所消耗的时间比布局布线要短,但从代码风格角度而言,我们也能找到一些端倪来缩短综合所用的时间。如下图所示代码,左右两侧功能是一致的,区别在于左侧采用了for generate语句,for循环里嵌套了always模块;右侧实际上不需要generate语句,always里直接使用了for循环(注意:实际上,这里不需要for循环,只是为了说明for循环对编译时间的影响)。单独对左侧模块采用OOC综合,耗时2分钟;而右侧耗时1分钟。因此,我们在用for循环时要谨慎一些。

芯片

Vivado还支持多线程可进一步缩短编译时间,这需要通过如下的Tcl脚本进行设置。综合阶段,Vivado可支持的最大线程数为4。布局布线阶段,可支持的最大线程数为8(Windows系统默认值为2,Linux系统默认值为8)。实际上,DRC检查、静态时序分析和物理优化也支持多线程,最大线程数为8。我们可以在log文件中查看到当前使用的线程数。

set_param general.maxThreads 4

芯片

在Vivado Design Run窗口,我们可以查看到整个设计综合和实现的耗时,如下图所示。对于实现各个子阶段的耗时就需要在log文件中查看。只需要搜索关键字Ending,如下图所示。可以看到opt_design耗时3分钟,place_design耗时1小时45分钟,phys_opt_design耗时20分钟,route_design耗时3小时27分钟。

芯片

芯片

Vivado还提供了报告策略,如下图所示。本身生成报告也是需要时间的,因此可根据设计需要选择报告策略,去除不必要的报告以节省时间。同时,对于已确定的报告策略仍然可以进一步编辑,增加期望的报告或者删除不需要的报告。这可通过Report窗口中的Add Report或Remove Report/Disable Report完成。

芯片

芯片

通常,布线是耗时最长的部分,为此Vivado对route_design提供了选项-ultrathreads,其目的是使布线器更快的运行,但是以牺牲结果的一致性为代价的。

从策略角度看,如果仅仅是为了评估资源利用率,那么Implementation Strategy可以选择Flow_Quick。如果时序裕量比较大,那么也可以选择Flow_RuntimeOptimized,该策略是以牺牲性能为代价来缩短编译时间的。

芯片

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分