0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado崩潰調(diào)試的方案和預(yù)防

Xilinx賽靈思官微 ? 來源:djl ? 作者:賽靈思 ? 2019-07-25 15:52 ? 次閱讀

要解決任何綜合崩潰問題,通常應(yīng)該從了解崩潰發(fā)生在綜合的哪個階段著手,以及工具方面是否有任何跡象指向特定的模塊、賦值、聲明或推斷。

在某些情況下會出現(xiàn)日志不足的狀況,并且需要與賽靈思共享 RTL 設(shè)計,才能對問題進(jìn)行進(jìn)一步調(diào)試。

Elaboration 階段中的工具崩潰:

這意味著該工具是在對 RTL 設(shè)計進(jìn)行細(xì)化時崩潰的,綜合日志看上去如下所示:

-------------------------------------------------------------------

Starting RTL Elaboration : Time (s): …

----------------------------------------------------------------

…….

Abnormal program termination (11)

Please check '..hs_err_pidxxxx.log' for details

Parent process (pid xxxxx) has died. This helper process will now exit

OR

----------------------------------------------------------------

Starting RTL Elaboration : Time (s): …

----------------------------------------------------------------

----------------------------------------------------------------

Finished RTL Elaboration : Time (s): cpu = …

----------------------------------------------------------------

RTL Elaboration failed

在綜合日志中,您應(yīng)該會看到類似于“Abnormal program termination (11)”的崩潰相關(guān)消息(盡管可能是在沒有消息的情況下)。這些問題就是崩潰問題。

如果是細(xì)分崩潰問題,在大多數(shù)情況下,問題出在工具中未得到正確處理的 RTL 或 RTL 的某些部分。如果是這類情況,請與我們分享您的工程,以便我們可以在工具中添加修復(fù)程序,避免將來出現(xiàn)這類問題。

要在您這里調(diào)試此類問題,以下步驟可能會有用。這里的目標(biāo)是將崩潰縮小到“設(shè)計模塊”,然后 -> “RTL 文件” -> “某部分 RTL” -> “Line of RTL 代碼行”。

確定發(fā)生問題的 RTL 文件是最艱巨的任務(wù)之一。要找到有問題的模塊,可以使用以下方法:

使用黑匣子的方法

賽靈思

假設(shè)設(shè)計結(jié)構(gòu)及層級如下所示:

Vivado崩潰調(diào)試的方案和預(yù)防

這里的目標(biāo)是使用 black_box 屬性消除其他三個模塊。我們需要假設(shè)一個模塊有問題。假設(shè) A 有問題:對于這種情況,保持 A 模塊完好無損,并將 RTL 文件中的 B、C 和 D 都設(shè)為 black_box:

(* black_box *) module B (

…)

end module

(* black_box *) module C (

…)

end module

(* black_box *) module D (

…)

end module

運行 Synthesis 并檢查工具是否以崩潰。

如果工具已崩潰,則問題要么出在模塊 A,要么出在其子模塊 (A11、A12 ... A21、A22 ......)中。在這種情況下,通過保留 A1 并將 A2 設(shè)為 black_box 繼續(xù)調(diào)試,依此類推。

如果工具沒有崩潰,則嘗試保持 B 模塊完好無損,并將 A、C 和 D 標(biāo)記為 black_box。

這里有一個簡單的示例工程:

Vivado崩潰調(diào)試的方案和預(yù)防

在綜合上述層級時,該工具崩潰并在綜合日志中出現(xiàn)以下錯誤:

….
….
Parameter break bound to: 8'b11110000
An unrecoverable error has occurred, synthesis canceled.
-------------------------------------------------------------------
Finished RTL Elaboration : Time (s): cpu = 0005 ; elapsed = 0007 . Memory (MB): peak = 3278.059 ; gain = 194.688 ; free physical = 20020 ; free virtual = 114523
-------------------------------------------------------------------
RTL Elaboration failed
INFO: [Common 17-83] Releasing license: Synthesis
4 Infos, 5 Warnings, 0 Critical Warnings and 1 Errors encountered.
synth_design failed
ERROR: [Common 17-69] Command failed: Synthesis failed - please see the console or run log file for details
INFO: [Common 17-206] Exiting Vivado at Thu Feb 21 2322 2019...

正如您在日志中可以清楚地看到的那樣,當(dāng)工具試圖對設(shè)計進(jìn)行細(xì)分時發(fā)生了崩潰。

為了調(diào)試這個問題,我們需要開始對模塊進(jìn)行黑盒測試。嘗試多個組合后,當(dāng)使用black_box屬性禁用ps2_to_ascii1時,綜合通過,同樣,當(dāng)僅啟用pas2_to_ascii2時,該工具會崩潰,如下所示:


attribute black_box : string;
attribute black_box of Debounce : component is "yes";
attribute black_box of sinchronizer : component is "yes";
attribute black_box of SIPO : component is "yes";
attribute black_box of Driver : component is "yes";

由于我們已經(jīng)確定了RTL文件/模塊,現(xiàn)在的目標(biāo)是要找到RTL中導(dǎo)致崩潰的部分。這可能是因大循環(huán)迭代、長而復(fù)雜的賦值、復(fù)雜的位片操作或不正確的編碼方式或不支持的結(jié)構(gòu)而導(dǎo)致的。在上述示例中,由于不支持編碼方式,導(dǎo)致工具崩潰:

process(…)
begin
case dummy is
when S1 =>
if rising_edge(clk) then
...
end if;
end if;
when S2 =>
if rising_edge(clk) then
...
end if;
end if;
when S3 =>
if rising_edge(clk) then
...
end if;
end if;
when S4 =>
...
end case;
end process;

**也可以通過使單個模塊成為綜合的“頂層模塊”來查看工具是否會崩潰來找到引起問題的模塊或RTL文件。

例如,當(dāng)pas2_to_ascii2被設(shè)置為頂層模塊時,上述工程會以相同的錯誤崩潰。

跨邊界優(yōu)化階段的崩潰:

什么是跨邊界優(yōu)化?

該工具將基于synth_design命令嘗試在任何給定設(shè)計上執(zhí)行許多優(yōu)化。全局設(shè)置、塊級設(shè)置和屬性可以定義工具是否可以在層級(邊界)內(nèi)或跨層級(邊界)執(zhí)行優(yōu)化。對于Vivado的默認(rèn)設(shè)置,‘-flatten_hierarchy’ 被設(shè)置為‘rebuilt’,該工具會嘗試展平層級并執(zhí)行跨邊界優(yōu)化。

該工具會試圖找到跨邊界的優(yōu)化可能性,并且可能會由于工具錯誤或由于設(shè)計問題而崩潰(在最壞的情況下)。在上述情況下,日志可能如下所示:

--------------------------------------------------------------------------
Start Cross Boundary Optimization
--------------------------------------------------------------------------
Abnormal program termination (6)
Please check 'hs_err_pid5649.log' for details
Parent process (pid 5649) has died. This helper process will now exit

為了防止這類崩潰,一個簡單的解決方法是通過將全局設(shè)置“flatten_hierarchy”更改為“none”來禁用跨邊界優(yōu)化。使用“none”的缺點可能是一個糟糕的QoR,所以可能不適用于所有設(shè)計。

一個更好的方法是通過黑匣方法找到引起問題的層級,然后對該層級使用“KEEP_HIERARCHY/DONT_TOUCH”屬性來禁用該層級內(nèi)/來自該層級的任何跨邊界優(yōu)化。

也有一個可能是,工具在推斷/優(yōu)化 BRAM時崩潰。

在這種情況下,您可以禁用BRAM推斷來看看這是否是真正的原因。要實現(xiàn)這一點,需要將-max_bram選項設(shè)置為‘0’。如果在將‘synth_design -max_bram’設(shè)置為0后工具即完成綜合,那么,崩潰與BRAM推斷有關(guān)。

由于禁用BRAM推斷不是一個可接受的方案,用戶將需要找到BRAM寄存器所在的模塊,并且基于客戶的應(yīng)用情況,可以對存儲器寄存器使用“DONT_TOUCH”屬性以阻止BRAM推斷。

另一種方法是將該模塊標(biāo)記為OOC、同時-max_bram標(biāo)記為'0',并使用默認(rèn)值(即-max_bram "-1")來運行頂層模塊的綜合。

如果您仍然遭遇崩潰,請將您的日志文件(hs_pidxxxx.log and runme.log)和詳細(xì)的設(shè)計信息發(fā)布到賽靈思官方中文論壇。

時序優(yōu)化中的崩潰:

Vivado是一個時序驅(qū)動綜合引擎,對于所有設(shè)計,該工具都會嘗試查看是否有任何可能執(zhí)行的優(yōu)化以滿足設(shè)計的時序要求。在一些情況下,該工具可能會在時序優(yōu)化階段崩潰,日志如下:

-------------------------------------------------------------------
Start Timing Optimization
-------------------------------------------------------------------
Abnormal program termination (11)
Please check 'hs_err_pid15514.log' for details

在這類情況下,首先要做的事是禁用約束(.xdc)文件并運行綜合。如果工具通過綜合操作,那么問題可能與設(shè)計加約束的方式(用戶問題)或工具處理設(shè)計約束的方式(工具問題)有關(guān)。

調(diào)試此類問題的一種方法會是找到導(dǎo)致崩潰的約束/約束集。這可以通過注釋約束然后逐個啟用它們來查看工具何時再次崩潰來完成。一旦您有一組引起失敗的約束,請參考UFDM驗證約束及其用法,然后對其進(jìn)行相應(yīng)的修改以避免這類崩潰問題。

如果您仍然看到崩潰,請將您的日志文件 (hs_pidxxxx.log and runme.log)及詳細(xì)設(shè)計信息發(fā)布到賽靈思中文論壇。

其他重要調(diào)試步驟及其分析結(jié)果:

FSM 推斷崩潰問題:

我們還看到了在綜合FSM時工具崩潰的一些問題,將全局設(shè)置-fsm_extraction設(shè)為“off”有助于解決基于FSM的崩潰問題。

堆棧溢出引起的崩潰問題:

該工具在堆棧的內(nèi)存耗盡時可能會崩潰,而且可能會不報告任何情況。此外,該工具甚至可能不會在運行目錄中生成hs_pidxxxx.日志。對于與堆棧相關(guān)的崩潰,請使用以下命令調(diào)用Vivado工具:

“vivado -stack 2000”

這樣做有助于該工具獲得更多可用來執(zhí)行綜合的堆棧內(nèi)存,并且還可以避免與堆棧相關(guān)的崩潰問題。

Windows操作系統(tǒng)特定的崩潰:

有幾種原因會引起特定于Windows的崩潰,因此要確保您看到的問題不是Windows操作系統(tǒng)的特定問題,請在任一支持的Linux操作系統(tǒng)上運行一次。

OOC (Out of Context)與非OOC流程:

我們已經(jīng)看了一些示例,當(dāng)工程設(shè)置為完全非OOC(沒有IP、沒有RTL模塊為OOC)時,整個設(shè)計會通過綜合。在某些情況下,相反的情況也可行,可通過在OOC模式而不是“Global”模式下生成IP的輸出文件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    806

    瀏覽量

    66241
  • 時序優(yōu)化
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1446
收藏 人收藏

    評論

    相關(guān)推薦

    Vivado 2016.4-2017.2在硬件管理器中崩潰

    和2017.2中,打開硬件管理器后,它們都會100%崩潰,將比特流下載到Zedboard并打開菜單進(jìn)行連接。如果您快速瀏覽菜單,實際上可以在Vivado崩潰之前對其進(jìn)行編程,但在打開硬件管理器并打開連接
    發(fā)表于 11-01 16:10

    Vivado 2013.1在啟動時崩潰

    我在兩臺64位Windows機(jī)器上安裝了2013.1,并且兩者都崩潰了。 Vivado 2013.1窗口在崩潰之前會短暫出現(xiàn)。如果我從命令行運行,我會看到:****** Vivado
    發(fā)表于 11-27 14:30

    Vivado 2015.1崩潰并使用大量內(nèi)存

    我在8位內(nèi)存的Windows 7 64位機(jī)器上使用Vivado。麻煩的是,有時它似乎使用了大量的內(nèi)存;有時大約6GB。有一次它說GUI已經(jīng)耗盡了內(nèi)存,那么計算機(jī)就崩潰了。我真的不明白為什么這應(yīng)該發(fā)生
    發(fā)表于 12-11 11:14

    如何從崩潰vivado安裝中恢復(fù)或如何卸載部分安裝

    嗨,當(dāng)我在Linux系統(tǒng)上安裝Vivado 2017.2時,由于與Vivado安裝無關(guān)的原因,系統(tǒng)在安裝過程中崩潰了。這給我留下了一個帶有“半安裝”vivado的系統(tǒng),一些文件到位,但
    發(fā)表于 12-25 11:10

    取消硬件管理器時Vivado 2015.1崩潰

    從硬件管理器中的最后一個屏幕取消時(請參閱screen_cap.png圖像),Vivado 2015.1崩潰,沒有任何消息。日志文件表明它是Java的問題(請參閱hs_err_pid7988.log
    發(fā)表于 04-03 14:37

    運行綜合時Vivado崩潰

    親愛的大家,我現(xiàn)在正在使用Vivado 2013.3。我試圖將PL結(jié)構(gòu)時鐘從1 MHZ更改為500KHZ。 (1 MHZ下沒問題)但是,Vivado在運行綜合時崩潰了。對我來說減少PL結(jié)構(gòu)時鐘非常重要,因為我打算在一個時鐘周期內(nèi)
    發(fā)表于 03-25 08:40

    Vivado 2015.4崩潰

    你好!我是Vivado的新用戶。我正在使用2015.4版本來為我的碩士學(xué)位創(chuàng)建課程。兩個星期以來,我遇到了使用它的問題,因為我可以創(chuàng)建程序來打開Zybo板上的外圍LED。一旦我嘗試連接外部組件,程序崩潰了。特別是當(dāng)我嘗試使用精心設(shè)計時,它會
    發(fā)表于 04-21 08:49

    Vivado 2015.4隨機(jī)崩潰是為什么?

    我在Windows 7上使用Vivado 2015.4,在Intel i7上使用16 GB RAM。我在筆記本電腦上看到隨機(jī)崩潰。有時我會收到錯誤運行時錯誤R6025-純虛函數(shù)調(diào)用而其他時候Vivado只是關(guān)閉。在任務(wù)管理器/進(jìn)
    發(fā)表于 04-27 07:11

    使用Vivado 2016.3中IBERT調(diào)試的好處及步驟

    了解使用Vivado 2016.3中引入的系統(tǒng)內(nèi)IBERT進(jìn)行調(diào)試的好處,以及將其添加到設(shè)計中所需的步驟。
    的頭像 發(fā)表于 11-20 06:43 ?5727次閱讀

    如何使用Vivado Logic Analyzer與邏輯調(diào)試IP進(jìn)行交互

    了解Vivado中的Logic Debug功能,如何將邏輯調(diào)試IP添加到設(shè)計中,以及如何使用Vivado Logic Analyzer與邏輯調(diào)試IP進(jìn)行交互。
    的頭像 發(fā)表于 11-30 06:22 ?3337次閱讀

    如何使用Vivado Design Suite IP Integrator的調(diào)試AXI接口

    了解如何使用Vivado Design Suite IP Integrator有效地調(diào)試AXI接口。 本視頻介紹了如何使用該工具的好處,所需的調(diào)試步驟和演示。
    的頭像 發(fā)表于 11-29 06:00 ?3977次閱讀

    如何使用Vivado在設(shè)備啟動時進(jìn)行調(diào)試

    了解如何使用Vivado在設(shè)備啟動時及其周??圍進(jìn)行調(diào)試。 你也會學(xué)習(xí) 使用Vivado 2014.1中引入的Trigger at Startup功能來配置和預(yù)先安裝a 調(diào)試核心
    的頭像 發(fā)表于 11-22 07:05 ?4386次閱讀

    Vivado Design Suite用戶指南:編程和調(diào)試

    電子發(fā)燒友網(wǎng)站提供《Vivado Design Suite用戶指南:編程和調(diào)試.pdf》資料免費下載
    發(fā)表于 09-13 14:47 ?0次下載
    <b class='flag-5'>Vivado</b> Design Suite用戶指南:編程和<b class='flag-5'>調(diào)試</b>

    Vivado設(shè)計套件用戶指南:編程和調(diào)試

    電子發(fā)燒友網(wǎng)站提供《Vivado設(shè)計套件用戶指南:編程和調(diào)試.pdf》資料免費下載
    發(fā)表于 09-13 11:37 ?0次下載
    <b class='flag-5'>Vivado</b>設(shè)計套件用戶指南:編程和<b class='flag-5'>調(diào)試</b>

    Vivado Design Suite 用戶指南:編程和調(diào)試

    Vivado Design Suite 用戶指南:編程和調(diào)試》 文檔涵蓋了以下設(shè)計進(jìn)程: 硬件、IP 和平臺開發(fā) : 為硬件平臺創(chuàng)建 PL IP 塊、創(chuàng)建 PL 內(nèi)核、功能仿真以及評估 AMD
    的頭像 發(fā)表于 10-25 16:15 ?839次閱讀
    <b class='flag-5'>Vivado</b> Design Suite 用戶指南:編程和<b class='flag-5'>調(diào)試</b>