今天推出Xilinx已發(fā)布的《Vivado使用誤區(qū)與進(jìn)階》系列:用TCL定制Vivado設(shè)計(jì)實(shí)現(xiàn)流程。
上一篇《Tcl在Vivado中的應(yīng)用》介紹了Tcl的基本語(yǔ)法以及如何利用Tcl在Vivado中定位目標(biāo)。其實(shí)Tcl在Vivado中還有很多延展應(yīng)用,接下來(lái)我們就來(lái)討論如何利用Tcl語(yǔ)言的靈活性和可擴(kuò)展性,在Vivado中實(shí)現(xiàn)定制化的FPGA設(shè)計(jì)流程。
基本的 FPGA 設(shè)計(jì)實(shí)現(xiàn)流程
FPGA的設(shè)計(jì)流程簡(jiǎn)單來(lái)講,就是從源代碼到比特流文件的實(shí)現(xiàn)過(guò)程。大體上跟IC設(shè)計(jì)流程類似,可以分為前端設(shè)計(jì)和后端設(shè)計(jì)。其中前端設(shè)計(jì)是把源代碼綜合為對(duì)應(yīng)的門級(jí)網(wǎng)表的過(guò)程,而后端設(shè)計(jì)則是把門級(jí)網(wǎng)表布局布線到芯片上最終實(shí)現(xiàn)的過(guò)程。
以下兩圖分別表示ISE和Vivado的基本設(shè)計(jì)流程:
ISE中設(shè)計(jì)實(shí)現(xiàn)的每一步都是相對(duì)獨(dú)立的過(guò)程,數(shù)據(jù)模型各不相同,用戶需要維護(hù)不同的輸入文件,例如約束等,輸出文件也不是標(biāo)準(zhǔn)網(wǎng)表格式,并且形式各異,導(dǎo)致整體運(yùn)行時(shí)間過(guò)長(zhǎng),冗余文件較多。
Vivado中則統(tǒng)一了約束格式和數(shù)據(jù)模型,在設(shè)計(jì)實(shí)現(xiàn)的任何一個(gè)階段都支持XDC約束,可以生成時(shí)序報(bào)告,在每一步都能輸出包含有網(wǎng)表、約束以及布局布線信息(如果有)的設(shè)計(jì)檢查點(diǎn)(DCP)文件,大大縮短了運(yùn)行時(shí)間。
從使用方式上來(lái)講,Vivado支持工程模式(Project Based Mode)和非工程模式(None Project Mode)兩種,且都能通過(guò)Tcl腳本批處理運(yùn)行,或是在Vivado圖形化界面IDE中交互運(yùn)行和調(diào)試。
工程模式
工程模式的關(guān)鍵優(yōu)勢(shì)在于可以通過(guò)在Vivado中創(chuàng)建工程的方式管理整個(gè)設(shè)計(jì)流程,包括工程文件的位置、階段性關(guān)鍵報(bào)告的生成、重要數(shù)據(jù)的輸出和存儲(chǔ)等。
如下左圖所示,用戶建立了一個(gè)Vivado工程后,工具會(huì)自動(dòng)創(chuàng)建相應(yīng)的.xpr工程文件,并在工程文件所在的位置同層創(chuàng)建相應(yīng)的幾個(gè)目錄,包括.cache、.data、.runs和.srcs等等(不同版本可能有稍許差異),分別用于存儲(chǔ)運(yùn)行工程過(guò)程中產(chǎn)生的數(shù)據(jù)、輸出的文件和報(bào)告以及工程的輸入源文件(包含約束文件)等。
如下右圖所示,在Vivado IDE中還可以一鍵式運(yùn)行整個(gè)設(shè)計(jì)流程。這些預(yù)置的命令按鈕就放置在工具最左邊的側(cè)欄:Flow Navigator。不同按鈕對(duì)應(yīng)不同的實(shí)現(xiàn)過(guò)程,其中在后端實(shí)現(xiàn)階段,還可以用右鍵調(diào)出詳細(xì)分步命令,指引工具具體執(zhí)行實(shí)現(xiàn)的哪一步。
特別需要指出的是Flow Navigator只有在Vivado IDE中打開(kāi).xpr工程文件才會(huì)顯示,如果打開(kāi)的是設(shè)計(jì)檢查點(diǎn).dcp文件(不論是工程模式或是非工程模式產(chǎn)生的dcp)都不會(huì)顯示這個(gè)側(cè)欄。
非工程模式
非工程模式下,由于不會(huì)創(chuàng)建工程,用戶就需要自己管理設(shè)計(jì)源文件和設(shè)計(jì)過(guò)程。源文件只能從當(dāng)前位置訪問(wèn),在設(shè)計(jì)實(shí)現(xiàn)過(guò)程中的每一步,數(shù)據(jù)和運(yùn)行結(jié)果都存在于Vivado分配到的機(jī)器內(nèi)存中,在用戶不主動(dòng)輸出的情況下,不會(huì)存儲(chǔ)到硬盤中。
簡(jiǎn)單來(lái)講,非工程模式提供了一種類似ASIC設(shè)計(jì)的流程,用戶擁有絕對(duì)的自由,可以完全掌控設(shè)計(jì)實(shí)現(xiàn)流程,但也需要用戶對(duì)設(shè)計(jì)實(shí)現(xiàn)的過(guò)程和數(shù)據(jù),尤其對(duì)文件輸出和管理全權(quán)負(fù)責(zé),包括何時(shí)、何地、輸出怎樣的文件等等。
使用非工程模式管理輸入輸出文件、進(jìn)行設(shè)計(jì)實(shí)現(xiàn)都需要使用Tcl腳本,但這并不代表非工程模式不支持圖形化界面。非工程模式下產(chǎn)生的.dcp文件一樣可以在Vivdao IDE中打開(kāi),繼而產(chǎn)生各種報(bào)告,進(jìn)行交互式調(diào)試等各種在圖形化下更便捷直觀的操作。這是一個(gè)常見(jiàn)誤區(qū),就像很多人誤認(rèn)為工程模式下不支持Tcl腳本運(yùn)行是一個(gè)道理。但兩種模式支持的Tcl命令確實(shí)是完全不同的,使用起來(lái)也不能混淆。
下圖所示是同一個(gè)設(shè)計(jì)(Vivado自帶的Example Design)采用兩種模式實(shí)現(xiàn)所需使用的不同腳本,更詳細(xì)的內(nèi)容可以在UG975和UG835中找到。需要注意的是,工程模式下的Tcl腳本更簡(jiǎn)潔,但并不是最底層的Tcl命令,實(shí)際執(zhí)行一條相當(dāng)于執(zhí)行非工程模式下的數(shù)條Tcl命令。
Tcl對(duì)圖形化的補(bǔ)充
相信對(duì)大部分FPGA工程設(shè)計(jì)人員來(lái)說(shuō),圖形化界面仍舊是最熟悉的操作環(huán)境,也是設(shè)計(jì)實(shí)現(xiàn)的首選。在Xilinx推出全面支持Tcl的Vivado后,這一點(diǎn)依然沒(méi)有改變,但我們要指出的是,即使是在圖形化界面上跑設(shè)計(jì),仍然可以充分利用Tcl的優(yōu)勢(shì)。在Vivado IDE上運(yùn)行Tcl腳本主要有以下幾個(gè)渠道。
Tcl Console
Vivado IDE的最下方有一個(gè)Tcl Console,在運(yùn)行過(guò)程中允許用戶輸入Tcl/XDC命令或是source預(yù)先寫(xiě)好的Tcl腳本,返回值會(huì)即時(shí)顯示在這個(gè)對(duì)話框。
舉例來(lái)說(shuō),設(shè)計(jì)調(diào)試過(guò)程中,需要將一些約束應(yīng)用在某些網(wǎng)表目標(biāo)上(具體可參照《Tcl在Vivado中的應(yīng)用》所示),推薦的做法就是在IDE中打開(kāi).dcp然后在Tcl Console中輸入相應(yīng)的Tcl/XDC命令,驗(yàn)證返回值,碰到問(wèn)題可以直接修改,直到找到正確合適的命令。然后可以記錄這些命令,并存入XDC文件中以備下次實(shí)現(xiàn)時(shí)使用。
還有一種情況是,預(yù)先讀入的XDC中有些約束需要修改,或是缺失了某些重要約束。不同于ISE中必須修改UCF重跑設(shè)計(jì)的做法,在Vivado中,我們可以充分利用Tcl/XDC的優(yōu)勢(shì),在Tcl Console中輸入新的Tcl/XDC,無(wú)需重跑設(shè)計(jì),只要運(yùn)行時(shí)序報(bào)告來(lái)驗(yàn)證。當(dāng)然,如果能重跑設(shè)計(jì),效果會(huì)更好,但是這種方法在早期設(shè)計(jì)階段提供了一種快速進(jìn)行交互式驗(yàn)證的可能,保證了更快地設(shè)計(jì)迭代,大大提升了效率。
另外,通過(guò)某些Tcl命令(例如show_objects、select_objects等等)的幫助,我們還可以利用Tcl Console與時(shí)序報(bào)告、RTL和門級(jí)網(wǎng)表以及布局布線后的網(wǎng)表之間進(jìn)行交互調(diào)試,極大發(fā)揮Vivado IDE的優(yōu)勢(shì)。
Hook Scripts
Vivado IDE中內(nèi)置了tcl.pre和tcl.post,用戶可以在Synthesis和Implementation的設(shè)置窗口中找到。設(shè)計(jì)實(shí)現(xiàn)的每一步都有這樣兩個(gè)位置可供用戶加入自己的Tcl腳本。
tcl.pre表示當(dāng)前這步之前Vivado會(huì)主動(dòng)source的Tcl腳本,tcl.post表示這步之后會(huì)source的腳本。
Tcl腳本必須事先寫(xiě)好,然后在上圖所示的設(shè)置界面由用戶使用彈出窗口指定到腳本所在位置。
這些就是所謂的“鉤子”腳本,正是有了這樣的腳本,我們才得以在圖形化界面上既享有一鍵式執(zhí)行的便利,又充分利用Tcl帶來(lái)的擴(kuò)展性。比較常見(jiàn)的使用場(chǎng)景是,在某個(gè)步驟后多產(chǎn)生幾個(gè)特別的報(bào)告,或是在布線前再跑幾次物理優(yōu)化等。
Customer Commands
Vivado IDE中還有一個(gè)擴(kuò)展功能,允許用戶把事先創(chuàng)建好的Tcl腳本以定制化命令的方式加入圖形化界面,成為一個(gè)按鈕,方便快速執(zhí)行。這個(gè)功能常常用來(lái)報(bào)告特定的時(shí)序信息、修改網(wǎng)表內(nèi)容、實(shí)現(xiàn)ECO等等。
用Tcl定制實(shí)現(xiàn)流程
綜上所述,標(biāo)準(zhǔn)的FPGA設(shè)計(jì)實(shí)現(xiàn)流程完全可以通過(guò)Vivado IDE一鍵式執(zhí)行,如果僅需要少量擴(kuò)展,通過(guò)前述鉤子腳本等幾種方法也完全可以做到。若是這些方法都不能滿足需求,還可以使用Tcl腳本來(lái)跑設(shè)計(jì),從而實(shí)現(xiàn)設(shè)計(jì)流程的全定制。
注:以下討論的幾種實(shí)現(xiàn)方案中僅包含后端實(shí)現(xiàn)具體步驟的區(qū)別,而且只列出非工程模式下對(duì)應(yīng)的Tcl命令。
右圖所示是Vivado中設(shè)計(jì)實(shí)現(xiàn)的基本流程,藍(lán)色部分表示實(shí)現(xiàn)的基本步驟(盡管opt_design這一步理論上不是必選項(xiàng),但仍強(qiáng)烈建議用戶執(zhí)行),對(duì)應(yīng)Implementation的Default策略。黃色部分表示可選擇執(zhí)行的部分,不同的實(shí)現(xiàn)策略中配置不同。
這里不會(huì)討論那些圖形化界面中可選的策略,不同策略有何側(cè)重,具體如何配置我們將在另外一篇關(guān)于Vivado策略選擇的文章中詳細(xì)描述。
我們要展示的是如何對(duì)設(shè)計(jì)流程進(jìn)行改動(dòng)來(lái)更好的滿足設(shè)計(jì)需求,這些動(dòng)作往往只能通過(guò)Tcl腳本來(lái)實(shí)現(xiàn)。
充分利用物理優(yōu)化
物理優(yōu)化即phys_opt_design是在后端通過(guò)復(fù)制、移動(dòng)寄存器來(lái)降扇出和retiming,從而進(jìn)行時(shí)序優(yōu)化的重要手段,一般在布局和布線之間運(yùn)行,從Vivado 2014.1開(kāi)始,還支持布局后的物理優(yōu)化。
很多用戶會(huì)在Vivado中選中phys_opt_design,但往往不知道這一步其實(shí)可以運(yùn)行多次,并且可以選擇不同的directive來(lái)有側(cè)重的優(yōu)化時(shí)序。
比如,我們可以寫(xiě)這樣一個(gè)Tcl腳本,在布局后,使用不同的directive或選項(xiàng)來(lái)跑多次物理優(yōu)化,甚至可以再多運(yùn)行一次物理優(yōu)化,專門針對(duì)那些事先通過(guò)get_nets命令找到并定義為highfanout_nets的高扇出網(wǎng)絡(luò)具體directive的含義可以通過(guò)UG835、UG904或phys_opt_design -help命令查詢。
布局布線之間的多次物理優(yōu)化不會(huì)惡化時(shí)序,但會(huì)增加額外的運(yùn)行時(shí)間,也有可能出現(xiàn)時(shí)序完全沒(méi)有得到優(yōu)化的結(jié)果。布線后的物理優(yōu)化有時(shí)候會(huì)惡化THS,所以請(qǐng)一定記得每一步后都運(yùn)行report_timing_summary,并且通過(guò)write_checkpoint寫(xiě)出一個(gè).dcp文件來(lái)保留階段性結(jié)果。這一步的結(jié)果不理想就可以及時(shí)退回到上一步的.dcp繼續(xù)進(jìn)行。
閉環(huán)設(shè)計(jì)流程
通常的FPGA設(shè)計(jì)流程是一個(gè)開(kāi)環(huán)系統(tǒng),從前到后依次執(zhí)行。但Vivado中提供了一種可能,用戶可以通過(guò)place_design -post_place_opt在已經(jīng)完成布局布線的設(shè)計(jì)上再做一次布局布線,從而形成一個(gè)有了反饋信息的閉環(huán)系統(tǒng)。這次因?yàn)橛辛饲耙淮尾季€后的真實(shí)連線延遲信息,布局的針對(duì)性更好,并且只會(huì)基于時(shí)序不滿足的路徑進(jìn)行重布局而不會(huì)改變大部分已經(jīng)存在的布局信息,之后的布線過(guò)程也是增量流程。
這一過(guò)程所需的運(yùn)行時(shí)間較短,是一種很有針對(duì)性的時(shí)序優(yōu)化方案。可以通過(guò)Tcl寫(xiě)一個(gè)循環(huán)多次迭代運(yùn)行,但需留意每次的時(shí)序報(bào)告,若出現(xiàn)時(shí)序惡化就應(yīng)及時(shí)停止。
增量設(shè)計(jì)流程
Vivado中的增量設(shè)計(jì)也是一個(gè)不得不提的功能。當(dāng)設(shè)計(jì)進(jìn)行到后期,每次運(yùn)行改動(dòng)很小,在開(kāi)始后端實(shí)現(xiàn)前讀入的設(shè)計(jì)網(wǎng)表具有較高相似度的情況下,推薦使用Vivado的增量布局布線功能。
如上圖所示,運(yùn)行增量流程的前提是有一個(gè)已經(jīng)完成布局布線的.dcp文件,并以此用來(lái)作為新的布局布線的參考。
運(yùn)行過(guò)程中,Vivado會(huì)重新利用已有的布局布線數(shù)據(jù)來(lái)縮短運(yùn)行時(shí)間,并生成可預(yù)測(cè)的結(jié)果。當(dāng)設(shè)計(jì)有95%以上的相似度時(shí),增量布局布線的運(yùn)行時(shí)間會(huì)比一般布局布線平均縮短2倍。若相似度低于80%,則使用增量布局布線只有很小的優(yōu)勢(shì)或者基本沒(méi)有優(yōu)勢(shì)。
除了縮短運(yùn)行時(shí)間外,增量布局布線對(duì)沒(méi)有發(fā)生變化的設(shè)計(jì)部分造成的破壞也很小,因此能減少時(shí)序變化,最大限度保留時(shí)序結(jié)果,所以一般要求用做參考的.dcp文件必須是一個(gè)完全時(shí)序收斂的設(shè)計(jì)。
參考點(diǎn).dcp文件可以在Vivado IDE的Implementation設(shè)置中指定,也可以在Tcl腳本中用read_checkpoint -incremental讀入。特別需要指出的是,在工程模式中,如要在不新建一個(gè)impl實(shí)現(xiàn)的情況下使用上一次運(yùn)行的結(jié)果作為參考點(diǎn),必須將其另存到這次運(yùn)行目錄之外的位置,否則會(huì)因沖突而報(bào)錯(cuò)。
以上用Tcl定制Vivado設(shè)計(jì)實(shí)現(xiàn)流程的討論就到這里,后面我將就Tcl使用場(chǎng)景,包括ECO流程等的更多細(xì)節(jié)進(jìn)行展開(kāi)。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21736瀏覽量
603385 -
Xilinx
+關(guān)注
關(guān)注
71文章
2167瀏覽量
121410 -
TCL
+關(guān)注
關(guān)注
10文章
1725瀏覽量
88603 -
時(shí)序
+關(guān)注
關(guān)注
5文章
387瀏覽量
37332 -
Vivado
+關(guān)注
關(guān)注
19文章
812瀏覽量
66538
原文標(biāo)題:用 TCL 定制 Vivado 設(shè)計(jì)實(shí)現(xiàn)流程
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論