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