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

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

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

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

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

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

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

Elaboration 階段中的工具崩潰:

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

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

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)該會(huì)看到類似于“Abnormal program termination (11)”的崩潰相關(guān)消息(盡管可能是在沒有消息的情況下)。這些問題就是崩潰問題。

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

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

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

使用黑匣子的方法

賽靈思

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

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

這里的目標(biāo)是使用 black_box 屬性消除其他三個(gè)模塊。我們需要假設(shè)一個(gè)模塊有問題。假設(shè) A 有問題:對(duì)于這種情況,保持 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

運(yùn)行 Synthesis 并檢查工具是否以崩潰。

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

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

這里有一個(gè)簡(jiǎn)單的示例工程:

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

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

….
….
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)工具試圖對(duì)設(shè)計(jì)進(jìn)行細(xì)分時(shí)發(fā)生了崩潰。

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


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)迭代、長(zhǎng)而復(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;

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

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

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

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

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

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

--------------------------------------------------------------------------
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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

FSM 推斷崩潰問題:

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

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

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

“vivado -stack 2000”

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

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

有幾種原因會(huì)引起特定于Windows的崩潰,因此要確保您看到的問題不是Windows操作系統(tǒng)的特定問題,請(qǐng)?jiān)谌我恢С值?a target="_blank">Linux操作系統(tǒng)上運(yùn)行一次。

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

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

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

    關(guān)注

    19

    文章

    803

    瀏覽量

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

    關(guān)注

    0

    文章

    4

    瀏覽量

    1445
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    Vivado 2013.1在啟動(dòng)時(shí)崩潰

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

    Vivado 2015.1崩潰并使用大量?jī)?nèi)存

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

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

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

    取消硬件管理器時(shí)Vivado 2015.1崩潰

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

    運(yùn)行綜合時(shí)Vivado崩潰

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

    Vivado 2015.4崩潰

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

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

    我在Windows 7上使用Vivado 2015.4,在Intel i7上使用16 GB RAM。我在筆記本電腦上看到隨機(jī)崩潰。有時(shí)我會(huì)收到錯(cuò)誤運(yùn)行時(shí)錯(cuò)誤R6025-純虛函數(shù)調(diào)用而其他時(shí)候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è)計(jì)中所需的步驟。
    的頭像 發(fā)表于 11-20 06:43 ?5700次閱讀

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

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

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

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

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

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

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

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

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

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

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

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