<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用Tcl腳本節省編譯時間

XILINX開發者社區 ? 來源:XILINX開發者社區 ? 2023-09-15 10:44 ? 次閱讀

這篇博文介紹了多種自動生成報告的有效途徑,以便您在嘗試對設計中特定階段所耗用的編譯時間進行調試時使用,例如,自動報告加載設計約束的時間、每條命令的持續時間,甚至是跨多個設計的運行時間差異。

此外還提供了關于如何解讀這些結果的建議。其中涵蓋了 3 個強大的腳本,用于應對這些用例。

一、Report_constraints:

對約束分析時間進行剖析之前,需知曉寫入約束時建議的順序要求。這些要求是根據每種類型的約束的優先級來決定的。時序約束的最優排序如下所述:

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 之外,其他約束類型的優先級隨編號而遞增,并且覆蓋先前約束類型的可能性也越高。因此,僅限更高優先級的約束才會對所涵蓋的路徑進行分析。

為減少約束解析所用的時間,約束應盡可能精確無誤并且限定到目標范圍內。如需了解更多信息,請參考 UG949 中的“建議的約束順序”部分:

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

語法

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


示例:
1. 按 XDC 文件名報告時序約束數量
此示例演示了 4 個獨立 XDC 文件中每一種約束類型的數量

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


2. 利用 -all 選項報告時序約束和非時序約束
非時序命令包括當前使用的所有 Vivado 命令,例如,get_pins、get_clocks 等。

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


3. 報告詳細的約束信息和各項約束的詳情

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


4. 報告時序計算圖 (graph)
此腳本可以估算各命令對于時序計算圖的影響,它還能通過報告估算的時序更新數量(部分更新或完整更新)來幫助您了解這些約束是否采用了最優排序,其報告結果為 “Estimated updates: xxx”。

當命令流從 “Invalidate timing”(使時序失效)轉變為“Require valid timing”(需有效時序)時,即可檢測到時序更新。

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


通過使用此腳本,您應該能夠看到這些約束的更新和加載次數,并確定約束是否具有重復的定義或有效的狀態。

注釋:報告的時序更新次數只是估算總數。但它確實能夠呈現時序約束是否采用了最優排序。

二、剖析器profiler.tcl:

在 Vivado shell 中根據執行目標操作來調試特定設計的運行時間問題時,可以在 Vivado Tcl shell 中找到剖析器文件“profiler.tcl”,用于執行以下操作:

剖析 Vivado 命令或用戶進程

執行運行時間分析,幫助了解運行時方面的瓶頸

分析特定命令或進程的調用次數(以改善腳本效率)

剖析器報告的輸出 log 日志文件中包含 4 個部分:

匯總表

排名前 50 的運行時間

排名前 10 的集合

剖析的所有命令的詳細運行時間


注釋:輸出格式可采用表格(默認)格式或 CSV (profiler summary -csv) 格式。

語法:

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


使用示例:

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


報告部分詳情:

第 1 部分:匯總表

通過對表格列進行計數,得到耗用的總體時間的統計結果。每個列的含義如下:

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

這樣即可輕松確定哪些命令占用的運行時間最長。如下圖所示,get_clocks 和 get_nets 命令均多次調用,占用了大部分的運行時間。

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

第 2 部分:排名前 50 的運行時間

此處報告了前 50 個最差的運行時間,按最差到最好進行排序。它提供了對運行時間影響最嚴重的命令的快速匯總信息。

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

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


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

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


第 4 部分:詳情報告
這部分包含已剖析的每條命令的全部詳細信息,按第一條到最后一條命令排序。其中包含命令 ID、運行時間、命令以及每條命令對象數量:

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


用例:
1. 改善約束效率
對 Tcl 腳本進行剖析有助于了解運行時間的使用方式以及 Vivado 命令或用戶進程的調用次數。它有助于重構對運行時至關重要的 Tcl 代碼,顯著改善運行時間。

以下示例對兩個等效版本的 Tcl 循環之間的運行時間差異和 Vivado 命令的調用次數進行了比較:
構造前:

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


結果顯示,有 75,216 次調用用于 get_property 命令,這占用了大部分的運行時間。因此,我們可以把“get_property”命令移至循環外部以節省時間。

構造代碼后,耗費的總時間減少了 95%:

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


2. 跨多個設計比較運行時間
在跨不同 Vivado 版本進行網表加載或約束解析時,您可能會遇到時間差異。以下示例演示了 2 輪不同的 Vivado 運行之間耗用運行時間的方式。

此方法有助于對不同版本間耗用的每條命令的調用次數進行調試。在此情況下,有問題的版本運行針對每個命令的調用次數都增加了一倍。

正常版本:

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


問題版本:

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

三、Vivado Runtime:

如需對多個設計上跨多個階段的 Vivado 命令的運行時間進行比較,可使用 VivadoRuntime 腳本從 Vivado log 日志文件內的:

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

語法:

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


示例:
在此示例所示表格中,對 Vivado 流程中每個階段的多個 log 日志文件進行了比較。

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

總結:

通過使用這 3 個強大的腳本,您即可快速識別約束和運行階段的瓶頸,從而最終幫助您節省運行時間。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 調試
    +關注

    關注

    7

    文章

    529

    瀏覽量

    33654
  • TCL
    TCL
    +關注

    關注

    10

    文章

    1670

    瀏覽量

    88042
  • 編譯時間
    +關注

    關注

    0

    文章

    3

    瀏覽量

    5475
  • 時序約束
    +關注

    關注

    1

    文章

    113

    瀏覽量

    13364
  • 腳本
    +關注

    關注

    1

    文章

    375

    瀏覽量

    14682

原文標題:開發者分享|節省編譯時間系列-利用 Tcl 腳本對編譯時間進行剖析

文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    加載TCL腳本

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

    關于TCL腳本問題

    請問大家,這個tcl腳本文件是做什么用的呢????本人是菜鳥,還望大家多多指教啊
    發表于 06-14 16:05

    matlab腳本節點問題

    matlab腳本節點中的程序不能嵌套函數,怎么解決這一問題
    發表于 09-11 11:24

    LabVIEW調用Matlab腳本節點Matlab無響應

      我的LabVIEW是2014版,Matlab2011a。我在LabVIEW Matlab腳本節點寫個函數然后調用Matlab里面函數是可以的,但是用采集卡采集的數據(連續采集,但是每采集指定
    發表于 01-03 18:26

    ISE 14.7怎么從tcl腳本更改.bit文件名

    你好,我做了Project->生成TCL腳本?,F在,我希望能夠從tcl腳本中指定.bit文件名。我怎么做?以上來自于谷歌翻譯以下為原文hello,I did the Project-&
    發表于 11-09 11:49

    有哪些標準的方法使用TCL腳本添加Microblaze處理器C文件?

    ?,F在我正在嘗試使用TCL腳本構建項目。我能夠使用TCL腳本生成.bit文件。但我沒有找到任何方法將固件C文件(在SDK中)添加到Microblaze處理器并使用
    發表于 04-04 16:37

    如何將庫添加到設計中并使用Tcl腳本編譯?

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

    【創龍TLZ7x-EasyEVM評估板試用連載】TcL腳本的使用

    ` 今天繼續與大家分享一下使用TcL腳本生成Vivado工程及編譯的開發體驗。創龍提供了豐富的入門教程與Demo程序,幫助我們快速熟悉FPGA開發流程。先來了解一下什么是Tcl呢?
    發表于 06-07 13:59

    請問如何利用tcl腳本在lc_shell中批量把.lib文件轉化成.db文件?

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

    在Vivado下利用Tcl腳本對綜合后的網表進行編輯過程

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

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

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

    如何節省FPGA編譯時間?

    FPGA到最后自然是規模越來越大,編譯時間越來越長。解決問題的方法通常來說應該從工具和設計入手。
    的頭像 發表于 08-04 09:16 ?6286次閱讀

    Linux內核編譯腳本

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

    Vivado那些事兒:節省編譯時間系列文章

    雖然想必您知道,在綜合或實現階段,增量運行可以從參考文件中讀取和復制信息,但僅在某些階段中能節省時間,如果網表發生大量更改,其中引用的內容就會減少,編譯時間也會受到相應影響。
    的頭像 發表于 10-09 16:48 ?1187次閱讀
    Vivado那些事兒:<b class='flag-5'>節省</b><b class='flag-5'>編譯</b><b class='flag-5'>時間</b>系列文章

    keil自動化編譯腳本

    這是一個 keil 的自動化編譯腳本,可被其他腳本或程序調用,接收參數并按參數編譯 keil 工程,而不必打開 keil 軟件,實現程序上的自動化。
    的頭像 發表于 10-16 17:04 ?713次閱讀
    keil自動化<b class='flag-5'>編譯</b><b class='flag-5'>腳本</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>