很多FPGA工程師都有這種困惑,Vivado每次編譯的結(jié)果都一樣嗎?
在AMD官網(wǎng)上,有這樣一個(gè)帖子:
Are Vivado results repeatable for identical tool inputs?
對(duì)大多數(shù)情況來(lái)說(shuō),Vivado編譯的結(jié)果是一樣的,但要保證下面的輸入是一樣的:
Design sources
Constraints
Tcl scripts and command sequences
Tool and command options
Vivado software version
Operating Systems
不同操作系統(tǒng)之間編譯結(jié)果不能保證是相同的,尤其是Linux和Windows。
但下面的這些選項(xiàng)不能保證編譯結(jié)果相同:
route_design -ultrathreads選項(xiàng)
plac_design -ultrathreads選項(xiàng)
使用一個(gè)routed design dcp,而且又重新跑了post-route和phys_opt_design
我們經(jīng)常會(huì)設(shè)置set_param general.maxThreads,這個(gè)也是在使用ultrathreads選項(xiàng)時(shí)才會(huì)影響編譯的repeatability。
其中place_design的ultrathreads只對(duì)UltraScale+ SSI 和vu440 有效:
image-20240610145255204
route_design的ultrathreads解釋如下,沒(méi)有規(guī)定器件。
image-20240610145242925
定位repeatablity的問(wèn)題
最常見(jiàn)的問(wèn)題就是post-route結(jié)果是不一樣的,我們可以通過(guò)下面的方式來(lái)確認(rèn)哪一步出現(xiàn)是不一致。
Vivado在每個(gè)實(shí)現(xiàn)命令的中間階段都會(huì)在日志中報(bào)告一個(gè)checksum,這是基于設(shè)計(jì)網(wǎng)表和物理數(shù)據(jù)的簽名。
可以比較不同runs之間的校驗(yàn)和,校驗(yàn)和不匹配有助于確定結(jié)果在何處不一致。
image-20240610145309593
Checkpoints vs in-memory runs
對(duì)比下圖中的兩個(gè)流程,在place_design后,先存成dcp,另一個(gè)flow中是直接打開(kāi)當(dāng)前的dcp并進(jìn)行后續(xù)的編譯流程,這樣的話,在open_checkpoint后,這兩個(gè)網(wǎng)表的checksum可能會(huì)不同,但經(jīng)過(guò)Phys_opt_design后,他們網(wǎng)表的checksum還是會(huì)一樣的。
image-20240610145318561
總結(jié)一下,如果想讓vivado的結(jié)果repeatablity,我們就只使用單線程編譯:
set_paramgeneral.maxThreads1
而且保證輸入的源文件、腳本、約束都是相同的。同時(shí)硬件環(huán)境也要一樣,這樣才能最大程度的保證結(jié)果的repeatablity。
-
編譯
+關(guān)注
關(guān)注
0文章
674瀏覽量
33498 -
Vivado
+關(guān)注
關(guān)注
19文章
821瀏覽量
67838
原文標(biāo)題:Vivado每次的編譯結(jié)果是一樣的嗎?
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FPGA Verilog HDL語(yǔ)法之編譯預(yù)處理

STM32CubeIDE編譯設(shè)置是否有像keil一樣有編譯后執(zhí)行Bat腳本的功能和設(shè)置?
ADS1100每次復(fù)位ADS采集到數(shù)據(jù)都不一樣,是時(shí)序問(wèn)題嗎?
用單片機(jī)的SPI控制ADS1191,發(fā)送命令寫(xiě)寄存器后讀取相應(yīng)寄存器的值就不一樣,而且每次讀出來(lái)的都不一樣,為什么?
ldc1000的spi通信,為什么在這種情況下都寫(xiě)不進(jìn)數(shù)據(jù),讀數(shù)據(jù)也每次不一樣?
每次配置DAC5682Z寄存器的參數(shù)都一樣,但是頻譜測(cè)得輸出信號(hào)卻不同,為什么?
AFE4400讀取6個(gè)寄存器值,每次讀取的值都是一樣的怎么解決?
ads1243每次重新上電ad采集值不一樣是怎么回事?
ADS1247模擬SPI讀取寄存器數(shù)據(jù),讀取的數(shù)據(jù)每次都不一樣,為什么?
淺談Vivado編譯時(shí)間

評(píng)論