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