從最近一段時(shí)間工作和學(xué)習(xí)的成果中,我總結(jié)了如下幾種進(jìn)行時(shí)序約束的方法,。按照從易到難的順序排列如下:
1. 核心頻率約束
這是最基本的,,所以標(biāo)號(hào)為0。
2. 核心頻率約束+時(shí)序例外約束
時(shí)序例外約束包括FalsePath,、MulticyclePath,、MaxDelay、MinDelay,。但這還不是最完整的時(shí)序約束,。如果僅有這些約束的話,說明設(shè)計(jì)者的思路還局限在FPGA芯片內(nèi)部,。
3. 核心頻率約束+時(shí)序例外約束+I/O約束
I/O約束包括引腳分配位置,、空閑引腳驅(qū)動(dòng)方式、外部走線延時(shí)(InputDelay,、OutputDelay),、上下拉電阻、驅(qū)動(dòng)電流強(qiáng)度等,。加入I/O約束后的時(shí)序約束,,才是完整的時(shí)序約束。FPGA作為PCB上的一個(gè)器件,,是整個(gè)PCB系統(tǒng)時(shí)序收斂的一部分,。FPGA作為PCB設(shè)計(jì)的一部分,是需要PCB設(shè)計(jì)工程師像對待所有COTS器件一樣,,閱讀并分析其I/O TIming Diagram的,。FPGA不同于COTS器件之處在于,其I/O TIming是可以在設(shè)計(jì)后期在一定范圍內(nèi)調(diào)整的,;雖然如此,,最好還是在PCB設(shè)計(jì)前期給與充分的考慮并歸入設(shè)計(jì)文檔。 riple
正因?yàn)镕PGA的I/O TIming會(huì)在設(shè)計(jì)期間發(fā)生變化,,所以準(zhǔn)確地對其進(jìn)行約束是保證設(shè)計(jì)穩(wěn)定可控的重要因素,。許多在FPGA重新編譯后,F(xiàn)PGA對外部器件的操作出現(xiàn)不穩(wěn)定的問題都有可能是由此引起的,。
4. 核心頻率約束+時(shí)序例外約束+I/O約束+Post-fit Netlist
引入Post-fit Netlist的過程是從一次成功的時(shí)序收斂結(jié)果開始,,把特定的一組邏輯(Design ParTItion)在FPGA上實(shí)現(xiàn)的布局位置和布線結(jié)果(Netlist)固定下來,保證這一布局布線結(jié)果可以在新的編譯中重現(xiàn),,相應(yīng)地,,這一組邏輯的時(shí)序收斂結(jié)果也就得到了保證。這個(gè)部分保留上一次編譯結(jié)果的過程就是Incremental Compilation,,保留的網(wǎng)表類型和保留的程度都可以設(shè)置,,而不僅僅局限于Post-fit Netlist,,從而獲得相應(yīng)的保留力度和優(yōu)化效果。由于有了EDA工具的有力支持,,雖然是精確到門級(jí)的細(xì)粒度約束,,設(shè)計(jì)者只須進(jìn)行一系列設(shè)置操作即可,不需要關(guān)心布局和布線的具體信息,。由于精確到門級(jí)的約束內(nèi)容過于繁多,,在qsf文件中保存不下,得到保留的網(wǎng)表可以以Partial Netlist的形式輸出到一個(gè)單獨(dú)的文件qxp中,,配和qsf文件中的粗略配置信息一起完成增量編譯,。
5. 核心頻率約束+時(shí)序例外約束+I/O約束+LogicLock
LogicLock是在FPGA器件底層進(jìn)行的布局約束。LogicLock的約束是粗粒度的,,只規(guī)定設(shè)計(jì)頂層模塊或子模塊可以調(diào)整的布局位置和大?。↙ogicLock Regions)。成功的LogicLock需要設(shè)計(jì)者對可能的時(shí)序收斂目標(biāo)作出預(yù)計(jì),,考慮特定邏輯資源(引腳,、存儲(chǔ)器、DSP)與LogicLock Region的位置關(guān)系對時(shí)序的影響,,并可以參考上一次時(shí)序成功收斂的結(jié)果,。這一權(quán)衡和規(guī)劃FPGA底層物理布局的過程就是FloorPlanning,。LogicLock給了設(shè)計(jì)者對布局位置和范圍更多的控制權(quán),,可以有效地向EDA工具傳遞設(shè)計(jì)者的設(shè)計(jì)意圖,避免EDA工具由于缺乏布局優(yōu)先級(jí)信息而盲目優(yōu)化非關(guān)鍵路徑,。由于模塊在每一次編譯中的布局位置變化被限定在了最優(yōu)的固定范圍內(nèi),,時(shí)序收斂結(jié)果的可重現(xiàn)性也就更高。由于其粗粒度特性,,LogicLock的約束信息并不很多,,可以在qsf文件中得到保留。
需要注意的是,,方法3和4經(jīng)??梢曰旌鲜褂茫瘁槍loorPlanning指定的LogicLock Region,,把它作為一個(gè)Design Partition進(jìn)行Incremental Compilation,。這是造成上述兩種方法容易混淆的原因。
6. 核心頻率約束+時(shí)序例外約束+I/O約束+寄存器布局約束
寄存器布局約束是精確到寄存器或LE一級(jí)的細(xì)粒度布局約束,。設(shè)計(jì)者通過對設(shè)計(jì)施加精準(zhǔn)的控制來獲得可靠的時(shí)序收斂結(jié)果,。對設(shè)計(jì)中的每一個(gè)寄存器手工進(jìn)行布局位置約束并保證時(shí)序收斂是一項(xiàng)浩大的工程,這標(biāo)志著設(shè)計(jì)者能夠完全控制設(shè)計(jì)的物理實(shí)現(xiàn),。這是一個(gè)理想目標(biāo),,是不可能在有限的時(shí)間內(nèi)完成的,。通常的做法是設(shè)計(jì)者對設(shè)計(jì)的局部進(jìn)行寄存器布局約束并通過實(shí)際運(yùn)行布局布線工具來獲得時(shí)序收斂的信息,通過數(shù)次迭代逼近預(yù)期的時(shí)序目標(biāo),。
不久前我看到過一個(gè)這樣的設(shè)計(jì):一個(gè)子模塊的每一個(gè)寄存器都得到了具體的布局位置約束,。該模塊的時(shí)序收斂也就相應(yīng)地在每一次重新編譯的過程中得到了保證,。經(jīng)過分析,,這一子模塊的設(shè)計(jì)和約束最初是在原理圖中進(jìn)行的,在達(dá)到時(shí)序收斂目標(biāo)后該設(shè)計(jì)被轉(zhuǎn)換為HDL語言描述,,相應(yīng)的約束也保存到了配置文件中,。
7. 核心頻率約束+時(shí)序例外約束+I/O約束+特定路徑延時(shí)約束
好的時(shí)序約束應(yīng)該是“引導(dǎo)型”的,,而不應(yīng)該是“強(qiáng)制型”的。通過給出設(shè)計(jì)中關(guān)鍵路徑的時(shí)序延遲范圍,,把具體而微的工作留給EDA工具在該約束的限定范圍內(nèi)自由實(shí)現(xiàn),。這也是一個(gè)理想目標(biāo),需要設(shè)計(jì)者對每一條時(shí)序路徑都做到心中有數(shù),,需要設(shè)計(jì)者分清哪些路徑是可以通過核心頻率和簡單的時(shí)序例外約束就可以收斂的,,哪些路徑是必須制定MaxDelay和MinDelay的,一條也不能遺漏,,并且還需要EDA工具“善解人意”的有力支持,。設(shè)定路徑延時(shí)約束就是間接地設(shè)定布局布線約束,但是比上述3,、4,、5的方法更靈活,而且不失其準(zhǔn)確性,。通過時(shí)序約束而不是顯式的布局和網(wǎng)表約束來達(dá)到時(shí)序收斂才是時(shí)序約束的真諦,。
記得有網(wǎng)友說過“好的時(shí)序是設(shè)計(jì)出來的,不是約束出來的”,,我一直把這句話作為自己進(jìn)行邏輯設(shè)計(jì)和時(shí)序約束的指導(dǎo),。好的約束必須以好的設(shè)計(jì)為前提。沒有好的設(shè)計(jì),,在約束上下再大的功夫也是沒有意義的,。不過,通過正確的約束也可以檢查設(shè)計(jì)的優(yōu)劣,,通過時(shí)序分析報(bào)告可以檢查出設(shè)計(jì)上時(shí)序考慮不周的地方,,從而加以修改。通過幾次“分析—修改—分析”的迭代也可以達(dá)到完善設(shè)計(jì)的目標(biāo),。應(yīng)該說,,設(shè)計(jì)是約束的根本,約束是設(shè)計(jì)的保證,,二者是相輔相成的關(guān)系,。