滿足設(shè)計的時序要求本身已非易事,而要實(shí)現(xiàn)某項設(shè)計的整體時序具有完全可重復(fù)性有時候卻是不可能的任務(wù)。幸運(yùn)的是,設(shè)計人員可以借助有助于實(shí)現(xiàn)可重復(fù)時序結(jié)果的設(shè)計流程概念。影響最大的四個方面分別是 HDL 設(shè)計實(shí)踐、綜合優(yōu)化、平面布局和實(shí)施方案。
就獲得可重復(fù)結(jié)果而言,資源利用和頻率要求都很高的設(shè)計是最大的挑戰(zhàn)。它們也是可重復(fù)結(jié)果流程需求最高的設(shè)計。得到可重復(fù)結(jié)果的第一步是在 HDL設(shè)計階段運(yùn)用設(shè)計合理的實(shí)踐。遵循出色的分層邊界實(shí)踐有助于保持邏輯整體性,而這在設(shè)計變更時有助于保持可重復(fù)結(jié)果。一條不錯的規(guī)則就是把那些需要整體優(yōu)化、實(shí)施和驗(yàn)證的邏輯放在同一層級。另外需要記錄模塊的輸入和輸出。這樣就可以把時序路徑保持在模塊內(nèi)部,從而避免模塊改變時引起相互影響。最后,把所有需要放入更大 FPGA資源 (如 Block RAM 或 DSP)的邏輯全部設(shè)置在相同層級。
邏輯電平
從所需 QoR 結(jié)果需要太多查詢表(LUT) 邏輯電平的設(shè)計很難獲得可重復(fù)結(jié)果。LUT 延遲一般不是問題所在,而問題是 LUT 之間的路由延遲。這在設(shè)計的高性能領(lǐng)域至關(guān)重要。
邏輯電平過多往往歸因于 i f /else結(jié)構(gòu)較大和選擇語句較長。如果合適,可以采用 “ful l_case”和 “paral lel_case” Veri log 指令優(yōu)化較少邏輯的選擇語句,這種技巧一般能夠減少邏輯電平。較大的多路復(fù)用器或者解碼器可能造成路由擁塞,從而導(dǎo)致不可重復(fù)的結(jié)果。多級注冊多路復(fù)用器 / 解碼器路徑有助于解決此問題。對于加算器而言,用注冊的加算器鏈代替注冊加算器樹可以提高性能。如果加算器全部注冊的話,則鏈會比樹造成更長時延。有關(guān)編碼最佳實(shí)踐的更多信息, 請參考賽靈思白皮書 《提高設(shè)計性能的 HDL 編碼實(shí)踐》 (WP231), http://www.xilinx.com/support/documentation/white_papers/wp231.pdf。
復(fù)位與其他控制信號
復(fù)位的選擇會影響到設(shè)計的性能、面積和功率。加電時電路初始化并不需要全局復(fù)位,但是它會對設(shè)計過程中能夠采用的資源類型產(chǎn)生重大影響。如果在 HDL 中存在全局復(fù)位,則無法推斷移位寄存器。一個移位寄存器產(chǎn)生的可重復(fù)結(jié)果比十個寄存器還多。
另外,DSP 和塊 RAM 寄存器僅僅包含同步復(fù)位。如果編碼中包含異步復(fù)位,則無法使用此類寄存器,從而迫使設(shè)計中轉(zhuǎn)而使用可配置邏輯塊 (CLB)寄存器。而把寄存器放入 DSP、塊 RAM 或者同時放入二者中更容易保持相同結(jié)果。在一般邏輯中運(yùn)用同步重置可減少邏輯電平。slice 寄存器能擁有異步或同步復(fù)位。如果設(shè)計采用同步復(fù)位,那么組合邏輯就可以采用同步置位。這樣就可以降低一個 LUT 的邏輯電平。
一個控制置位包含一組獨(dú)特的時鐘、時鐘啟用、置位與復(fù)位信號,而且在分布式 RAM 中還包含可寫入信號??刂浦梦恍畔⒎浅V匾?,因?yàn)榧拇嫫鞅仨毠蚕矸庋b在同一片中的同一控制置位信號。這可能影響封裝和利用率, 造成可重復(fù)結(jié)果問題。有關(guān)復(fù)位的更多信息,請參閱賽靈思 WP272 《復(fù)位訣竅: 考慮局部而非全局》 (http://www.xilinx.com/support/documentation/white_papers/wp272.pdf) 。有關(guān)控制置位的更多信息,請參閱WP309 《Spartan®-6 FPGA 定向與重定向指南》 (http://www.xilinx.com/support/documentation/white_papers/wp309.pdf ) 。盡管此白皮書專用于 Spartan-6器件,但其中還包含了適用于所有 FPGA的有益通用信息。
了解FPGA資源
了解什么樣的 FPGA 資源可用以及何時是最佳利用時機(jī)至關(guān)重要。一般會有綜合指令來定義使用哪些資源。例如,塊 RAM 最適合深存儲器 (deepmemory)需求,而分布式 RAM 適用于寬總線,尤其是在局部時鐘為高速數(shù)據(jù)計時的情況下。塊 RAM 和分步式 RAM在控制信號具有較大扇區(qū)出時會出現(xiàn)某種問題。重復(fù)控制信號并且采用布局規(guī)劃技巧把塊與相同信號融合在一起有助于維持可重復(fù)結(jié)果。
移位寄存器會降低設(shè)計的利用率,而其能夠促進(jìn)可重復(fù)性。有一些性能問題值得注意。SRL 的時鐘到輸出比觸發(fā)器的時鐘到輸出慢; 因此,最好把觸發(fā)器用作移位寄存器的最后一級。大部分綜合工具都能自動實(shí)現(xiàn)這一點(diǎn),但是,如果涉及移位寄存器的路徑出現(xiàn)問題,則最好確認(rèn)其最后一級是否為寄存器。
初始寄存器也存在類似問題。SRL前端設(shè)置觸發(fā)器能讓放置器有更多選以擇滿足時序要求,進(jìn)而維持結(jié)果。同樣,大部分綜合工具都能自動實(shí)現(xiàn)這一點(diǎn),但是,如果涉及移位寄存器的路徑出現(xiàn)問題,則最好確認(rèn)其最后一級是否為寄存器。
FPGA 有許多寄存器,從而使得流水線技術(shù)可在提高性能方面發(fā)揮重要作用。其中,重要的一點(diǎn)是禁用經(jīng)多重流水線優(yōu)化的觸發(fā)器 SRL 推論。上文引用的關(guān)于 HDL 編碼實(shí)踐的白皮書 (WP231)提供了關(guān)于塊 RAM 的更多信息。有關(guān)移位寄存器的更多信息,請參閱 WP271 《借助 SRL16E 節(jié)約成本》 (http://www.xi l inx.com/support/docume n t a t i o n /wh i t e _ p a p e r s /wp271.pdf ) 。
時鐘域問題
設(shè)計人員必須慎重正確約束跨越不相關(guān)時鐘域的路徑。相關(guān)工具會自動關(guān)聯(lián)來自相同源時鐘 (如 DCM)的時鐘。PERIOD 約束條件也能關(guān)聯(lián)外部時鐘。不是器件內(nèi)部創(chuàng)建的無關(guān)時鐘需要特殊考慮。系統(tǒng)默認(rèn)不約束此類時鐘。如果有特殊時序考慮,設(shè)計人員必須采用FROM:TO 約束條件正確約束相關(guān)路徑。DATAPATHONLY 關(guān)鍵詞會指示相關(guān)工具在等式中不包含時鐘偏移。
更多信息,請參閱 UG625 《賽靈思約束條件指南》 ( http://www.xilinx.com/support/documentation/ sw_manuals/xi l inx11/cgd.pdf )或者 WP257 《何為PERIOD 約束條件?》 (http://www.xilinx.com/support/documentation/ white_papers/wp257.pdf)之中的 “異步時鐘域”章節(jié)。
另外關(guān)鍵一點(diǎn)是確保不發(fā)生競態(tài)狀態(tài)。從一個領(lǐng)域跨越另一個領(lǐng)域時可以采用 FIFO。否則,設(shè)計人員需要雙重同步一個 (僅有一個)控制信號,并且在接收時鐘域利用其接收其它信號。
高扇出信號
高扇出信號通常會成為設(shè)計中的決定因素。即使大部分綜合工具支持扇出控制,在 HDL 中復(fù)用這些信號來得到可重復(fù)性更高的結(jié)果也是明智之舉。設(shè)計人員應(yīng)該把這種策略和指令結(jié)合起來,以確保綜合工具不會移除這些重復(fù)信號。如果一個高扇出信號位于邏輯頂層,則可以復(fù)用該信號,然后用單獨(dú)信號驅(qū)動每一個頂層模塊。
如果綜合工具扇出控制不能得到預(yù)期結(jié)果并且無法修改 HDL,那么在BRAM 的 MAP 邏輯中采用寄存器復(fù)用約束條件以及最高扇出約束條件,往往會產(chǎn)生比綜合更好的寄存器復(fù)用選擇。更多相關(guān)信息,請參閱 《約束條件指南》(UG625) 中的 MAX_FANOUT。做為一個常見的調(diào)試問題,跨越層級時保持一致的信號名稱更便于追蹤存在問題的路徑。如果信號名稱經(jīng)常改變,則很難追蹤時序報告和其它調(diào)試輸出。把信號方向放入所有模塊或?qū)嶓w的端口定義中也有所裨益。
綜合優(yōu)化
綜合會對可重復(fù)結(jié)果產(chǎn)生巨大影響。如果從綜合過程得不到最佳輸出網(wǎng)表,就無法在實(shí)施工具中產(chǎn)生理想條件。設(shè)計人員可以采用多種綜合技術(shù)幫助改善實(shí)施結(jié)果。
在執(zhí)行綜合時采用時序約束條件至關(guān)重要。用戶往往會在綜合過程中過度約束,然后在賽靈思實(shí)施工具中放寬時序約束條件。這樣可以增加綜合工具負(fù)擔(dān), 從而減輕實(shí)施工具的負(fù)擔(dān)。
接下來使用綜合工具產(chǎn)生的時序報告。如果一條路徑在綜合與實(shí)施過程中無法滿足時序要求,則可以修改 HDL或綜合選項,以便在綜合之后滿足時序要求。這樣可以在實(shí)施階段節(jié)約時間。
在綜合過程中得到可重復(fù)結(jié)果是在實(shí)施工具中得到可重復(fù)結(jié)果的最佳途徑。大多數(shù)綜合工具支持自下而上的流程,其為設(shè)計的頂層以及各個下層模塊建立了獨(dú)立綜合項目。用戶可以根據(jù)HDL 變更情況控制更新網(wǎng)表。大多數(shù)商用綜合工具都具有增量流程。
平面布局規(guī)劃的重要性
平面布局規(guī)劃把組件定位到設(shè)計中的一個具體位置或者范圍。這可以減少布局變化,從而提高設(shè)計的可重復(fù)性。通過平面布局規(guī)劃或者采用位置約束 (或兼而用之)通??梢詫?shí)現(xiàn)更高的性能。
也就是說,糟糕的平面布局規(guī)劃或位置約束會導(dǎo)致無法達(dá)到時序要求。平面布局規(guī)劃有一定技術(shù)含量,要求具備工具和設(shè)計方面的高級知識。你可以采用符合時序要求的實(shí)施結(jié)果做為指導(dǎo)原則來創(chuàng)建理想的布局。
如果主板需求是選擇引腳布局的
主要因素,FPGA 實(shí)施工具可能很難獲得時序維持可重復(fù)結(jié)果。但是設(shè)計人員可以借助多種有助于實(shí)現(xiàn)可重復(fù)性的技巧。
首先要清楚數(shù)據(jù)流。比如,數(shù)據(jù)會從中心 I/O 流向側(cè) I/O。可以把與總線相關(guān)的所有引腳保持在 FPGA 的同一領(lǐng)域,以此限制控制信號的布線距離。I/O總線控制信號布置在相關(guān)地址與數(shù)據(jù)總線附近。需要一起優(yōu)化的信號應(yīng)當(dāng)布置在一起。如果更關(guān)注主板布線,則在 I/O上利用流水線技術(shù)優(yōu)化寄存器有助于改進(jìn)引腳布局差強(qiáng)人意的 FPGA 布線。
區(qū)域組平面布局規(guī)劃
區(qū)域組平面布局規(guī)劃是一種高級平面布局規(guī)劃技術(shù),其定義了模塊在FPGA 之內(nèi)的位置。雖然該技術(shù)易于使用, 但常常被誤用, 從而導(dǎo)致所解決的問題比所造成問題更多這一糟糕平面布局結(jié)果。有一些出色平面布局規(guī)劃的總體指導(dǎo)原則可以幫助您避免走入上述誤區(qū)。應(yīng)當(dāng)使所有區(qū)域組保持相似的利用率。比如,應(yīng)避免讓一個分組利用率達(dá)到 60% 而讓另一個達(dá)到 99%。不要重疊區(qū)域組。唯一的例外情況是,如果兩個不同的區(qū)域組具有需要布置在一起的某些邏輯單元 , 則允許重疊 CLB 的一、兩行或列。此時用戶負(fù)責(zé)確保為兩個區(qū)域組約束提供足夠資源。
如果需要把設(shè)計的兩個不同邏輯部分放在相同物理位置,則應(yīng)當(dāng)把它們放入同一個區(qū)域組。一般允許一層嵌套,也就是父區(qū)域組中的一個子區(qū)域組。如果一個大區(qū)域組里的一小部分需要布置到某個狹窄區(qū)域, 則需要上述分層。僅對設(shè)計中的關(guān)鍵部分進(jìn)行平面布局規(guī)劃而讓相關(guān)工具決定非關(guān)鍵邏輯的布局非常重要。連接到固定資源 (如 I/O、收發(fā)器或處理器塊)的邏輯可能會從平面布局規(guī)劃中受益??梢圆捎庙樌麑?shí)施的結(jié)果做為準(zhǔn)則來確定布局或時序問題。諸如賽靈思 PlanAhead ™軟件 (圖 1)和時序分析器等工具有助于可視化顯示相關(guān)問題。
盡可能減少各個全局時鐘所用區(qū)域數(shù)量以及各個區(qū)域的時鐘 (區(qū)域與全局)數(shù)量一般會有所裨益。如果您準(zhǔn)備為某個時鐘域的增加更多邏輯,切勿過度約束,而應(yīng)當(dāng)進(jìn)行相應(yīng)規(guī)劃。如果某個時鐘域的時鐘全部投入使用,則很難找到有效布局。而 PlanAhead 軟件所提供的對齊時鐘域功能可以簡化上述平面布局規(guī)劃工作。對于擁有 10 多個時鐘域的Virtex® FPGA 設(shè)計而言,當(dāng)前實(shí)施方案所用的時鐘域位于 .map 報告文件中, 同時還附帶了 UCF 約束條件。
有關(guān)區(qū)域組平面布局規(guī)劃的更多信息,請參閱 UG632 《PlanAhead用戶指南》 (h t t p : / / w w w . x i l i n x .com/suppor t /documentat ion/sw_ma n u a l s / x i l i n x 1 1 /Pl a nAh e a d _UserGuide.pdf)以及 UG633 《平面布局方法指南》 (http://www.xi l inx.com/support/documentation/sw_manuals/xilinx12_1/Floorplanning_Methodology_Guide.pdf) 。
塊、模塊與路徑定位Block RAM、FIFO、DSP、DCM 以及全局時鐘資源等核心器件的定位往往有助于實(shí)現(xiàn)可重復(fù)性。其最佳做法是著眼于良好布局,同時采用相關(guān)設(shè)計知識布局規(guī)劃??梢圆捎?reportgen – clock_regions design.ncd 創(chuàng)建相關(guān)報告。PlanAhead 軟件能夠鎖定關(guān)鍵模塊的全部布局信息。在下一輪中,實(shí)施布局保持不變,但是并不保存布線信息。有關(guān) PlanAhead 軟件定位約束條件的更多信息,請參閱 UG632 《PlanAhead 用戶指南》 、UG633 《平面布局規(guī)劃方法指南》以及相關(guān) PlanAhead 手冊的 “設(shè)計的平面布局規(guī)劃”章節(jié)。
如果鎖定整個模塊影響過大,則可以在 PlanAhead 軟件中鎖定某條關(guān)鍵路徑。但是使用該方法時應(yīng)當(dāng)慎之又慎。如果某條具體路徑導(dǎo)致某種主要問題,最好通過修改 HDL 來解決時序問題。否求。賽靈思 SmartGuide ™ 技術(shù)是另一種維持可重復(fù)結(jié)果的選擇,最適合不強(qiáng)求最高 QoR 或最高利用率的設(shè)計。如果設(shè)計保存和 SmartGuide 技術(shù)都不適用于一種設(shè)計,則可以采用 SmartXplorer或 PlanAhead 軟件策略維護(hù)時序。
對于 QoR 需求較高的設(shè)計, 有一些高級實(shí)現(xiàn)選項可以幫助維持時序??刂评寐释蔷S持可重復(fù)結(jié)果的關(guān)鍵。隨著設(shè)計規(guī)模增大,維持可重復(fù)結(jié)果的難度也隨之提高。整個設(shè)計階段始終采用相同軟件版本有助于實(shí)現(xiàn)可重復(fù)結(jié)果。
設(shè)計保存
PlanAhead 中的設(shè)計保存流程采用分區(qū),這是能夠保證可重復(fù)結(jié)果的唯一驗(yàn)證相關(guān)位置是否適當(dāng)。在定位這些BRAM、FIFO 與 DSP 器件時需要考慮到控制信號和數(shù)據(jù)流 (總線校準(zhǔn)) ??梢栽谙嚓P(guān) .map 報告文件中找到用于定位現(xiàn)有設(shè)計的時鐘域的約束條件。保持相同的時鐘域可以防止布局器 (Placer) 修改時鐘域分區(qū),因?yàn)楹笳邥淖冊O(shè)計的則, 應(yīng)限制使用具體時序路徑定位。
實(shí)現(xiàn)選項
實(shí)現(xiàn)工具中的多種選項都可以改進(jìn)可重復(fù)性?;诜謪^(qū)的設(shè)計保存是保存實(shí)現(xiàn)方案的最佳方法,但是它并不適合于所有的設(shè)計而且確實(shí)存在 HDL 設(shè)計要方法。設(shè)計保存的主要目的是保持模塊性能的一致性,以減少時序收斂階段花費(fèi)的時間。另外,它還要求用戶盡可能遵從良好設(shè)計實(shí)踐。
分區(qū)可以保存之前實(shí)現(xiàn)的設(shè)計的不變部分。如果分區(qū)網(wǎng)表保持不變,則實(shí)現(xiàn)工具可以采用復(fù)制 - 粘貼過程保證保存該分區(qū)的實(shí)現(xiàn)數(shù)據(jù)。通過保存實(shí)現(xiàn)結(jié)果,分區(qū)可以讓你在不影響已保存部分的情況下實(shí)現(xiàn)修改后的設(shè)計部分。在圖2 中,紅色模塊已經(jīng)修改并且得到實(shí)現(xiàn),而剩下的模塊已鎖定到位。
在 12.1 版和未來版本中, PlanAhead軟件和命令行工具將支持設(shè)計保存功能。如欲了解更多信息, 請參閱 WP362 《基于設(shè)計保存的可重復(fù)結(jié)果》 (http://www.xilinx.com/support/documentation/white_papers/wp362.pdf ) 與 UG748 《分層設(shè)計方法指南》 (http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_1/Hierarchical_Design_Methodology_Guide.pdf)。
SmartGuide 技術(shù)
SmartGuide 技術(shù)在執(zhí)行實(shí)現(xiàn)方案時采用之前的實(shí)現(xiàn)結(jié)果作為起點(diǎn),其主要目的是減少運(yùn)行時間??梢赃w移引導(dǎo)布局與布線或者同時遷移二者,以便完成設(shè)計的布線或滿足時序要求。SmartGuide 技術(shù)最適合不強(qiáng)求 QoR 或利用率的設(shè)計。
以前版本的工具配套提供精準(zhǔn)引導(dǎo)(exact guide) 和杠桿 (leveraged) 引導(dǎo)。通常情況下,精準(zhǔn)引導(dǎo)方法過去會造成不可路由的設(shè)計。如果需要準(zhǔn)確保存,則建議流程是設(shè)計保存。SmartGuide 技術(shù)可替代杠桿引導(dǎo)。
設(shè)計人員經(jīng)常詢問是使用Smar tGuide 技術(shù)還是分區(qū)技術(shù),答案取決于在設(shè)計流程中所處位置。
SmartGuide 技術(shù)最適合進(jìn)行小型設(shè)計更改時的設(shè)計末期。采用此流程,可以很輕松確定所建議更改任務(wù)是否適合相關(guān)設(shè)計。分區(qū)技術(shù)需要更專注于提前遵循良好設(shè)計層次規(guī)則。在開始組織 HDL 時應(yīng)當(dāng)決定是否采用基于分區(qū)的設(shè)計保存流程。設(shè)計已經(jīng)遵循分區(qū)分層規(guī)則時則是例外情況。
如欲了解更多信息,請參閱 UG748《分層設(shè)計方法指南》 (ht tp: / /www.xi l inx.com/support /documentat ion/sw_manuals/xilinx12_1/Hierarchical_Design_Methodology_Guide.pdf )。
SmartXplorer
SmartXplorer 和 PlanAhead 軟件策略都是有助于實(shí)現(xiàn)時序收斂的相似工具,采用不同實(shí)現(xiàn)選項集確定最適合相關(guān)設(shè)計的結(jié)果。您可根據(jù)這些結(jié)果確定哪些布局可能產(chǎn)生更好的時序結(jié)果并且創(chuàng)建理想?yún)^(qū)域組布局規(guī)劃。不同的結(jié)果也可以指示某種設(shè)計問題。如果同一路徑在各次運(yùn)行時均失敗,則可以通過修改 HDL 消除時序問題。
在設(shè)計的最初階段,最好采用 MAP與 PAR 的默認(rèn)努力程度 (default effortlevel)。在最初階段采用太多高級選項可能會隱藏通過修改 HDL 即可輕松解決的時序問題。隨著器件利用率提高,工具會越來越難以達(dá)到滿足時序要求的解決方案。如果采用默認(rèn)選項,則可以采用效用更高的選項獲取設(shè)計流程后期時序的最后幾皮秒, 從而維持時序結(jié)果。LUTS/FFS 利用率較低 (<25%) 或者其利用率較高 (>75%) 的設(shè)計很難實(shí)現(xiàn)一致的布局與布線。對于利用率較高的設(shè)計, 應(yīng)當(dāng)注意其 slice 控制置位信號、復(fù)位信號 (FPGA 一般不需要同步復(fù)位/置位)以及邏輯占用 (可以在 PlanAhead中輕松執(zhí)行)或 SRL/DSP48 推理超出預(yù)期的模塊。
高利用率的對立面是低利用率。對于所有組件類型的利用率均不超過 25%的設(shè)計,低利用率算法可以起作用并且能夠?qū)崿F(xiàn)組件的緊密布局。但是, 如果 I/O 利用率超過 25%,則實(shí)現(xiàn)工具可以把設(shè)計分散開,以便把邏輯保持在 I/O 附近。I/O 的謹(jǐn)慎布局以及采用區(qū)域組能夠盡可能緩解上述問題。
軟件版本
在時序收斂階段應(yīng)當(dāng)盡量采用同一主要軟件版本。因?yàn)椴煌陌姹舅惴ㄒ舶l(fā)生改變,適用于一個版本的算法方法在其它情況下未必有效。另外,根據(jù)以前結(jié)果 (分區(qū)與 SmartGuide 技術(shù))獲得的方法可能不適用于主要版本。
促進(jìn)設(shè)計可重復(fù)性的最佳方法是在HDL 中遵循良好設(shè)計方法并且通過修改HDL 解決所有時序問題。如果不可行,則可以借助于綜合、布局規(guī)劃和實(shí)現(xiàn)技術(shù)。基于分區(qū)的設(shè)計保存是可以保證實(shí)例性能的流程。SmartGuide 技術(shù)是另一種可采用以前實(shí)現(xiàn)結(jié)果的解決方案。