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 有效:

1.png

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

2.png

定位repeatablity的问题

  1. 最常见的问题就是post-route结果是不一样的,我们可以通过下面的方式来确认哪一步出现是不一致。
  2. Vivado在每个实现命令的中间阶段都会在日志中报告一个checksum,这是基于设计网表和物理数据的签名。
  3. 可以比较不同runs之间的校验和,校验和不匹配有助于确定结果在何处不一致。

3.png

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

4.png

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

set_param general.maxThreads 1

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

最新文章

最新文章