為什麼fpga設計類似「打鼴鼠」?
在fpga設計中(除驗證外),最主要的時間陷阱(time sink)是時序收斂。時序收斂常常是乙個不斷反覆的過程,以確保設計中的每個路徑都滿足時序要求。在相對較小、速度較慢的設計中,時序收斂比較容易,而且是自動收斂的,因此對fpga器件或實現工具的要求不高。然而,實際中的大多數設計並非如此輕鬆,它們要求對每個關鍵路徑進行調整,以滿足時序要求,而期間又會不斷有新的關鍵路徑被發現或出現。
圖1是迭代的時序收斂示意圖。在第一階段,只有路徑c的時間裕量是負數。為改善路徑c,對設計進行修改。隨著對路徑c實現約束,路經b和e又成為關鍵路徑(見第二階段),然後又對路徑b和e進行改善。以此類推,直到所有路徑都滿足時序要求。
圖1:迭代的時序收斂示意圖。
很顯然,這種過程非常類似於打鼴鼠遊戲;只不過並不像遊戲那樣輕鬆,而是讓我們緊張。
全新的fpga產品系列真能解決這一問題嗎?
實際上,fpga廠商已開發出優異的新一代fpga以滿足使用者對更高效能和更高容量的需求。然而,fpga使用者更善於發掘推動fpga突破容量限制的新方法,從而將fpga引入更多新的應用領域。
fpga已不再是一系列均勻分布的查詢表(lut)和由各種不同長度和速度的佈線資源連線起來的觸發器。目前,業界領先的fpga設計包含多個時鐘域,並使用嵌入式累積乘法(mac)功能塊,包括嵌入式處理器和各種儲存器資源。fpga的應用也隨著器件內各種特定資源的增多而得以擴充套件,並準備著在fpga內部實現這些特定的功能塊。這是個好現象,但從某種程度上說,這種嵌入式資源的分布將導致時序收斂的問題更加突出。正如下文的ram示例所指出的,嵌入式功能本身就是導致佈線差異的根源。
這裡假設設計需要做一些修改,以根據最新功能要求增加ram的容量。在fpga器件中可能有豐富的ram資源,但需要使用不同的ram資源,比如使用乙個大的塊ram,而不是一組分布式ram。綜合工具能夠輕鬆對映到所需的ram,但新的塊ram可能只存在於fpga器件上的特定列中,因此這時的設計布局將不同於原始布局。關鍵路徑的連線從含有新ram的列開始或向其延伸,或者重新布局以使關鍵路徑靠近新的ram,但其它收斂或發散的路徑卻會延長。使用傳統的綜合工具很難避免這種問題。因此需要密切注意這些時序收斂問題。
為什麼佈線**如此重要?
佈線延遲本質上是不可**的,因為fpga內各個驅動與負載之間存在許多不同的佈線路徑。每個路徑的延遲不同,在工具流程開始的時候,邏輯綜合無法**流程結束時布局佈線演算法將要選擇哪條路徑。最快的佈線資源通常是最缺乏的,佈線阻塞常導致非最優的佈線延時。僅靠開發具有更多、更快佈線資源的fpga器件並非解決方法,因為此時fpga的面積使用效率更低、成本更高、功耗也更大。
隨著採用更先進的cmos工藝的新一代fpga的推出,佈線延遲將不可避免地成為關鍵路徑總延遲中最關鍵的部分,因此綜合和布局佈線流程中的時序可**性也變得一代不如一代。最終,導致時序收斂的原因可以歸結為綜合**的路徑時序與布局/佈線實際實現的時序之間的差異。解決方法是在整個流程中較早引入布局(並最好也同時引入佈線)並融入綜合過程。這種全新的綜合/布局佈線工具將大幅減少時序收斂所需的迭代數,這也正是fpga物理綜合實際能達到的效果。
如何在「打鼴鼠」遊戲中獲勝?
下面以帶多個複雜模組的大型設計(圖2)為例來討論。很多情況下,乙個時序問題的解決將改變rtl,並且一些改進時序的做法也會增加資源的使用。
圖2:rtl變化如何使路徑發生變化。
在圖2中,模組a緊鄰模組b和模組b,當為解決某個時序問題而修改模組a的rtl時,模組a會擴充套件到模組b和c使用的區域。這將迫使b和c中的器件發生移動,路徑延長,從而產生新的關鍵路徑。請注意,模組b或c中的邏輯沒有變化,正常的邏輯綜合流程不會由於模組a的尺寸變化而改變它對b或c中的互連延時的估計,因為模組a的rtl變化和b或c中新的關鍵路徑之間的因果關係是物理上的。一般情況下,導致設計迭代具有不可**性的本質原因是物理特性,因此真正的物理綜合當仁不讓成為首選解決方案。
在真正的物理綜合中,當模組a的rtl發生改變並延長模組b和c中的走線時,新的更長連線可以被正確估算和考慮,這樣在同樣的物理綜合過程中,圍繞新的關鍵路徑所進行的優化、布局和區域性佈線就可以自動解決這些問題。
本文小結
估計fpga中的總路徑延遲很困難,因此時序收斂已成為當前許多設計的時間陷阱。物理綜合可以提供所需的布局可**性,從而更好地控制和**時序收斂。真正的物理綜合有助於fpga專案在較短時間內獲得成功。
附:什麼是「真正的物理綜合?」
很多任務具聲稱可實施物理綜合,然而事實上這些工具只是使用先前的布局佈線的時序資訊重新優化綜合結果。原始綜合並未受到任何影響,因此來不及消除綜合所做的主要結構性決策。更準確地講,這種方法應稱為「物理再優化」。
在真正的物理綜合中,綜合本身也完成布局,所以非常清楚最終fpga的佈線走向。因而時序**也準確得多,避免了時序收斂問題。
如何在FPGA設計環境中加時序約束
在給fpga做邏輯綜合和布局佈線時,需要在工具中設定時序的約束。通常,在fpga設計工具中都fpga中包含有4種路徑 從輸入埠到暫存器,從暫存器到暫存器,從暫存器到輸出,從輸入到輸出的純組合邏輯。通常,需要對這幾種路徑分別進行約束,以便使設計工具能夠得到最優化的結果。下面對這幾種路徑分別進行討論。1...
fpga如何約束走線 FPGA時序約束的幾種方法
對自己的設計的實現方式越了解,對自己的設計的時序要求越了解,對目標器件的資源分布和結構越了解,對eda工具執行約束的效果越了解,那麼對設計的時序約束目標就會越清晰,相應地,設計的時序收斂過程就會更可控。從最近一段時間工作和學習的成果中,我總結了如下幾種進行時序約束的方法。按照從易到難的順序排列如下 ...
fpga如何約束走線 FPGA時序約束的6種方法
fpga 時序約束的 種方法對自己的設計的實現方式越了解,對自己的設計的時序要求越了解,對目標器件的資源分布和結構越了解,對 eda工具執行約束的效果越了解,那麼對設計的時序約束目標就會越清晰,相應地,設計的時序收斂過程就會更 可控。下文總結了幾種進行時序約束的方法。按照從易到難的順序排列如下 0....