每一代新的FPGA都變得速度更快、密度更高及規(guī)模更大。那么要怎么做才能確保功耗不同時(shí)增加呢?許多設(shè)計(jì)抉擇,從明顯的器件選擇到更細(xì)微的狀態(tài)機(jī)值選擇等,都會對系統(tǒng)功耗構(gòu)成影響。
為了更好地理解本文所要討論的設(shè)計(jì)技巧如何能節(jié)省功耗,讓我們先對功耗做一個(gè)簡要介紹。
功耗包含兩部分:動態(tài)功耗與靜態(tài)功耗。動態(tài)功耗是指對器件中的容性負(fù)載進(jìn)行充放電所需的功耗。它很大程度上取決于頻率、電壓和負(fù)載。這三個(gè)變量中的每一個(gè)都能由你以某種形式進(jìn)行控制。
靜態(tài)功耗是指由器件中所有晶體管的泄漏電流(源極到漏極以及柵極泄漏,常常集中為靜止電流)所引起的功耗之和,以及任何其他恒定的功耗需求。泄漏電流在很大程度上取決于結(jié)溫和晶體管尺寸。
恒定功耗需求包括因端接(如上拉電阻)所造成的電流泄漏。沒有多少措施可以用來影響泄漏,但卻能控制恒定功耗。
盡早考慮功耗
你制定的功耗決策在設(shè)計(jì)的早期階段具有最大的影響。決定采用何種元件對功耗有很大的意義,而在時(shí)鐘上插入一個(gè) BUFGMUX 則影響甚微。因此須盡早考慮你下一個(gè)設(shè)計(jì)的功耗。
圖1:利用使能信號來減少功耗。
并非所有元件都擁有同樣的待機(jī)功耗。作為一種通用法則,器件工藝尺寸越小,晶體管的速度就越快,但漏電功耗也越高。不過,并非所有工藝技術(shù)都完全一樣。例如,面向領(lǐng)域優(yōu)化的90nm平臺FPGA的待機(jī)功耗與其他90 nm FPGA技術(shù)的待機(jī)功耗有很大的差異。面向領(lǐng)域優(yōu)化的90 nm平臺FPGA采用一種稱為三柵極氧化層 (triple-oxide) 技術(shù)的新工藝方法,通過有選擇地增加?xùn)艠O氧化層厚度來減少泄漏電流(同時(shí)又不犧牲性能),而有效地解決了靜態(tài)功耗問題。盡管這個(gè)三柵極氧化層仍很薄,但這些晶體管的確展現(xiàn)出比標(biāo)準(zhǔn)薄氧化層晶體管更低的漏電流。據(jù)我們研究,90 nm平臺FPGA的靜態(tài)功耗比上一代130 nm平臺FPGA的靜態(tài)功耗要低一半。我們相信這是FPGA歷史上第一次在遷移到新的、尺寸更小的工藝節(jié)點(diǎn)時(shí)靜態(tài)功耗減小。
不過,雖然待機(jī)功耗隨著工藝尺寸的減小而增加,動態(tài)功耗卻將下降,因?yàn)楦〉墓に嚦叽缤殡S著更低的電壓和更小的電容。因此請仔細(xì)考慮何種功耗對你的設(shè)計(jì)影響更大——是待機(jī)功耗還是動態(tài)功耗?
除了通用邏輯單元外,一些FPGA及CPLD器件還擁有專用邏輯,包括塊RAM、18 x 18乘法器、DSP48塊、SRL16以及其他邏輯。你應(yīng)該總是采用專用邏輯,而不是基于邏輯單元的模塊。專用邏輯不僅具有更高的性能,而且所要求的密度更低,因此對于同樣的操作其功耗也更低。當(dāng)評估你的器件選擇時(shí),請仔細(xì)考慮專用邏輯的類型與數(shù)量。
選擇一項(xiàng)合適的I/O標(biāo)準(zhǔn)也能節(jié)省功耗。這些都是簡單的決定,如選擇最低驅(qū)動強(qiáng)度或較低電壓標(biāo)準(zhǔn)等。當(dāng)系統(tǒng)速度要求使用高功率I/O標(biāo)準(zhǔn)時(shí),你可計(jì)劃一個(gè)默認(rèn)狀態(tài)來降低功耗。有些I/O標(biāo)準(zhǔn)(例如GTL/+等)需要使用一個(gè)上拉電阻才能正常工作。因此,如果該I/O的默認(rèn)狀態(tài)為高而不是低,則可節(jié)省流過該端接電阻的直流功耗。對于GTL+,將50 ohm端接電阻的默認(rèn)狀態(tài)設(shè)置為1.5V,可使每個(gè)I/O節(jié)省30 mA的電流。
數(shù)據(jù)使能
當(dāng)總線上的數(shù)據(jù)與寄存器相關(guān)時(shí),常常使用片選或時(shí)鐘使能邏輯來控制寄存器的使能。進(jìn)一步講,盡早對該邏輯進(jìn)行“數(shù)據(jù)使能”,可以阻止數(shù)據(jù)總線與時(shí)鐘使能寄存器組合邏輯之間不必要的轉(zhuǎn)換,如圖 1 所示。紅色波形表示原設(shè)計(jì);綠色波形表示修改后的設(shè)計(jì)。
另一種選擇是在板上(而不是在芯片上)進(jìn)行這種“數(shù)據(jù)使能”。例如,你可以用一個(gè)CPLD從處理器上卸載掉一些簡單任務(wù),使其能更長久地處于待機(jī)模式。同樣的概念也可運(yùn)用于FPGA。盡管FPGA不一定擁有待機(jī)模式,但用CPLD來截取總線數(shù)據(jù)并有選擇地將數(shù)據(jù)饋送給FPGA,亦可節(jié)省不必要的輸入轉(zhuǎn)換。一些CPLD具有一種稱為“數(shù)據(jù)門控”的特性,此特性可以禁止引腳上的邏輯轉(zhuǎn)換到達(dá) CPLD 的內(nèi)部邏輯。數(shù)據(jù)門控使能可由片上邏輯或一個(gè)引腳來控制。
狀態(tài)機(jī)設(shè)計(jì)
你應(yīng)該根據(jù)預(yù)測的下一個(gè)狀態(tài)條件來列舉狀態(tài)機(jī),同時(shí)選擇在通常狀態(tài)之間具有較少轉(zhuǎn)換位的狀態(tài)值。這么做,你就能減少狀態(tài)機(jī)網(wǎng)絡(luò)的轉(zhuǎn)換量(轉(zhuǎn)換頻率)。確定常態(tài)轉(zhuǎn)換并選擇適當(dāng)?shù)闹?,是一種可減少功耗同時(shí)對設(shè)計(jì)影響較小的簡單方法。編碼方式越簡單,所使用的譯碼邏輯也就越少。
讓我們來看一個(gè)在狀態(tài)7和狀態(tài)8之間頻繁進(jìn)行狀態(tài)轉(zhuǎn)換的狀態(tài)機(jī)。如果你為該狀態(tài)機(jī)選擇二進(jìn)制編碼,則意味著每次在狀態(tài)7和狀態(tài)8之間轉(zhuǎn)換時(shí),都有四位需要改變狀態(tài),如表1所示。
表1:通過狀態(tài)編碼來減少信號轉(zhuǎn)換。
如果狀態(tài)機(jī)采用格雷碼而不是二進(jìn)制碼來設(shè)計(jì),則這兩個(gè)狀態(tài)之間的轉(zhuǎn)換所需的邏輯轉(zhuǎn)換量將降至僅為一位。另外,如果將狀態(tài)7和8分別編碼為0010和0011,亦可達(dá)到同樣的效果。
時(shí)鐘管理
在一個(gè)設(shè)計(jì)的所有吸取功耗的信號當(dāng)中,時(shí)鐘是罪魁禍?zhǔn)住1M管時(shí)鐘可以運(yùn)行在100 MHz上,但從該時(shí)鐘派生出的信號卻通常運(yùn)行在主時(shí)鐘頻率的較小分量(通常為12% ~ 15%)上。此外,時(shí)鐘的扇出也一般較高。這兩個(gè)因素表明,要降低功耗,須認(rèn)真研究時(shí)鐘。
如果設(shè)計(jì)的某個(gè)部分可處于非活動狀態(tài),則可考慮使用一個(gè)BUFG-MUX(而不是使用時(shí)鐘使能)來禁止時(shí)鐘樹翻轉(zhuǎn)。時(shí)鐘使能將阻止寄存器進(jìn)行不必要的翻轉(zhuǎn),但時(shí)鐘樹仍然會翻轉(zhuǎn),從而消耗功率。不過,采用時(shí)鐘使能總比什么措施也不用強(qiáng)。
你還應(yīng)隔離時(shí)鐘以使用最少量的信號區(qū)。不使用的時(shí)鐘樹信號區(qū)不會翻轉(zhuǎn),從而降低該時(shí)鐘網(wǎng)絡(luò)的負(fù)載。細(xì)心的底層規(guī)劃可在不影響實(shí)際設(shè)計(jì)的情況下達(dá)到此目標(biāo)。