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

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

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

三個對分析編譯時間非常有效的Tcl腳本

FPGA技術(shù)驛站 ? 來源:FPGA技術(shù)驛站 ? 2023-02-10 15:00 ? 次閱讀

針對特定的設(shè)計,就編譯時間而言,我們要分析時間都消耗在哪些環(huán)節(jié)從而有針對性的縮短編譯時間。通常,時間可能花費(fèi)在加載約束上,也可能花費(fèi)在某個子步驟如布局。有時面對的情況是同一設(shè)計在不同Vivado版本上運(yùn)行時間出現(xiàn)較大差異。

report_constraints

我們先來介紹第一個命令:report_constraints。運(yùn)行該命令之前需要先在Vivado Tcl Console中執(zhí)行如下命令:

source report_constraints.tcl

同時最好將該腳本與待分析的dcp放置在同一目錄下,這樣在讀取dcp時就只用提供當(dāng)前工作目錄即可。另外,需要注意的是report_constraints只能在Linux系統(tǒng)下運(yùn)行。report_constraints可報告出設(shè)計中所用到的約束的種類(包括時序約束也包括非時序約束)、數(shù)量以及有效性。

通常情況下,Xilinx建議采用如下順序描述時序約束。除第10條set_bus_skew之外,約束的優(yōu)先級也是依此順序的,即1號優(yōu)先級最低,9號優(yōu)先級最高。因此,不合理的順序以及不合理的描述方式會導(dǎo)致一些約束被覆蓋,從而造成設(shè)計“假收斂”的現(xiàn)象。

poYBAGPl6-KAVvYYAABv_DOGcGU688.jpg

對于一個復(fù)雜的設(shè)計,除了用戶約束文件外,還可能會有IP的約束文件,這些約束文件可能在用戶約束文件之前被調(diào)用(約束文件屬性PROCESSING_ORDER為EARLY),也可能在用戶約束文件之后被調(diào)用(約束文件屬性PROCESSING_ORDER為LATE)。report_constraints可報告出所有約束文件所包含的約束。

案例1:只報告上述10種時序約束的個數(shù)

如下圖所示(使用report_constraints時需要在添加作用域即tb::)。該報告第1列顯示約束類型,第2列顯示需要在用戶約束之前調(diào)用的約束個數(shù),第3列顯示用戶約束的個數(shù),第4列顯示需要在用戶之后調(diào)用的約束個數(shù),第5列顯示和開發(fā)板相關(guān)的約束個數(shù)(當(dāng)Part選擇為開發(fā)板時),最后一列顯示OOC綜合時用到的約束個數(shù)。

pYYBAGPl7A2AEyXxAACmFGgfqhk078.jpg

案例2
:報告所有約束及約束用到的命令

通過添加-all選項,report_constratins可報告所有約束(時序約束+非時序約束)的數(shù)目以及這些約束用到的Tcl命令的個數(shù),如下圖所示。

在Vivado Commands Summary中,可以看到get_cells、get_pins、get_ports以及set_property等命令的使用情況。

pYYBAGPl7CWAMmboAAEzkgq53Es078.jpg

案例3
:報告約束的具體信息

添加選項-details和-verbose,report_constratins可報告約束的詳細(xì)信息,如下圖所示。
poYBAGPl7DmAOfAxAAIgD5m09W8916.jpg

案例4:報告時序畫像

選項-timing_graph和-verbose可用于報告時序畫像,如下圖所示。當(dāng)Status列由Invalidatetiming變?yōu)镽equired valid timing時,Estimatedupdates加1,這個值越小越好,根據(jù)此值可判斷約束描述的順序是否是最優(yōu)的。

poYBAGPl7E-AcXm1AAF5_IVfvYU759.jpg

profiler

對Vivado編譯時間進(jìn)行調(diào)試時,命令profiler可幫助用戶查看特定操作的運(yùn)行時間,分析指定命令的調(diào)用次數(shù),從而確定整體運(yùn)行時間的瓶頸。profiler命令的具體使用方法如下所示:

profiler add *

profiler start

open_checkpoint top_routed.dcp

profiler stop

profiler summary

profiler summary -log profiler.log

profiler summary -log profiler.csv -csv

生成的csv文件可用excel打開,第一部分內(nèi)容如下。第一列顯示了所執(zhí)行的命令,倒數(shù)第2列(ncalls)顯示了該命令被調(diào)用的次數(shù),最后一列顯示了執(zhí)行該命令所耗時間占整體運(yùn)行時間的百分比。

pYYBAGPl7G6AUf6LAAJocEoytlk536.jpg

profiler生成報告還能顯示前50條最耗時的命令,如下圖所示。可用看到除open_checkpoint之外,get_clocks最耗時。

pYYBAGPl7ISATEPFAALexMBl-ck872.jpg

報告的第三部分可以看到設(shè)計中Tcl命令的使用情況,如下圖所示。圖中commands列(最后一列)為Tcl命令,size列為該命令返回的對象的個數(shù),count列為返回同樣個數(shù)的命令的個數(shù),total列等于size與count的乘積。以第122行g(shù)et_cells為例,返回120個對象的get_cells有24個,所以總對象個數(shù)為120x24即2880。

poYBAGPl7JqAJL7BAAFXC_4eAf0485.jpg

profiler命令還可用于查看指定命令的運(yùn)行時間,這對于發(fā)現(xiàn)約束中哪些命令最為耗時很有幫助,使用方法如下所示。從生成報告中可以看到get_cells命令共耗時32.984ms。

profiler start

set cells [get_cells

-hier -filter"REF_NAME==FDRE"]

profiler stop

profiler summary

pYYBAGPl7NaAD70-AAF0ij7LGXo057.jpg

vivadoRuntime

命令vivadoRuntime可用于查看不同策略下每個階段所消耗的時間,使用方法如下圖所示。每個Elapsed列對應(yīng)1個策略(也就是1個DesignRun)。

poYBAGPl7PKARcrBAAExMILM4qM505.jpg

使用上述3個命令我們可用快速偵測出約束中耗時的命令以及implementation階段耗時的子步驟。






審核編輯:劉清

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

    關(guān)注

    0

    文章

    28

    瀏覽量

    17140
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    797

    瀏覽量

    65855
  • csv
    csv
    +關(guān)注

    關(guān)注

    0

    文章

    38

    瀏覽量

    5785

原文標(biāo)題:縮短Vivado編譯時間(4):時間都去哪兒了

文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術(shù)驛站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    tcl命令用于時序分析如何檢查輸入或輸出的時間?

    我只有非常有限的知識來使用tcl命令進(jìn)行時序分析(不用于時序約束,僅用于時序分析)。這些命令如下:check_timingreport_timing_summary我希望知道一些最常見
    發(fā)表于 03-11 13:41

    如何將庫添加到設(shè)計中并使用Tcl腳本編譯

    你好,我編寫了一Tcl腳本來合成Vivado Design Suite 2014.4中的設(shè)計(適用于Zynq ZC 706)。設(shè)計中的庫未編譯。彈出錯誤,表示找不到特定的.vhd文件
    發(fā)表于 04-16 10:15

    非常高效三個linux shell命令分享

    了開發(fā)效率。本文淺析三個非常高效的linux shell命令(awk,grep,sed),在開發(fā)工程中的實際應(yīng)用。1,從系統(tǒng)命令的打印中獲取有用信息。演示:上圖為開發(fā)板網(wǎng)絡(luò)信息,現(xiàn)在從中獲取...
    發(fā)表于 12-23 06:38

    Vivado之TCL腳本語言基本語法介紹

    TCL腳本語言 Tcl(Tool Command Language)是一種很通用的腳本語言,它幾乎在所有的平臺上都可以解釋運(yùn)行,而且VIVADO也提供了
    發(fā)表于 04-11 12:09 ?9642次閱讀

    關(guān)于Tcl的介紹和用途

    在處理if命令時,Tcl解釋器只指導(dǎo)這個命令有三個詞,其中第一是命令名if。Tcl解釋器并不知道if的第一輸入?yún)?shù)是表達(dá)式,第二
    的頭像 發(fā)表于 07-27 09:28 ?4790次閱讀
    關(guān)于<b class='flag-5'>Tcl</b>的介紹和用途

    機(jī)器學(xué)習(xí)對分析地理空間圖像非常有幫助

    機(jī)器學(xué)習(xí)對分析地理空間圖像非常有幫助。衛(wèi)星照片往往會創(chuàng)建大量數(shù)據(jù),而AI軟件可以比人類觀察者更快地標(biāo)記出感興趣的項目。例如,在澳大利亞,消防員定期分析衛(wèi)星圖像以監(jiān)測野火的蔓延,并努力保持領(lǐng)先地位。
    的頭像 發(fā)表于 03-22 16:23 ?2009次閱讀

    三個方面分析電磁兼容的問題

    分析電磁兼容的問題,從三個方面入手。這三個方面分別是:騷擾源、敏感源、耦合路徑。
    發(fā)表于 10-13 14:18 ?1378次閱讀

    有什么方法可以減少Q(mào)uartus II的編譯時間嗎?

    對于減少Q(mào)uartus II的編譯時間的方法,可從三個角度進(jìn)行考慮。
    的頭像 發(fā)表于 05-18 10:27 ?4576次閱讀
    有什么方法可以減少Q(mào)uartus II的<b class='flag-5'>編譯</b><b class='flag-5'>時間</b>嗎?

    三個有效的HMI設(shè)計原則

    無論你是為機(jī)器制造商、系統(tǒng)集成商工作,還是終端設(shè)備用戶,讓我們來探究一下為什么會這樣,以及能做些什么。為了幫助評估任何HMI改進(jìn),考慮三個有效的HMI設(shè)計原則是非常有幫助的。
    的頭像 發(fā)表于 02-10 15:57 ?1515次閱讀

    17非常有用的Python技巧

    Python 是一門非常優(yōu)美的語言,其簡潔易用令人不得不感概人生苦短。在本文中,作者 Gautham Santhosh 帶我們回顧了 17 非常有用的 Python 技巧,例如查找、分割和合并列表等。這 17
    的頭像 發(fā)表于 04-10 14:28 ?458次閱讀

    三個Makefile模板分享

    ????本文分享三個Makefile模板:編譯可執(zhí)行程序、編譯靜態(tài)庫、編譯動態(tài)庫。 1 寫在前面 ????對于Windows下開發(fā),很多IDE都集成了
    的頭像 發(fā)表于 07-10 09:07 ?819次閱讀
    <b class='flag-5'>三個</b>Makefile模板分享

    FPGA設(shè)計之tcl腳本的應(yīng)用

    目前已經(jīng)學(xué)完了基礎(chǔ)實驗,這里要介紹Quatus自帶的兩非常重要的功能,第一tcl腳本,第二
    的頭像 發(fā)表于 09-07 18:30 ?2025次閱讀
    FPGA設(shè)計之<b class='flag-5'>tcl</b><b class='flag-5'>腳本</b>的應(yīng)用

    利用Tcl腳本節(jié)省編譯時間

    這篇博文介紹了多種自動生成報告的有效途徑,以便您在嘗試對設(shè)計中特定階段所耗用的編譯時間進(jìn)行調(diào)試時使用,例如,自動報告加載設(shè)計約束的時間、每條命令的持續(xù)
    的頭像 發(fā)表于 09-15 10:44 ?627次閱讀
    利用<b class='flag-5'>Tcl</b><b class='flag-5'>腳本</b>節(jié)省<b class='flag-5'>編譯</b><b class='flag-5'>時間</b>

    Linux內(nèi)核編譯腳本

    ,則: make V= 2 內(nèi)核編譯腳本 最后分享我常用的內(nèi)核編譯腳本 mk.sh ,給大家參考: #!/bin/sh export ARCH=arm export PATH=~/to
    的頭像 發(fā)表于 09-27 11:52 ?539次閱讀

    keil自動化編譯腳本

    這是一 keil 的自動化編譯腳本,可被其他腳本或程序調(diào)用,接收參數(shù)并按參數(shù)編譯 keil 工程,而不必打開 keil 軟件,實現(xiàn)程序上的
    的頭像 發(fā)表于 10-16 17:04 ?1306次閱讀
    keil自動化<b class='flag-5'>編譯</b><b class='flag-5'>腳本</b>