很多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_paramgeneral.maxThreads1
而且保證輸入的源文件、腳本、約束都是相同的。同時硬件環境也要一樣,這樣才能最大程度的保證結果的repeatablity。
-
編譯
+關注
關注
0文章
676瀏覽量
33785 -
Vivado
+關注
關注
19文章
831瀏覽量
68299
原文標題:Vivado每次的編譯結果是一樣的嗎?
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
如何使用One Spin檢查AMD Vivado Design Suite Synth的結果

STM32CubeIDE編譯設置是否有像keil一樣有編譯后執行Bat腳本的功能和設置?
用單片機的SPI控制ADS1191,發送命令寫寄存器后讀取相應寄存器的值就不一樣,而且每次讀出來的都不一樣,為什么?
ldc1000的spi通信,為什么在這種情況下都寫不進數據,讀數據也每次不一樣?
每次配置DAC5682Z寄存器的參數都一樣,但是頻譜測得輸出信號卻不同,為什么?
AFE4400讀取6個寄存器值,每次讀取的值都是一樣的怎么解決?
ads1243每次重新上電ad采集值不一樣是怎么回事?
ADS1247模擬SPI讀取寄存器數據,讀取的數據每次都不一樣,為什么?
做個數字示波器,結果都自激了,為什么?
淺談Vivado編譯時間

評論