點擊上方藍字關注我們
FPGA高級設計之實現功耗優化
與ASICs(Application Specific Integrated Circuits)比較,相似的邏輯功能,用FPGA來實現需要消耗更多的功耗,而且FPGA通常并不適合超低功耗設計技術。許多FPGA的供應商提供一種低功耗邏輯芯片,即CPLD,但是CPLD非常受限于尺寸和能力,因此將無法總是滿足那些需要數量可觀的功耗的應用。本章將詳細討論低功耗CPLD和通用FPGA設計功率效率最大化技巧。
在CMOS技術中,動態功耗與門電路和金屬走線中的寄生電容的充放電有關。一個電容的電流損耗的通用公式如下所示:
I=V*C*f
這里I是總電流,V是電壓,C是電容值,而f是指頻率。
那么,為了減小電流,那么我必須減小公式右邊三個關鍵參數中的一個即可。在FPAG設計中,電壓通常是固定的,所以只留下C和f可以用來改變電流。電容C和給定時間內處于活動的門電路數量以及連接這些門電路的走線長度有直接關系。而頻率f則和時鐘頻率直接相關。所以所有降低功耗的技術都絕對針對于減少這兩種參數。
本章將主要討論以下一些可以降低功耗的技術:
時鐘控制對于動態功耗的影響
使用門控時鐘的問題
管理門控時鐘上的偏斜
輸入控制以最小化功耗
核心供電電壓對功耗的影響
觸發器雙沿觸發指導
終端匹配降低靜態功耗
通過減少高翻轉率網絡的布線長度來降低動態功耗的討論,需要有了解布局布線的背景,因此這種技術不在本章介紹范圍內,將在后面有關Floorplanning的章節進行詳細討論。
3.1時鐘控制
在同步數據電路設計中,降低動態功耗最有效以及使用最廣的技術是在某些指定區域數據流的特定階段不需要時鐘處于活動狀態的時候禁止時鐘活動。因為FPGA的動態功耗大部分時候是與系統時鐘的翻轉有直接關系,所以臨時性地停止設計中某些處于非活動區域的時鐘往往是最小化這類功耗最直接的方法。為了達成此目的,有兩種推薦方法,一種是在觸發器中使用時鐘使能,另外一種是使用全局時鐘多路選擇器(Xilinx器件中稱為BUFGMUX單元)。如果這些時鐘控制單元在一些特定技術中無法實現,設計者此時往往訴諸于門控系統時鐘。需要注意的是,門控時鐘在FPGA設計中是不被推薦的,而且這一章我們還會詳細討論直接門控系統時鐘將會帶來的一些問題。因此,如果有可能盡量使用觸發器的時鐘使能輸入或者全局時鐘多路選擇器來代替時鐘門控。
在進行后續討論之前,我們假定讀者已經非常熟悉FPGA的時鐘設計指導。通常,FPGA是同步器件,而且通過門控或者異步接口引入多時鐘域往往會增加FPGA設計的難度。有關時鐘的更深層次討論,我們后續在有關時鐘域一章中進行詳細說明。
圖3-1顯示了一種包含簡單門控時鐘的蹩腳設計。使用這種時鐘拓撲結構時,所有觸發器以及相應的組合邏輯在主時鐘活動的任何時候都處于活動狀態(即處于翻轉中)。然而,處于虛線框中的邏輯只有在時鐘使能等于1的時候才處于活動狀態。這里所指的時鐘使能信號,就是門控或者使能信號。通過像圖3-1那樣門控部分電路,根據被門控的邏輯量(對應于電容C)以及對應門控的平均頻率(對應于頻率f),設計者可以嘗試成比例地減少動態功耗。時鐘門控是降低動態功耗的直接手段,但是會帶來設計實現以及時序分析難度的增加。
圖3-1:帶簡單門控時鐘的蹩腳設計
在我們接著往下討論之前,需要注意的很重要一點是仔細規劃時鐘在FPGA設計中是非常重要的。系統時鐘是所有同步數字電路的核心。EDA工具都由系統時鐘驅動來優化和時序綜合、布局布線以及靜態時序分析等等。所以,要認真對待系統時鐘或者其它時鐘,并在設計實現整個過程中必須被賦予最大優先級考慮的特性。在FPGA設計中,時鐘要比在ASIC設計中更嚴肅地對待,因此相比ASIC設計相應創建時鐘結構的靈活性就更小。
時鐘被門控后,這個被門控的新網絡所驅動的所有時鐘端口都應該至少被認為是一個新的時鐘域。同系統時鐘一樣,這個新的時鐘網絡到該時鐘域的所有觸發器都需要一個低偏斜的路徑。對于ASIC設計者來說,這些低偏斜時鐘走線可能已經內置在用戶時鐘樹中,但是對于FPGA設計者來說這將成為問題,因為FPG**內低偏斜走線資源不但數量有限,而且分布固定。因此,我們說門控時鐘在給設計引入新的時鐘域同時,還給FPGA設計者增加了設計上的難度。本節后面我們來介紹由門控時鐘引入的這些問題。
3.1.1時鐘偏斜
時鐘偏斜是時序邏輯設計中一個很重要的概念。在直接談論門控時鐘相關問題之前,我們必須首先有必要簡要回顧一下時鐘偏斜(skew)的定義。
如圖3-2所示,假定第一個觸發器和第二個觸發器之間的時鐘信號傳播延遲為零。如果通過“云朵”中的組合邏輯的延時是正的,那么設計時序將會得到符合,時序是否符合將由時鐘周期相對于組合邏輯延時加上邏輯布線延時再加上觸發器建立時間來確定。每個時鐘周期,一個信號只能在一組觸發器對之間傳輸。不過,圖3-2中第二個和第三個觸發器之間的情況與前一級有所區別。因為時鐘走線到第二和第三個觸發器的延時不一樣,即時鐘正沿不是同時到達這兩個觸發器。如圖所示,時鐘正沿是經過了一個延時為dC后才到達第三個觸發器的。
圖3-2:時鐘偏斜
如果通過邏輯的延時(定義為dL)小于時鐘線上的延時(dC),那么就會發生一種情況,即從第二個觸發器傳輸到第三個觸發器的信號將會早于時鐘正沿到達第三個觸發器。所以當時鐘正沿到達第三級時,相同信號有可能也由該觸發器輸出。那么,就會造成一個信號在第二級和第三級上在同一個時鐘上升沿時被送出。這個情況將導致電路出現災難性錯誤,所以時鐘偏斜在時序分析的時候必須要考慮到。需要注意的是時鐘偏斜與時鐘速度并無關系,這一點很重要。所以,上面描述的信號“飛越”兩級觸發器的問題發生的時候,是完全無視當前時鐘的頻率。謹記這個觀點,處理時鐘偏斜不當,將會給FPGA設計帶來災難性的錯誤。
3.1.2時鐘偏斜管理
FPGA內提供一種低偏斜的資源,這種資源可以確保時鐘信號到所有時鐘端口的延時都盡可能的一致(皮秒級)。舉例來說,我們來看這樣一種情況,即一個門被引入到了時鐘網絡,如圖3-3所示。
圖3-3:蹩腳設計之時鐘門控引入時鐘偏斜
這時候時鐘線必然要離開低偏斜的全局資源并被布線到邏輯門,這里是一個與門。如此時鐘線上增加了偏斜,增加偏斜帶來的基本問題和我們上一節描述的一樣??梢韵胂?,經過與門的延時(dG)再加上走線延時,那么時鐘到最后一級觸發器的延時將會大于信號的邏輯延時(dL)。為了解決這個潛在的問題,必須給邏輯實現和時序分析工具施加一系列約束,這樣任何與由邏輯門引入的偏斜有關的時序問題將會得到解決,而且實現也能在實現后得到正確地分析。
下面我們來看一個具體的例子,下述代碼是一個使用了門控時鐘的蹩腳設計。
以下是代碼片段: module clockgating( output dataout, input clk,datain, input clockgate1); reg ff0,ff1,ff2; wire clk1; //當邏輯門為低時時鐘被禁止 assign clk1=clk&clockgate1; assign dataout=ff2; always @ (posedge clk) ff0<=datain; always @ (posedge clk) ff1<=ff0; always @ (posedge clk1) ff2<=ff1; endmodule |
上例中,數據路徑上沒有任何組合邏輯,但是時鐘路徑上有組合邏輯,如圖3-4所示。
圖3-4:時鐘歪斜主導的延時
不同的工具,將會采樣不同的方式來處理這種情況。有些工具,比如Synplify,默認會將時鐘門控邏輯移除,從而創建一個純同步設計。而其它一些工具會在時鐘缺乏約束的時候忽略掉時鐘歪斜問題,但是,一旦時鐘被正確約束的時候會人為地在數據上加入延時。
和ASIC設計不同,由于邏輯塊和布線資源中內置有延時,所以FPGA設計中發生保持時間違規是非常罕見的。但是,如前所述,如果在時鐘線上進行過渡的延時,就有可能導致保持時間違規。比如,我們可能面臨這樣一個事實,即數據傳輸延時小于1ns,而時鐘延時幾乎達到了2ns,這樣數據幾乎比時鐘提前1ns到達,從而導致了一個嚴重時序違規。根據綜合工具的差異,有時,這個問題可以通過添加時鐘約束來得到解決。所以,后續的時序分析也許會或者不會(完全依據技術)展現在數據路徑上人為地添加的布線延時來消除保持時間違規的問題。因此,因門控時鐘導致的保持時間違規可能會被工具解決,也可能不會。
這里值得再次重申的是,大部分供應商都能提供高級時鐘緩沖技術。這種技術使得器件可以建立全局時鐘樹。我們總是建議大家采用這類時鐘控制,而不是上述通過邏輯單元實現的時鐘門控。
3.2輸入控制
有一種可以降低功耗的技術通常都容易被大家忽略,即可以通過降低輸入的上升沿斜率降低功耗。在上下兩側晶體管同時導通的時候,CMOS的輸入緩沖會產生持續的吸電流。為了描述方便,我們來看一個CMOS晶體管基本階模型,如圖3-5所示,為Ids-Vds曲線圖。
圖3-5:CMOS晶體管簡單的I-V曲線
圖3-5中,Vgs是柵源電壓,Vth是器件門限電壓,Vds是漏源電壓。各段曲線區域分布被定義為:
截止區:Vgs 線性區:0 飽和區:0 < Vgs – Vth < Vds 那么管子在理想情況下的開關動作應該是這樣的,N溝道MOS管當輸入到柵極時管子從截止區瞬間切換到線性區,而P溝道MOS管應該瞬間執行上述相反的切換動作。不管N溝道還是P溝道MOS管,假如管子一直是處于截止狀態,那么管子中就不會有電流(也即電壓和地之間阻抗很大)。以一個反相器舉例來說,如果由NMOS(N溝道MOSFET)來實現的話,從0跳轉到VDD(正電壓軌)意味著NMOS從截止區瞬間切換到線性區,而如果是PMOS(N溝道MOSFET)則是從線性區瞬間切換到截止區。相反,如果Vgs從VDD跳變到0,那么NMOS從線性區瞬間切換到截止區,而PMOS是從截止區瞬間切換到線性區。 然而在實際系統中,我們必須要考慮MOS管中晶體管的切換時間以及導通特性。還是以以一個CMOS反相器為例,反相器輸入一個0伏,那么輸出一個VDD。當輸入從0變化到VDD時,一旦輸入達到門限電壓Vth后NMOS晶體管就會離開截止區,并進入飽和區。對于PMOS來說,在上述變化前期還一直處于線性區,所以在VDD和地之間會有電流。隨著輸入的增大,輸出下降。當NMOS的漏極電壓低于柵極電壓的門限電壓時,NMOS進入線性區,而PMOS進入飽和區隨后進入截止區。為了最小化功耗,有必要最大限度減小飽和區的時間,也就是說最大限度減小輸入的跳變時間??偨Y來說,就是最大限度減小輸入信號的上升和下降時間可以最大限度地降低器件輸入引腳的功耗。 根據前面劃分曲線各個分區的公式,我們還可以得出另外一個重要的結論。即如果驅動信號在沒有開關切換的時候未處于穩定狀態,比如超出0或者Vdd規定的限值范圍,那么晶體管就將會從之前的截止區進入飽和區,并且開始消耗小部分的電流。這在小擺幅信號驅動高電壓供電的輸入時,將會給系統帶來問題。 和上面描述的原則類似,在FPGA設計中,一個懸空的輸入引腳要比一個有驅動的輸入引腳更糟糕。FPGA的引腳懸空,一般都被認為帶驅動的輸入,但是由于其懸空,所以無法得知它到底是如何被驅動的。那樣懸空有可能被認作亞穩態,那樣兩種晶體管都將會處于飽和區。如此將會給功耗帶來災難性的影響。同樣糟糕的是,這是個無法復現的問題。因為大部分FPGA器件都能提供阻抗匹配,所以一個好的設計應該將那些未用到的輸入引腳定義一個可知的狀態,這樣可以避免由于引腳懸空帶來的不可預知的影響。 3.3降低供電電壓 雖然降低器件的供電電壓通常不是一個值得嘗試的選項,但是這里還是有必要提一下其對于功耗的戲劇性影響。我們知道,一個簡單電阻上功耗即功率與加載其上的電壓的平方成正比。那么,通過將FPGA的供電電壓降低到電壓要求的最低值,可以顯著地降低FPGA的功耗。然而,需要特別注意的是,降低供電電壓也會降低系統的性能。如果需要采取這種方式來降低功耗,那么就需要確保時序分析最快時序時已經考慮到在供電電壓處于最低要求時這種最壞的情況。所以,我們可以得出這樣的結論,FPGA的動態功耗會隨著核心電壓的平方成比例降低,但是降低電壓對于FPGA的性能會造成負面的影響。 因為一般FPGA都規定電壓的正常工作范圍為工作值的5%到10%,所以千萬要注意從系統設計方面綜合考慮。通常來說,為了很好地保持核心電壓在一個指定的范圍內,電源問題可以通過其它技術解決。 3.4觸發器雙沿觸發 由于事實上功耗部分地和信號翻轉頻率相關,所以對于那些高扇出網絡,最好盡可能地擴展其每次翻轉的功能。大部分時候,一個系統的最大扇出網絡通常是系統時鐘,那么任何降低該時鐘頻率的技術都會對動態功耗產生戲劇性影響。所謂的雙沿觸發觸發器,是提供了一種在時鐘的上下沿傳播數據的機制,而不只是單單使用時鐘的單個沿。如此就使得設計者可以在時鐘速度減半的情況下獲得之前全速時鐘下一樣的功能和性能。 在代碼中可以非常直接地設計雙沿觸發的觸發器,下面這個代碼示例就通過一個簡單的移位寄存器對此進行了展示。注意這個例子中的輸入信號在時鐘的上升沿被采集,接著被送入雙沿觸發器。 以下是代碼片段: module dualedge( output reg dataout, input clk,datain); reg ff0,ff1; always @ (posedge clk) ff0<=datain; always @ (posedge clk or negedge clk) begin ff1<=ff0; dataout<=ff1; end endmodule 需要注意的是,當器件中沒有雙沿觸發器資源時,將會由一些冗長的觸發器以及門控邏輯來模擬上述對應的功能。這將完全違反了我們采取雙沿策略的最初意圖,而且功能實現以后應當得到妥善地分析。對于一個好的綜合工具,在發現器件沒有雙沿觸發器的情況,應當至少會給出一個警告信息。所以這種雙沿觸發器來降低功耗的策略,應該只適用于那些能提供這種資源的器件。 Xilinx的Coolrunner-II家族中的器件就包含有一種名為CoolClock的特性,這種特性可以將輸入時鐘進行二分頻后讓觸發器工作于上述討論的雙沿狀態。從器件外部看來,器件仍然無異于工作在單沿觸發的系統,區別在于全局時鐘線上的動態功耗減少了一半。 3.5修改阻抗匹配 帶總線信號、開漏或者傳輸線輸出的系統,其輸出引腳上通常都連接電阻負載,需要進行終端匹配。上述所有這些例子中,FPGA輸出驅動中的一個CMOS晶體管需要通過其中一個電阻負載源出或者吸入電流。因為輸出都需要上拉電阻,可以通過最小可接受的上升時間計算出最大可能的電阻。如果總線上同時存在主從驅動器,那么要確??偩€競爭的情況不好發生,因為一旦發生,即使只有幾納秒的時間,也會產生過大的電流。對于傳輸線來說,通常需要在負載處需要分流端接,根據系統的要求也可以使用串行端接替代。如圖3-6所示,使用串行端接時,沒有穩定的電流耗散。 圖3-6:端接類型 使用串行端接的不利在于: 從負載到端接電阻有一個初始信號反射 串聯電阻在信號傳輸的時候會造成一部分衰減 如果一個系統可以接受上述這些不利的性能特性,那么串聯端接方案可以通過端接電阻來減少靜態功耗。 3.5優化要點總結 如果有可能盡量使用觸發器的時鐘使能輸入或者全局時鐘多路選擇器來代替時鐘門控。 時鐘門控是降低動態功耗的直接手段,但是會增加設計實現以及時序分析的難度。 時鐘歪斜處理不當將會給FPGA設計造成災難性的錯誤。 時鐘門控會導致保持時間違規,實現工具可能會也可能不會糾正。 為了最大限度減少器件輸入帶來的功耗,可以最大限度減小驅動輸入信號的上升和下降時間。 對于未使用到的輸入緩沖總是進行端接處理,不要讓FPGA的輸入緩沖處于懸空狀態。 動態功耗會隨著核心電壓的平方成比例變化,但是通過降低電壓達到減少功耗的同時,會給設計性能帶來負面的影響。 雙沿觸發的觸發器只有在器件可以提供這類資源的時候才應該被使用。 串聯端接上沒有穩定的電流耗散。 掃碼二維碼 獲取更多精彩 FPGA設計論壇
原文標題:FPGA高級設計之實現功耗優化
文章出處:【微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
-
FPGA
+關注
關注
1604文章
21337瀏覽量
594006
原文標題:FPGA高級設計之實現功耗優化
文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論