針對特定的設計,就編譯時間而言,我們要分析時間都消耗在哪些環節從而有針對性的縮短編譯時間。通常,時間可能花費在加載約束上,也可能花費在某個子步驟如布局。有時面對的情況是同一設計在不同Vivado版本上運行時間出現較大差異。
report_constraints
我們先來介紹第一個命令:report_constraints。運行該命令之前需要先在Vivado Tcl Console中執行如下命令:
source report_constraints.tcl
同時最好將該腳本與待分析的dcp放置在同一目錄下,這樣在讀取dcp時就只用提供當前工作目錄即可。另外,需要注意的是report_constraints只能在Linux系統下運行。report_constraints可報告出設計中所用到的約束的種類(包括時序約束也包括非時序約束)、數量以及有效性。
通常情況下,Xilinx建議采用如下順序描述時序約束。除第10條set_bus_skew之外,約束的優先級也是依此順序的,即1號優先級最低,9號優先級最高。因此,不合理的順序以及不合理的描述方式會導致一些約束被覆蓋,從而造成設計“假收斂”的現象。
對于一個復雜的設計,除了用戶約束文件外,還可能會有IP的約束文件,這些約束文件可能在用戶約束文件之前被調用(約束文件屬性PROCESSING_ORDER為EARLY),也可能在用戶約束文件之后被調用(約束文件屬性PROCESSING_ORDER為LATE)。report_constraints可報告出所有約束文件所包含的約束。
案例1:只報告上述10種時序約束的個數
如下圖所示(使用report_constraints時需要在添加作用域即tb::)。該報告第1列顯示約束類型,第2列顯示需要在用戶約束之前調用的約束個數,第3列顯示用戶約束的個數,第4列顯示需要在用戶之后調用的約束個數,第5列顯示和開發板相關的約束個數(當Part選擇為開發板時),最后一列顯示OOC綜合時用到的約束個數。
案例2:報告所有約束及約束用到的命令
通過添加-all選項,report_constratins可報告所有約束(時序約束+非時序約束)的數目以及這些約束用到的Tcl命令的個數,如下圖所示。
在Vivado Commands Summary中,可以看到get_cells、get_pins、get_ports以及set_property等命令的使用情況。
案例3:報告約束的具體信息
添加選項-details和-verbose,report_constratins可報告約束的詳細信息,如下圖所示。
案例4:報告時序畫像
選項-timing_graph和-verbose可用于報告時序畫像,如下圖所示。當Status列由Invalidatetiming變為Required valid timing時,Estimatedupdates加1,這個值越小越好,根據此值可判斷約束描述的順序是否是最優的。
profiler
對Vivado編譯時間進行調試時,命令profiler可幫助用戶查看特定操作的運行時間,分析指定命令的調用次數,從而確定整體運行時間的瓶頸。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打開,第一部分內容如下。第一列顯示了所執行的命令,倒數第2列(ncalls)顯示了該命令被調用的次數,最后一列顯示了執行該命令所耗時間占整體運行時間的百分比。
profiler生成報告還能顯示前50條最耗時的命令,如下圖所示。可用看到除open_checkpoint之外,get_clocks最耗時。
報告的第三部分可以看到設計中Tcl命令的使用情況,如下圖所示。圖中commands列(最后一列)為Tcl命令,size列為該命令返回的對象的個數,count列為返回同樣個數的命令的個數,total列等于size與count的乘積。以第122行get_cells為例,返回120個對象的get_cells有24個,所以總對象個數為120x24即2880。
profiler命令還可用于查看指定命令的運行時間,這對于發現約束中哪些命令最為耗時很有幫助,使用方法如下所示。從生成報告中可以看到get_cells命令共耗時32.984ms。
profiler start
set cells [get_cells
-hier -filter"REF_NAME==FDRE"]
profiler stop
profiler summary
vivadoRuntime
命令vivadoRuntime可用于查看不同策略下每個階段所消耗的時間,使用方法如下圖所示。每個Elapsed列對應1個策略(也就是1個DesignRun)。
使用上述3個命令我們可用快速偵測出約束中耗時的命令以及implementation階段耗時的子步驟。
審核編輯:劉清
-
DCP
+關注
關注
0文章
30瀏覽量
17214 -
Vivado
+關注
關注
19文章
808瀏覽量
66331 -
csv
+關注
關注
0文章
38瀏覽量
5805
原文標題:縮短Vivado編譯時間(4):時間都去哪兒了
文章出處:【微信號:Lauren_FPGA,微信公眾號:FPGA技術驛站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論