
點擊上方藍字關(guān)注我們

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

如何實現(xiàn)藍牙模塊的功耗優(yōu)化?

基于FPGA實現(xiàn)圖像直方圖設(shè)計

FPGA驅(qū)動AD芯片之實現(xiàn)與芯片通信

助力AIoT應(yīng)用:在米爾FPGA開發(fā)板上實現(xiàn)Tiny YOLO V4
Vivado之實現(xiàn)布局布線流程介紹

FPGA與ASIC的區(qū)別 FPGA性能優(yōu)化技巧
如何優(yōu)化單片機項目的功耗
如何優(yōu)化FPGA設(shè)計的性能
FPGA應(yīng)用于人工智能的趨勢
xWRL6432低功耗雷達-功耗優(yōu)化技術(shù)

評論