UltraFast是Xilinx在2013年底推出的一套設(shè)計(jì)方法學(xué)指導(dǎo),旨在指引用戶最大限度地利用現(xiàn)有資源,提升系統(tǒng)性能,降低風(fēng)險(xiǎn),實(shí)現(xiàn)更快速且可預(yù)期的設(shè)計(jì)。面向Vivado的UltraFast方法學(xué)的主體是UG949文檔,配合相應(yīng)的Checklist,隨Vivado版本同時(shí)更新,用戶可以在Xilinx的主頁上免費(fèi)下載。目前,針對(duì)Vivado設(shè)計(jì)套件的UltraFast中文版也已經(jīng)上市,另外一套全新的針對(duì)嵌入式可編程設(shè)計(jì)的UltraFast嵌入式設(shè)計(jì)方法指南UG1046也已經(jīng)在Xilinx官網(wǎng)上開放下載。
盡管UltraFast這個(gè)字眼經(jīng)常在網(wǎng)上看到,不論官方還是其他媒體上說起Vivado設(shè)計(jì)套件時(shí)也常常提到,但很多用戶仍然對(duì)這個(gè)概念十分模糊,有不少人下載文檔后看到300頁的PDF頓時(shí)也失去了深入學(xué)習(xí)和了解的興趣。
適逢《Vivado使用誤區(qū)與進(jìn)階》系列連載半年多,大部分預(yù)先列好的主題也都已經(jīng)按照計(jì)劃完成,我們準(zhǔn)備把這些短文集結(jié)為一本電子書,方便更多讀者隨手翻閱或是必要時(shí)用作設(shè)計(jì)參考。借此機(jī)會(huì),套用在Xilinx內(nèi)部被譽(yù)為 “Vivado之父”的產(chǎn)品營(yíng)銷總監(jiān) Greg Daughtry在去年第一屆Club Vivado中所提出的 “時(shí)序收斂十大準(zhǔn)則” 的概念,試著用十分鐘的篇幅來概括一下什么是UltraFast,以及怎樣利用UItraFast真正幫助我們的FPGA設(shè)計(jì)。
時(shí)序設(shè)計(jì)的十大準(zhǔn)則,基本上也涵蓋了UltraFast設(shè)計(jì)方法指南的基本要點(diǎn)。UG949中將FPGA設(shè)計(jì)分為設(shè)計(jì)創(chuàng)建、設(shè)計(jì)實(shí)現(xiàn)和設(shè)計(jì)收斂幾大部分來討論,除了介紹所有可用的設(shè)計(jì)方法和資源,更多的是一些高級(jí)方法學(xué)技巧,這些技巧基本上都跟時(shí)序收斂有關(guān)或是以時(shí)序收斂為目標(biāo),有些通用的方法和技巧甚至脫離了具體選用的FPGA器件的限制,適用于更廣泛意義上的時(shí)序收斂。
最寶貴的是,所有這些UltraFast設(shè)計(jì)方法學(xué)技巧都來自一線技術(shù)支持人員的經(jīng)驗(yàn)以及客戶的反饋,是業(yè)界第一本真正意義上完全面向用戶的指南,這一點(diǎn)只要你試著讀過一兩節(jié)UG949就會(huì)有明顯感覺,所有其中提到的技巧和方法都具有很高的可操作性,可以帶來立竿見影的效果。
接下來我們就由這十大準(zhǔn)則展開,帶領(lǐng)各位讀者在十分鐘內(nèi)理清UltraFast方法學(xué)的脈絡(luò),一探其究竟。
準(zhǔn)則一:合適的代碼風(fēng)格
理想環(huán)境下,源代碼可以獨(dú)立于最終用于實(shí)現(xiàn)的器件,帶來最佳的可移植性和可復(fù)用性。但是,底層器件各自獨(dú)特的結(jié)構(gòu),決定了通用代碼的效率不佳,要最大化發(fā)揮硬件的性能,必然需要為實(shí)現(xiàn)工具和器件量身定制代碼。
關(guān)于Xilinx器件和Vivado適用的代碼風(fēng)格,我們有以下建議:
?
準(zhǔn)則二:精準(zhǔn)的時(shí)序約束
精準(zhǔn)的時(shí)序約束是設(shè)計(jì)實(shí)現(xiàn)的基礎(chǔ),對(duì)時(shí)序驅(qū)動(dòng)工具Vivado來說,約束就是最高指示,是其努力實(shí)現(xiàn)的目標(biāo)。很多時(shí)候我們發(fā)現(xiàn),約是有經(jīng)驗(yàn)的工程師約是喜歡用一些舊有經(jīng)驗(yàn)套用在Vivado上,例如很多人偏愛用過約束的方式來追求更高的性能,但實(shí)際上對(duì)Vivado來說,大部分的過約束只會(huì)阻礙時(shí)序收斂。
簡(jiǎn)要概括而言,精簡(jiǎn)而準(zhǔn)確的約束是時(shí)序收斂的必要條件,而UltraFast中提出的Baseline基線方法則是充分條件。
具體的約束方法我們?cè)凇禭DC約束技巧》中有詳細(xì)討論,除了保證語法正確,還要注意設(shè)置XDC約束的順序,通常第一次運(yùn)行時(shí)只需要約束所有時(shí)鐘,然后在內(nèi)部路徑基本滿足時(shí)序約束的情況下加入關(guān)鍵I/O的約束,其次再考慮必要的時(shí)序例外約束。
所有這些約束都必須遵循精簡(jiǎn)而準(zhǔn)確的原則,且可以借助Vivado中的XDC Templates以及Timing Constraint Wizard的幫助來進(jìn)行。
Baseline基線方法可以說是UltraFast的靈魂部分,強(qiáng)烈建議所有Vivado的用戶都能精讀UG949中的這部分內(nèi)容,并將之應(yīng)用在具體的設(shè)計(jì)中。有機(jī)會(huì)我會(huì)深入展開一篇專門介紹Baseline方法的短文,這里先將其核心的概念做一個(gè)總結(jié)。
?
?
上圖展示了同一個(gè)設(shè)計(jì)在三個(gè)不同階段用同樣的命令報(bào)告時(shí)序所得到的最差路徑,可以清晰的看出,即使不做任何源代碼上的改動(dòng),設(shè)計(jì)中真正最差的路徑已經(jīng)不會(huì)作為最差路徑出現(xiàn)在布局布線后的報(bào)告中。這正是因?yàn)閂ivado時(shí)序驅(qū)動(dòng)的天性決定了其在設(shè)計(jì)實(shí)現(xiàn)的每一步都是以開始時(shí)讀到的設(shè)計(jì)輸入和約束為依據(jù),盡量將最好的資源用在最差的路徑上,從而盡最大可能實(shí)現(xiàn)時(shí)序收斂。
這便是Baseline理論的基礎(chǔ),除了按順序設(shè)置精準(zhǔn)的時(shí)序約束,在設(shè)計(jì)實(shí)現(xiàn)的每一步,用戶都需要關(guān)注時(shí)序報(bào)告,并以其為依據(jù)來調(diào)整設(shè)計(jì)源代碼或是應(yīng)用其他必要的約束和選項(xiàng)來優(yōu)化設(shè)計(jì)。保證每一階段之后的時(shí)序報(bào)告都滿足約束或是僅余300ps以內(nèi)的時(shí)序違例,再進(jìn)入下一階段的設(shè)計(jì)實(shí)現(xiàn)過程,否則,應(yīng)該繼續(xù)在當(dāng)前階段或是退回到上一階段調(diào)整后重跑設(shè)計(jì),直到滿足要求再繼續(xù)。
越早發(fā)現(xiàn)和定位問題,越是可以通過少量的努力來達(dá)到更大范圍的改進(jìn)。
準(zhǔn)則三:管理高扇出網(wǎng)絡(luò)
高扇出網(wǎng)絡(luò)幾乎是限制FPGA設(shè)計(jì)實(shí)現(xiàn)更高性能的第一大障礙,所以我們需要很嚴(yán)肅地對(duì)待設(shè)計(jì)中的高扇出網(wǎng)絡(luò)。
很多人會(huì)陷入一個(gè)誤區(qū),反復(fù)糾結(jié)到底多大的扇出值算是大?其實(shí)這一點(diǎn)不是絕對(duì)的,在資源充裕時(shí)序要求不高的情況下幾千甚至上萬都不算大,反之在局部關(guān)鍵路徑上僅有幾十的扇出也可能需要進(jìn)一步降低。
在Vivado中,我們除了關(guān)注時(shí)序報(bào)告,尤其是布局后布線前的報(bào)告來定位關(guān)鍵路徑上影響時(shí)序的高扇出網(wǎng)絡(luò)外,還有一個(gè)專門的命令report_high_fanout_nets ,在給其加上 -timing的選項(xiàng)后,可以在報(bào)告高扇出路徑的同時(shí)報(bào)告出這條路徑的Slack,幫助用戶直觀了解當(dāng)前路徑的時(shí)序裕量。此外,這個(gè)命令在報(bào)告中還會(huì)指出高扇出網(wǎng)絡(luò)的驅(qū)動(dòng)類型,是FF或是LUT等。
找到目標(biāo)后,可以利用max_fanout來限定其扇出值,讓工具在實(shí)現(xiàn)過程中復(fù)制驅(qū)動(dòng)端寄存器來優(yōu)化。如果高扇出網(wǎng)絡(luò)并不是由同步邏輯來驅(qū)動(dòng),則可能需要修改代碼。還有一些工具層面上的降扇出方法,比如選擇更強(qiáng)更有針對(duì)性的策略,或是允許多次物理優(yōu)化phys_opt_design,甚至是通過我們?cè)凇队肨cl定制Vivado設(shè)計(jì)實(shí)現(xiàn)流程》中提到的“鉤子”腳本等方式來進(jìn)行局部降扇出的物理優(yōu)化等等。
但有一點(diǎn)需要注意,Vivado綜合選項(xiàng)中的全局扇出限定要慎用 ,不要將其設(shè)置的過低以免綜合出的網(wǎng)表過于龐大,帶來資源上的浪費(fèi),并可能導(dǎo)致局部擁塞。
準(zhǔn)則四:層次化設(shè)計(jì)結(jié)構(gòu)
隨著設(shè)計(jì)規(guī)模的不斷擴(kuò)大,以及SoC設(shè)計(jì)的興起,越來越多的IP被整合到大設(shè)計(jì)中,曾經(jīng)為高性能設(shè)計(jì)而生,便于統(tǒng)一管理和控制的自頂向下的設(shè)計(jì)流程變得不再適用,F(xiàn)PGA設(shè)計(jì)也跟大規(guī)模SoC設(shè)計(jì)一樣,需要采用層次化的設(shè)計(jì)流程,即自底向上的流程。這也要求設(shè)計(jì)者在源代碼階段就考慮到最終的實(shí)現(xiàn),處理好模塊的層次邊界。
Vivado中的IP設(shè)計(jì)是原生的自底向上流程,用戶可以將IP生成獨(dú)立的DCP再加入到頂層設(shè)計(jì)中去。我們也鼓勵(lì)用戶將某些相對(duì)固定或獨(dú)立的模塊綜合成DCP后加入頂層設(shè)計(jì),這么做除了加快設(shè)計(jì)迭代外,也更利于設(shè)計(jì)開始階段的調(diào)試和問題的定位。
Vivado中的OOC模式甚至還支持完全層次化的設(shè)計(jì),即將底層模塊的布局布線結(jié)果也進(jìn)行復(fù)用,這么做雖然流程復(fù)雜,卻帶來了更全面的控制性,也是部分可重配置技術(shù)的實(shí)現(xiàn)基礎(chǔ)。
準(zhǔn)則五:處理跨時(shí)鐘域設(shè)計(jì)
FPGA設(shè)計(jì)中通常都帶有跨時(shí)鐘域的路徑,如何處理這些CDC路徑非常重要。由于Vivado支持的約束標(biāo)準(zhǔn)XDC在處理CDC路徑上與上一代ISE中支持的UCF約束有本質(zhì)區(qū)別,如何約束以及怎樣從設(shè)計(jì)上保證CDC路徑的可靠性就成了重中之重。
《XDC約束技巧之CDC篇》中對(duì)Vivado中的跨時(shí)鐘域設(shè)計(jì)有詳細(xì)描述,UG949中也有不少篇幅用來討論CDC路徑的各種設(shè)計(jì)技巧和約束方法。建議用戶深入學(xué)習(xí)和了解這部分的內(nèi)容,其中有不少概念并不僅僅局限于FPGA設(shè)計(jì)中的跨時(shí)鐘域設(shè)計(jì),放在其他IC設(shè)計(jì)上也一樣有效。
需要提醒大家的是,一定要利用好Vivado中的各種報(bào)告功能,例如report_cdc和DRC報(bào)告中的methodology_checks來檢測(cè)設(shè)計(jì)中的CDC結(jié)構(gòu)問題,并作出具體的設(shè)計(jì)調(diào)整或是補(bǔ)全CDC約束。另外要注意各種不同的CDC路徑處理方法之間的優(yōu)劣,選擇最適合自己設(shè)計(jì)的方式,配合相應(yīng)的約束來保證跨時(shí)鐘域路徑的安全。
準(zhǔn)則六:少而精的物理約束
不同于對(duì)時(shí)序約束尤其是時(shí)鐘約束之全面而精準(zhǔn)的要求,Vivado對(duì)物理約束的要求只有一個(gè)字:少。這里的物理約束更多強(qiáng)調(diào)的是除了I/O引腳位置這些必要項(xiàng)之外的約束,例如對(duì)RAMB和DSP48的位置約束,還有局部的floorplan計(jì)劃。
很多資深工程師非常喜歡畫floorplan,因?yàn)槠鋵?duì)設(shè)計(jì)的數(shù)據(jù)流和資源使用情況了如指掌,根據(jù)自己理解畫出的floorplan通常也算合理。但是,floorplan在Vivado中的重要性遠(yuǎn)低于以往在ISE上的作用。根據(jù)客戶的實(shí)際經(jīng)驗(yàn)反饋,絕大多數(shù)的設(shè)計(jì)中都無需任何floorplan(某些時(shí)序要求較高的SSI芯片設(shè)計(jì)上可能需要),因?yàn)?a href="http://www.www27dydycom.cn/v/tag/2562/" target="_blank">算法的改進(jìn),Vivado在布局上比上一代ISE更聰明,沒有任何物理約束(除了IO引腳位置約束)的設(shè)計(jì)反而能在更短的時(shí)間內(nèi)更好地滿足時(shí)序要求。
在確實(shí)需要鎖定某些宏單元以及進(jìn)行floorplan的設(shè)計(jì)中,一般我們會(huì)推薦先不加任何物理約束來跑設(shè)計(jì),在其他諸如改進(jìn)源代碼,設(shè)置約束和選項(xiàng),改變策略等辦法都試過后,再嘗試物理約束。而且,最好只在少量關(guān)鍵的設(shè)計(jì)區(qū)域進(jìn)行floorplan,切忌過度約束,不要?jiǎng)?chuàng)建資源利用率過高的pblocks,同時(shí)避免重疊的pblocks區(qū)域。
順便提一下,Vivado IDE中的Device視圖可以通過設(shè)置不同顏色來高亮顯示不同模塊,用戶可以根據(jù)當(dāng)前設(shè)計(jì)的布局結(jié)果配合時(shí)序報(bào)告和關(guān)鍵路徑來創(chuàng)建和調(diào)整floorplan,操作非常便捷。
?
?
準(zhǔn)則七:選擇實(shí)現(xiàn)策略
從ISE升級(jí)到Vivado后,很多用戶發(fā)現(xiàn)SmartXplorer功能不見了,當(dāng)設(shè)計(jì)進(jìn)行到后期,假如不能遍歷種子,常讓人感到無所適從,甚至懷疑到了這一步Vivado便無計(jì)可施。那么事實(shí)到底如何呢?
嚴(yán)格來講,Cost Table 其實(shí)是一種無奈之舉,說明工具只能通過隨機(jī)種子的改變來“撞大運(yùn)”般篩選出一個(gè)最佳結(jié)果,這也解釋了為何改變Cost Table的結(jié)果是隨機(jī)的,一次滿足時(shí)序,并不代表一直可以滿足。
因?yàn)楦呒?jí)算法的引入,Vivado中的設(shè)計(jì)實(shí)現(xiàn)變得更加可靠,而且是真正意義上的可預(yù)計(jì)的結(jié)果。但這并不代表在Vivado中對(duì)同一個(gè)設(shè)計(jì)進(jìn)行布局布線只能有一種結(jié)果。我們可以通過“策略”來控制實(shí)現(xiàn)過程中的算法側(cè)重,從而可以產(chǎn)生更優(yōu)化的結(jié)果。
策略(Strategy)是一組工具選項(xiàng)和各個(gè)階段指示(Directive)的組合,Vivado IDE中內(nèi)置了幾十種可供用戶直接選用,但如果窮盡各種組合,整個(gè)實(shí)現(xiàn)過程大約有上千種策略。當(dāng)然,我們沒必要遍歷每種策略。而且因?yàn)椴呗允且环N可預(yù)計(jì)可重現(xiàn)的實(shí)現(xiàn)方法,所以對(duì)同一個(gè)設(shè)計(jì),可以在選擇幾種有側(cè)重點(diǎn)的策略后挑選出效果最好的那個(gè),只要設(shè)計(jì)后期沒有大的改動(dòng),便可一直延用同樣的策略。
具體策略的特性,請(qǐng)參考UG949和UG904等文檔,也可以在Vivado中通過help菜單了解。更多時(shí)候,選擇怎樣的策略是一種經(jīng)驗(yàn)的體現(xiàn),另外,即使找到了最佳實(shí)現(xiàn)策略,也仍舊有可能不滿足時(shí)序要求,這時(shí)候我們還可以參考《用Tcl定制Vivado設(shè)計(jì)實(shí)現(xiàn)流程》中所述,對(duì)設(shè)計(jì)實(shí)現(xiàn)的流程進(jìn)行進(jìn)一步的個(gè)性化定制。
另外要強(qiáng)調(diào)一點(diǎn),修改策略來提升性能必須放在調(diào)整代碼、約束和選項(xiàng)等更直接高效的優(yōu)化方法之后進(jìn)行,其能帶來的性能提升比起前述優(yōu)化方法來說也更加局限。
準(zhǔn)則八:共享控制信號(hào)
共享控制信號(hào)這一點(diǎn)充分體現(xiàn)了設(shè)計(jì)必須考慮到用于底層實(shí)現(xiàn)的芯片結(jié)構(gòu)的重要性,在Xilinx的芯片上,時(shí)鐘、置位/復(fù)位和時(shí)鐘使能等信號(hào)通稱為Control Set,進(jìn)入同一個(gè)SLICE的Control Set必須統(tǒng)一。換句話說,不同Control Set控制下的FFs不能被Vivado放進(jìn)同一個(gè)SLICE。
為了提升SLICE的利用率,獲得更高效的布局方案,提升時(shí)序性能,我們必須控制一個(gè)設(shè)計(jì)中Control Set的總數(shù),盡量共享控制信號(hào)。具體做法包括:
盡量整合頻率相同的時(shí)鐘和時(shí)鐘使能信號(hào);
在生成IP時(shí)選擇“共享邏輯”功能,則可以在不同IP間盡可能的共享時(shí)鐘資源;
遵循Xilinx建議的復(fù)位準(zhǔn)則:
盡量少使用復(fù)位
必須復(fù)位時(shí)采用同步復(fù)位
確保使用高電平有效的復(fù)位
避免異步復(fù)位(RAMB和DSP48模塊中不支持異步復(fù)位)
Xilinx的復(fù)位準(zhǔn)則必須嚴(yán)格遵守,根據(jù)現(xiàn)場(chǎng)支持的經(jīng)驗(yàn)來看,很多設(shè)計(jì)性能的瓶頸就在于設(shè)計(jì)源代碼時(shí)沒有考慮底層實(shí)現(xiàn)器件的硬件結(jié)構(gòu)特點(diǎn),尤其以復(fù)位信號(hào)的實(shí)現(xiàn)問題最為突出。
準(zhǔn)則九:讀懂日志和報(bào)告
任何一個(gè)工具的日志和報(bào)告都是衡量其性能最重要的一環(huán),正因?yàn)橛辛送陚涞娜罩九c報(bào)告,用戶才可以通過其中顯示的信息,定位設(shè)計(jì)中可能的問題,決定優(yōu)化方向。
Vivado日志中將信息顯示為三大類,分別為Error、Critical Warning和一般Warning/Notes等。Error會(huì)導(dǎo)致工具直接中斷,其他警告不會(huì)中斷工具運(yùn)行,但所有的Critical Warning都需要用戶逐一檢查并通過修改設(shè)計(jì)、增加約束或設(shè)置選項(xiàng)之類的辦法來修復(fù)。
Vivado的報(bào)告功能很強(qiáng)大,除了《讀懂用好Timing Report》中描述的時(shí)序分析報(bào)告,還有很多重要的報(bào)告,小到檢查設(shè)計(jì)中的特定時(shí)序元件和鏈路,大到各種預(yù)置和自定義的DRC檢查,不僅提供給了用戶多樣的選擇,也進(jìn)一步保證了設(shè)計(jì)的可靠性。
Vivado也一直在增強(qiáng)和更新報(bào)告的種類,比如2014.3之后還增加了一個(gè)設(shè)計(jì)分析報(bào)告report_design_analysis,用來報(bào)告關(guān)鍵路徑上的潛在問題以及設(shè)計(jì)的擁塞程度。完整的report命令和功能可以在UG835中查詢。
準(zhǔn)則十:發(fā)揮Tcl的作用
Tcl在Vivado中的作用不容小覷,不僅設(shè)計(jì)流程和報(bào)告全面支持Tcl腳本,就連XDC約束根本上也來自于Tcl,用戶甚至可以直接把包含有循環(huán)等功能的高級(jí)約束以Tcl的形式讀入Vivado中用來指引整個(gè)實(shí)現(xiàn)流程。
《Vivado使用誤區(qū)與進(jìn)階》系列中有三篇關(guān)于Tcl在Vivado中的應(yīng)用文章,詳細(xì)描述了如何使用Tcl創(chuàng)建和應(yīng)用約束,查找目標(biāo)和定位問題;如何用Tcl來定制Vivado的設(shè)計(jì)實(shí)現(xiàn)流程,為圖形化界面提供更多擴(kuò)展支持;以及如何用Tcl實(shí)現(xiàn)ECO流程。Tcl所帶來的強(qiáng)大的可擴(kuò)展性決定了其在版本控制、設(shè)計(jì)自動(dòng)化流程等方面具有圖形化界面不能比擬的優(yōu)勢(shì),也解釋了為何高端FPGA用戶和熟練的Vivado用戶都更偏愛Tcl腳本。
另外,隨著Xilinx Tcl Store的推出,用戶可以像在App Store中下載使用app一樣下載使用Tcl腳本,簡(jiǎn)化了Tcl在Vivado上應(yīng)用的同時(shí),進(jìn)一步擴(kuò)展了Tcl的深入、精細(xì)化使用。最重要的是,Tcl Store是一個(gè)基于GitHub的完全開源的環(huán)境,當(dāng)然也歡迎大家上傳自己手中有用的Tcl腳本,對(duì)其進(jìn)行補(bǔ)充。
小結(jié)
關(guān)于UltraFast的要點(diǎn)總結(jié)基本可以概括在上述十點(diǎn),這也可以看作是對(duì)《Vivado使用誤區(qū)與進(jìn)階》系列短文的一個(gè)串燒。說實(shí)話,八九頁的篇幅要將整個(gè)UltraFast講透基本沒有可能,對(duì)于正在使用Vivado做設(shè)計(jì)或是有興趣試用的讀者們,強(qiáng)烈建議各位在Xilinx官網(wǎng)絡(luò)下載完整的UltraFast指南并通讀。
這篇短文和這本電子書旨在幫助大家盡快上手Vivado和XDC,寶劍在手,再加上蓋世神功傍身,行走江湖豈不快哉。衷心祝福大家在FPGA設(shè)計(jì)之路上收獲更多喜悅,讓Xilinx和Vivado為您的成功助力。
評(píng)論