每次Vivado编译的结果都一样吗

描述

很多FPGA工程师都有这种困惑,Vivado每次编译的结果都一样吗?

在AMD官网上,有这样一个帖子:

Are Vivado results repeatable for identical tool inputs?

对大多数情况来说,Vivado编译的结果是一样的,但要保证下面的输入是一样的:

Design sources

Constraints

Tcl scripts and command sequences

Tool and command options

Vivado software version

Operating Systems

不同操作系统之间编译结果不能保证是相同的,尤其是Linux和Windows。

但下面的这些选项不能保证编译结果相同:

route_design -ultrathreads选项

plac_design -ultrathreads选项

使用一个routed design dcp,而且又重新跑了post-route和phys_opt_design

我们经常会设置set_param general.maxThreads,这个也是在使用ultrathreads选项时才会影响编译的repeatability。

其中place_design的ultrathreads只对UltraScale+ SSI 和vu440 有效:

编译

image-20240610145255204

route_design的ultrathreads解释如下,没有规定器件。

编译

image-20240610145242925

定位repeatablity的问题

最常见的问题就是post-route结果是不一样的,我们可以通过下面的方式来确认哪一步出现是不一致。

Vivado在每个实现命令的中间阶段都会在日志中报告一个checksum,这是基于设计网表和物理数据的签名。

可以比较不同runs之间的校验和,校验和不匹配有助于确定结果在何处不一致。

编译

image-20240610145309593

Checkpoints vs in-memory runs

对比下图中的两个流程,在place_design后,先存成dcp,另一个flow中是直接打开当前的dcp并进行后续的编译流程,这样的话,在open_checkpoint后,这两个网表的checksum可能会不同,但经过Phys_opt_design后,他们网表的checksum还是会一样的。

编译

image-20240610145318561

总结一下,如果想让vivado的结果repeatablity,我们就只使用单线程编译:

set_param general.maxThreads 1

而且保证输入的源文件、脚本、约束都是相同的。同时硬件环境也要一样,这样才能最大程度的保证结果的repeatablity。

 

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

全部0条评论

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

×
20
完善资料,
赚取积分