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

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

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

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

XILINX開(kāi)發(fā)者社區(qū) ? 來(lái)源:XILINX開(kāi)發(fā)者社區(qū) ? 2023-09-15 10:44 ? 次閱讀

這篇博文介紹了多種自動(dòng)生成報(bào)告的有效途徑,以便您在嘗試對(duì)設(shè)計(jì)中特定階段所耗用的編譯時(shí)間進(jìn)行調(diào)試時(shí)使用,例如,自動(dòng)報(bào)告加載設(shè)計(jì)約束的時(shí)間、每條命令的持續(xù)時(shí)間,甚至是跨多個(gè)設(shè)計(jì)的運(yùn)行時(shí)間差異。

此外還提供了關(guān)于如何解讀這些結(jié)果的建議。其中涵蓋了 3 個(gè)強(qiáng)大的腳本,用于應(yīng)對(duì)這些用例。

一、Report_constraints:

對(duì)約束分析時(shí)間進(jìn)行剖析之前,需知曉寫(xiě)入約束時(shí)建議的順序要求。這些要求是根據(jù)每種類(lèi)型的約束的優(yōu)先級(jí)來(lái)決定的。時(shí)序約束的最優(yōu)排序如下所述:

1. set_disable_timing
2. set_case_analysis
3. create_clock
4. set_clock_sense
5. create_generated_clock
6. set_input_delay / set_output_delay
7. set_min_delay / set_max_delay
8. set_false_path
9. set_multicycle_path

10. set_bus_skew

除了 set_bus_skew 之外,其他約束類(lèi)型的優(yōu)先級(jí)隨編號(hào)而遞增,并且覆蓋先前約束類(lèi)型的可能性也越高。因此,僅限更高優(yōu)先級(jí)的約束才會(huì)對(duì)所涵蓋的路徑進(jìn)行分析。

為減少約束解析所用的時(shí)間,約束應(yīng)盡可能精確無(wú)誤并且限定到目標(biāo)范圍內(nèi)。如需了解更多信息,請(qǐng)參考 UG949 中的“建議的約束順序”部分:

在復(fù)雜設(shè)計(jì)中,總是需要添加許多約束文件,包括 IP 約束和用戶(hù)添加的約束。要獲取這些約束的匯總表,可在 Tcl shell 中調(diào)用 report_constraints 腳本,以報(bào)告 XDC 或 DCP 文件中使用的約束 Tcl 命令(時(shí)序和非時(shí)序)數(shù)量。它還可以根據(jù)約束排序,對(duì)生成的時(shí)序更新數(shù)量進(jìn)行粗略估計(jì)。您需使用下列語(yǔ)法找到此腳本:

語(yǔ)法

8d9d5148-52ee-11ee-a25d-92fbcf53809c.png


示例:
1. 按 XDC 文件名報(bào)告時(shí)序約束數(shù)量
此示例演示了 4 個(gè)獨(dú)立 XDC 文件中每一種約束類(lèi)型的數(shù)量

8dc67a8c-52ee-11ee-a25d-92fbcf53809c.png


2. 利用 -all 選項(xiàng)報(bào)告時(shí)序約束和非時(shí)序約束
非時(shí)序命令包括當(dāng)前使用的所有 Vivado 命令,例如,get_pins、get_clocks 等。

8de89a86-52ee-11ee-a25d-92fbcf53809c.png


3. 報(bào)告詳細(xì)的約束信息和各項(xiàng)約束的詳情

8e385170-52ee-11ee-a25d-92fbcf53809c.png


4. 報(bào)告時(shí)序計(jì)算圖 (graph)
此腳本可以估算各命令對(duì)于時(shí)序計(jì)算圖的影響,它還能通過(guò)報(bào)告估算的時(shí)序更新數(shù)量(部分更新或完整更新)來(lái)幫助您了解這些約束是否采用了最優(yōu)排序,其報(bào)告結(jié)果為 “Estimated updates: xxx”。

當(dāng)命令流從 “Invalidate timing”(使時(shí)序失效)轉(zhuǎn)變?yōu)椤癛equire valid timing”(需有效時(shí)序)時(shí),即可檢測(cè)到時(shí)序更新。

8e48dae0-52ee-11ee-a25d-92fbcf53809c.png


通過(guò)使用此腳本,您應(yīng)該能夠看到這些約束的更新和加載次數(shù),并確定約束是否具有重復(fù)的定義或有效的狀態(tài)。

注釋?zhuān)簣?bào)告的時(shí)序更新次數(shù)只是估算總數(shù)。但它確實(shí)能夠呈現(xiàn)時(shí)序約束是否采用了最優(yōu)排序。

二、剖析器profiler.tcl:

在 Vivado shell 中根據(jù)執(zhí)行目標(biāo)操作來(lái)調(diào)試特定設(shè)計(jì)的運(yùn)行時(shí)間問(wèn)題時(shí),可以在 Vivado Tcl shell 中找到剖析器文件“profiler.tcl”,用于執(zhí)行以下操作:

剖析 Vivado 命令或用戶(hù)進(jìn)程

執(zhí)行運(yùn)行時(shí)間分析,幫助了解運(yùn)行時(shí)方面的瓶頸

分析特定命令或進(jìn)程的調(diào)用次數(shù)(以改善腳本效率)

剖析器報(bào)告的輸出 log 日志文件中包含 4 個(gè)部分:

匯總表

排名前 50 的運(yùn)行時(shí)間

排名前 10 的集合

剖析的所有命令的詳細(xì)運(yùn)行時(shí)間


注釋?zhuān)狠敵龈袷娇刹捎帽砀瘢J(rèn))格式或 CSV (profiler summary -csv) 格式。

語(yǔ)法:

8e96e384-52ee-11ee-a25d-92fbcf53809c.png


使用示例:

8ec991e4-52ee-11ee-a25d-92fbcf53809c.png


報(bào)告部分詳情:

第 1 部分:匯總表

通過(guò)對(duì)表格列進(jìn)行計(jì)數(shù),得到耗用的總體時(shí)間的統(tǒng)計(jì)結(jié)果。每個(gè)列的含義如下:

8eeccc36-52ee-11ee-a25d-92fbcf53809c.png

這樣即可輕松確定哪些命令占用的運(yùn)行時(shí)間最長(zhǎng)。如下圖所示,get_clocks 和 get_nets 命令均多次調(diào)用,占用了大部分的運(yùn)行時(shí)間。

8f013324-52ee-11ee-a25d-92fbcf53809c.png

第 2 部分:排名前 50 的運(yùn)行時(shí)間

此處報(bào)告了前 50 個(gè)最差的運(yùn)行時(shí)間,按最差到最好進(jìn)行排序。它提供了對(duì)運(yùn)行時(shí)間影響最嚴(yán)重的命令的快速匯總信息。

其中包含以下列:
? ID(可用于查找 log 日志文件內(nèi)的命令):匹配 Vivado 已處理的命令的順序。ID 1 是運(yùn)行的第一條命令,ID 2 是第二條,以此類(lèi)推。
? runtime:以 ms 為單位的運(yùn)行時(shí)間
? command:Vivado 運(yùn)行的命令
以下截屏顯示了 50 行列表中的一部分:

8f2ad800-52ee-11ee-a25d-92fbcf53809c.png


第 3 部分:排名前 10 的集合
這部分包括由任意剖析的命令返回的 10 個(gè)最大的對(duì)象集合。其中對(duì)于每個(gè)集合都包含:
? size:集合大小
? count:大小相同的集合數(shù)量
? total:對(duì)象總數(shù) (size * count)
? commands:返回該集合的命令列表

8f4c0c32-52ee-11ee-a25d-92fbcf53809c.png


第 4 部分:詳情報(bào)告
這部分包含已剖析的每條命令的全部詳細(xì)信息,按第一條到最后一條命令排序。其中包含命令 ID、運(yùn)行時(shí)間、命令以及每條命令對(duì)象數(shù)量:

8f89b258-52ee-11ee-a25d-92fbcf53809c.png


用例:
1. 改善約束效率
對(duì) Tcl 腳本進(jìn)行剖析有助于了解運(yùn)行時(shí)間的使用方式以及 Vivado 命令或用戶(hù)進(jìn)程的調(diào)用次數(shù)。它有助于重構(gòu)對(duì)運(yùn)行時(shí)至關(guān)重要的 Tcl 代碼,顯著改善運(yùn)行時(shí)間。

以下示例對(duì)兩個(gè)等效版本的 Tcl 循環(huán)之間的運(yùn)行時(shí)間差異和 Vivado 命令的調(diào)用次數(shù)進(jìn)行了比較:
構(gòu)造前:

8fb4e9c8-52ee-11ee-a25d-92fbcf53809c.png


結(jié)果顯示,有 75,216 次調(diào)用用于 get_property 命令,這占用了大部分的運(yùn)行時(shí)間。因此,我們可以把“get_property”命令移至循環(huán)外部以節(jié)省時(shí)間。

構(gòu)造代碼后,耗費(fèi)的總時(shí)間減少了 95%:

9002af00-52ee-11ee-a25d-92fbcf53809c.png


2. 跨多個(gè)設(shè)計(jì)比較運(yùn)行時(shí)間
在跨不同 Vivado 版本進(jìn)行網(wǎng)表加載或約束解析時(shí),您可能會(huì)遇到時(shí)間差異。以下示例演示了 2 輪不同的 Vivado 運(yùn)行之間耗用運(yùn)行時(shí)間的方式。

此方法有助于對(duì)不同版本間耗用的每條命令的調(diào)用次數(shù)進(jìn)行調(diào)試。在此情況下,有問(wèn)題的版本運(yùn)行針對(duì)每個(gè)命令的調(diào)用次數(shù)都增加了一倍。

正常版本:

90374a44-52ee-11ee-a25d-92fbcf53809c.png


問(wèn)題版本:

90698202-52ee-11ee-a25d-92fbcf53809c.png

三、Vivado Runtime:

如需對(duì)多個(gè)設(shè)計(jì)上跨多個(gè)階段的 Vivado 命令的運(yùn)行時(shí)間進(jìn)行比較,可使用 VivadoRuntime 腳本從 Vivado log 日志文件內(nèi)的:

runtime/memory/checksum/timing/congestion/command 行提取部分調(diào)試信息。它還可用于比較多個(gè) Vivado log 日志文件之間的信息。此腳本可用于提取定制運(yùn)行時(shí)間,前提是這些運(yùn)行時(shí)間的格式正確。它會(huì)從文本 log 日志文件中提取信息,并可在 Shell 提示符下執(zhí)行。

語(yǔ)法:

90c2baf2-52ee-11ee-a25d-92fbcf53809c.png


示例:
在此示例所示表格中,對(duì) Vivado 流程中每個(gè)階段的多個(gè) log 日志文件進(jìn)行了比較。

90f695c0-52ee-11ee-a25d-92fbcf53809c.png910b1270-52ee-11ee-a25d-92fbcf53809c.png

總結(jié):

通過(guò)使用這 3 個(gè)強(qiáng)大的腳本,您即可快速識(shí)別約束和運(yùn)行階段的瓶頸,從而最終幫助您節(jié)省運(yùn)行時(shí)間。

審核編輯:湯梓紅

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

    關(guān)注

    7

    文章

    551

    瀏覽量

    33762
  • TCL
    TCL
    +關(guān)注

    關(guān)注

    10

    文章

    1699

    瀏覽量

    88266
  • 編譯時(shí)間
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    5482
  • 時(shí)序約束
    +關(guān)注

    關(guān)注

    1

    文章

    114

    瀏覽量

    13386
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    382

    瀏覽量

    14761

原文標(biāo)題:開(kāi)發(fā)者分享|節(jié)省編譯時(shí)間系列-利用 Tcl 腳本對(duì)編譯時(shí)間進(jìn)行剖析

文章出處:【微信號(hào):gh_2d1c7e2d540e,微信公眾號(hào):XILINX開(kāi)發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    加載TCL腳本

    求助大神 制作能夠 “加載TCL腳本功能”得用什么控件!求指教求指點(diǎn)~!萬(wàn)分感謝~!{:36:}百度了好幾天都沒(méi)有~!
    發(fā)表于 04-22 09:55

    關(guān)于TCL腳本問(wèn)題

    請(qǐng)問(wèn)大家,這個(gè)tcl腳本文件是做什么用的呢????本人是菜鳥(niǎo),還望大家多多指教啊
    發(fā)表于 06-14 16:05

    matlab腳本節(jié)點(diǎn)問(wèn)題

    matlab腳本節(jié)點(diǎn)中的程序不能嵌套函數(shù),怎么解決這一問(wèn)題
    發(fā)表于 09-11 11:24

    LabVIEW調(diào)用Matlab腳本節(jié)點(diǎn)Matlab無(wú)響應(yīng)

      我的LabVIEW是2014版,Matlab2011a。我在LabVIEW Matlab腳本節(jié)點(diǎn)寫(xiě)個(gè)函數(shù)然后調(diào)用Matlab里面函數(shù)是可以的,但是用采集卡采集的數(shù)據(jù)(連續(xù)采集,但是每采集指定
    發(fā)表于 01-03 18:26

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

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

    請(qǐng)問(wèn)如何利用tcl腳本在lc_shell中批量把.lib文件轉(zhuǎn)化成.db文件?

    如何利用tcl腳本在lc_shell中批量把.lib文件轉(zhuǎn)化成.db文件?
    發(fā)表于 01-04 07:36

    在Vivado下利用Tcl腳本對(duì)綜合后的網(wǎng)表進(jìn)行編輯過(guò)程

    在ISE下,對(duì)綜合后的網(wǎng)表進(jìn)行編輯幾乎是不可能的事情,但在Vivado下成為可能。Vivado對(duì)Tcl的支持,使得Tcl腳本在FPGA設(shè)計(jì)中有了用武之地。本文通過(guò)一個(gè)實(shí)例演示如何在Vivado下
    發(fā)表于 11-18 03:16 ?7314次閱讀
    在Vivado下<b class='flag-5'>利用</b><b class='flag-5'>Tcl</b><b class='flag-5'>腳本</b>對(duì)綜合后的網(wǎng)表進(jìn)行編輯過(guò)程

    Vivado之TCL腳本語(yǔ)言基本語(yǔ)法介紹

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

    如何節(jié)省FPGA編譯時(shí)間

    FPGA到最后自然是規(guī)模越來(lái)越大,編譯時(shí)間越來(lái)越長(zhǎng)。解決問(wèn)題的方法通常來(lái)說(shuō)應(yīng)該從工具和設(shè)計(jì)入手。
    的頭像 發(fā)表于 08-04 09:16 ?6480次閱讀

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

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

    Vivado設(shè)計(jì)套件用戶(hù)指南:使用Tcl腳本

    電子發(fā)燒友網(wǎng)站提供《Vivado設(shè)計(jì)套件用戶(hù)指南:使用Tcl腳本.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 14:59 ?0次下載
    Vivado設(shè)計(jì)套件用戶(hù)指南:使用<b class='flag-5'>Tcl</b><b class='flag-5'>腳本</b>

    Vivado Design Suite用戶(hù)指南:使用Tcl腳本

    電子發(fā)燒友網(wǎng)站提供《Vivado Design Suite用戶(hù)指南:使用Tcl腳本.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 15:26 ?0次下載
    Vivado Design Suite用戶(hù)指南:使用<b class='flag-5'>Tcl</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 ?537次閱讀

    Vivado那些事兒:節(jié)省編譯時(shí)間系列文章

    雖然想必您知道,在綜合或?qū)崿F(xiàn)階段,增量運(yùn)行可以從參考文件中讀取和復(fù)制信息,但僅在某些階段中能節(jié)省時(shí)間,如果網(wǎng)表發(fā)生大量更改,其中引用的內(nèi)容就會(huì)減少,編譯時(shí)間也會(huì)受到相應(yīng)影響。
    的頭像 發(fā)表于 10-09 16:48 ?2238次閱讀
    Vivado那些事兒:<b class='flag-5'>節(jié)省</b><b class='flag-5'>編譯</b><b class='flag-5'>時(shí)間</b>系列文章

    keil自動(dòng)化編譯腳本

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