本文闡明了InTime和Xilinx軟件是如何通過調整編譯參數以及運行并行編譯來優化FPGA時序性能的。InTime通過機器學習來決定一個FPGA設計的綜合和布局布線的最佳配置組合。通過和計算服務器的連接,InTime迅速地優化時序,同時也解決了用戶流程自動化所面臨的限制。
?
介紹
傳統時序優化的方法和訓練方向主要集中在檢查和改善RTL代碼或是時序約束。盡管這種方法行之有效,但在實戰中因為技術和商業方面的限制,很多更改都不可能真正的執行下去。比如某些對設計比較大的修改,可能會讓產品的發布日期承擔滯后的風險。當下盛行可重復使用的設計模塊,設計中經常會出現不能輕易更改的第三方IP核。最糟糕情況的解決方案(“worst-case scenario” solution)也不過就是把目標器件升級到一個更大的或是有更快速度等級的版本,盡管它們都將帶來一筆不小的花費。
萬幸的是,當今FPGA工具(比如Xilinx的Vivado)都有很多開關和設置選項來幫助時序收斂。InTime的方法,就是通過調整FPGA工具的編譯過程來解決用戶的時序問題和其他性能問題。Xilinx 的ISE和Vivado軟件包含了很多綜合和布局布線的參數,每一項都至少有兩個值可以直接影響最終結果。InTime幫助設計師深入挖掘這些工具的性能,以達到要求的結果。
上圖是一個客戶案例,X軸代表采用不同綜合和布局布線的編譯批次,Y軸顯示的是失敗最差余量(FailingWorst Slack, 0代表時序通過)的絕對值,單位為納秒。在這里您可以清楚地看到InTime把失敗最差余量從-0.45ns(-450ps)減少到了0ns,僅通過調整編譯參數就達到了時序目標,而且對設計沒有任何變動。
很多情況下,用戶經常使用默認的綜合和布局布線的參數。因為不確定會有什么后果,很少有人會嘗試改變這些參數。再加上很多參數是相互聯動的,多個參數如果被同時設置錯誤會讓時序變得更加糟糕;所以調試參數這項任務,就變得更加舉步維艱。
了解InTime的流程
InTime 使用機器學習來探索FPGA編譯過程中不同的參數設置。下面要說明的技術重點關注在性能達到峰值之前,生成足夠的數據點。
這里有一個非常關鍵的概念,叫做“配方”。InTime的優化技術被歸結成不同的配方,配方又被分類成“Learning”配方和“Last Mile”配方。
分類的原因是因為編譯是一種高強度的計算過程。獲得新數據的運行時間成本很高(一般人耐心也很有限),所以每個配方不能無限地運行,必須要根據結果改善的情況來限制Learning的運行數。一旦結果達到穩定(由花費時間和結果改善所決定的投資回報率逐漸減少),用戶就會切換到Last Mile配方。Last Mile 配方采用一種高度隨機的技巧,設計離目標性能越近,這個配方就工作地越好。例如,如果把目前取得的最好結果當作一個參考,Last Mile配方會隨機對不同的邏輯單元進行布局。
優化設計的步驟
步驟0:設計建模
為了減少集中在一個結果所需要的時間,InTime自帶一個包含元數據的數據庫。我們在長時間內在不同設計上測試,逐步歸納出在各種設計上用什么參數合適,然后把這些經驗總結成了這個數據庫。這樣做的目標就是縮小需要調節參數的范圍,只選取重要的,對某個設計最有效的參數進行調節。
步驟一:生成數據
在這一步,InTime在每一輪的執行中,生成編譯參數(也被稱作“策略”)。設計師應該對每一輪進行配置,運行10到30個編譯。有些配方會比其他的配方更合適,這取決于所得數據點(編譯結果)的數量。
學習和分析只出現在每一輪的結尾或是下一輪的開始。作為一種指導,InTime需要在3到5輪內分析100個數據點來達到一個本地最優數據。
如果結果表示沒有明顯的改善,我們就需要運行更多的編譯,因為這個配方還沒有得到本地最優數據。然而,如果結果顯著改善(和原始結果比較)并且改善已經不再繼續,接下來就要更換配方了(參見Deep Dive配方)。
步驟二:使用“Deep Dive”配方
一旦我們獲得了幾個優良的結果,或者結果的改善已經開始減緩,就要準備使用“Deep Dive”配方了。這個配方檢查當前的結果,然后對本地最優數據與其周圍的數據點做一個深入的分析;與之前的配方相比,在更短的時間內將結果改善了10%。當然,沒有之前配方的結果,Deep Dive也不會這么有效。
步驟三:Auto Placement配方或Extra Optimization 配方
最終,Last Mile配方會使用Vivado的設置,這些設置偽隨機,并且對代碼變化高度敏感。根據設計的具體情況,Last Mile配方可以生成僅僅9個編譯或者多達100個編譯。比如,在Vivado,隨機的Placement Exploration配方可以輕易地生成100個編譯,然而Extra Optimization則被限制在9個編譯。
云端運行InTime和Vivado
您也可以在亞馬遜網絡服務(AWS)上面運行InTime來減少總共的運行時間,達到時序目標。通過把您的并行運行數加倍,您可以把您優化所需的時間減半。
InTime和Xilinx結為合作伙伴,為亞馬遜機器映像(AMI)提供所有的預裝軟件許可。這可以讓您更快的開始一個實例,不用任何安裝就可以在云端運行您的FPGA項目。
結論
選擇正確的綜合和布局布線的參數一種十分強大的技能,它可以幫您達到設計性能目標,從FPGA工具中(如Vivado)獲得的最大的受益。然而,把每一組參數都嘗試一遍是完全不可能的。如下圖所示,快速地聚焦到正確的參數組合,可以產生極好的結果(總負余量從-3000ns到-3ns)。使用云端服務也可以減少達到理想結果的總耗時。
評論
查看更多