本篇故事性可能沒那么強^^, 我們來講講低功耗。其實低功耗這個話題前面我寫文章講過,今天我們從芯片設計的全流程重新總結一下如何壓低芯片的功耗。
1 為什么要壓低芯片功耗
這事兒其實好理解,原因很多,比如電源網絡不好設計,芯片容易失效等等。但是最重要的我認為就兩點(敲黑板):
續航太短,散熱太大。
對于移動設備,比如手機,電池供電的,功耗太大會縮短續航,你肯定不樂意充電一整天,電話三分鐘。
那要是插電設備呢?你肯定不樂意用個核顯還非要上個水冷。所以綜上所述,功耗要盡量做小就是了。
2 集成電路的功耗來源
既然要優化功耗,我們先看看功耗是怎么造成的。現代大規模集成電路里面廣泛用的是CMOS, Complementary Mosfet, 互補的晶體管。原理上上下兩個晶體管不同時導通,應該沒有功耗,妥妥的永動機(狗頭)。但實際上有非理想因素在,功耗就是這么產生的。
·電容充放電電流。看圖a, 實際上晶體管與地之間是有點容的。所以輸入從0到1變化的時候會導致這個電容充放電。當input為0的時候能量從VDD沖到了電容, input 為1的時候能量直接流到地。
·短路電流。由于晶體管非理想,存在某個電壓,NMOS和PMOS都導通,導致直接有VDD到VSS的通路。產生電流。
·漏電流。漏電流是input穩定的時候,其實vdd和vss之間也有細微的電流流過產生功耗。
電容充放電和短路電流是動態功耗,漏電流是靜態功耗。動態功耗一般來講遠大于靜態功耗。抓大放小,我們這個地方主要記住大頭充放電功耗怎么算的。
N是晶體管數量。
A是翻轉因子。
C是寄生電容。
V是電源電壓
F是頻率。
所以power和VDD二次方成正比,和頻率一次方成正比。主要降低功耗也就是圍繞這幾個因子來轉。
為了后面看著方便,這五個變量,代表了什么,再復習一遍。
3 功耗優化全流程
此處我們給出一個功耗優化全流程中各個時間點需要注意的功耗優化方法。圖似乎有點小。看詳細說明。
需要注意兩點:
1.下圖列的并不是全部的低功耗手段,只是一些我們容易干預的低功耗手段,比如在第四步流片制造中代工廠顯然可以優化工藝,降低漏電流,不過對芯片設計來講這已經屬于環境因素了。
2.下圖只列了芯片功耗的優化,在5步驟封裝測試中還有板級功耗的優化,不在芯片設計討論范圍內。
3.1 概念計劃階段
降低N:限制規格。概念計劃階段優化功耗的手段雖然不多,但是效果其實是最明顯的。盛傳一句話,上面一張嘴,下面跑斷腿。概念計劃就處于這么一個上面的位置。后面操作只能說是功耗優化,概念階段確定的規格可以直接框定功耗的大致范圍。此處團隊需要深入了解市場,確定什么功能要解決市場的痛點,必須做進去,什么東西是個偽需求,不要做進芯片徒增功耗。比如人臉識別的芯片你非要加入一個GPS導航,這功耗不就上去了。再比如給筆記本的芯片,你強行造出一個臺式的功耗,肯定也是不行的。
識別什么特性是必須的,什么特性可以砍掉,是功耗重要,還是性能重要。在概念計劃階段就要搞明白。
比如下面這兩個東西,功耗肯定是差異巨大的。
3.2 設計驗證階段
功耗優化的大部分手段出在設計驗證階段。我們一個一個來講。
3.2.1 算法
算法階段優化此處介紹三個常用的。
降低A和N:減少計算復雜度。算法最有效的做法是直接減少算法的復雜度。比如同樣一個人臉識別的AI芯片,在識別精度相同的情況下,使用VGG明顯比使用ResNet甚至MobileNet這些輕量化網絡費功耗的多。所以算法部門一個永恒的目標是如何在不太損失精度的前提下降低計算復雜度。有時候同樣一個任務精度一樣計算復雜度可能會降低十倍不止。
降低A:算法優化翻轉概率。這個事情比較玄學。比如訓練一個神經網絡,盡量讓網絡推理的過程中翻轉概率最低。再比如算法來個自適應,在信號比較好的時候采用一個比較弱的信道估計,在信號不好的時候啟動比較強的信道估計等等。
降低N:降低計算精度。對于芯片來講,除了特殊需求,大多數計算都是定點的。那采用什么精度的定點就很容易影響功耗。比如計算神經網絡的時候,由于網絡自身就可以容錯,算法可以不斷壓縮定點。比如用個8bit, 4bit看看結果如何。這部分大量運用于各類芯片。尤其神經網絡,通信等等。如何降低精度有一系列的辦法。采用指數壓縮,分組定點化等等。舉個簡單的例子,可以讓神經網絡不通層有不同的定點化來降低計算精度。
舉個簡單的例子,把兩個浮點的指數為共享,這樣相同精度下節省存儲量,或者相同比特位寬下提高精度。
3.2.2 概設
概設階段主要是從模塊級對芯片的功耗進行控制。
降低A:Clock Gating。一般模塊級的clock gating信號都要我們手動根據設計功能加入的。比如在CPU核沒有任務的時候要把CPU的clock直接關掉,節省時鐘網絡的功耗。
降低V:Power Gating。對于能預測長時間不用的模塊,要設計power gating, 將不用的模塊直接關掉。如下圖所示,一個CPU系統,其實Memory可能不能掉電,Core和MAC什么的如果不用都可以power gating。
power gating有一定成本(功耗和面積上都有),所以一個模塊要不要做power gating要逐個分析。
降低V:Multi-VDD。現在的芯片都比較大,沒必要所有模塊都跑在一個電壓下。比如下面這樣,CACHE RAMS電壓高一點,SOC部分電壓可以低一點。
降低F: Multi-Clock Domain。和上一條往往有聯動關系,這個地方還附帶有另一個效果,降低F。可以根據電壓域講芯片分為若干的時鐘域,有些部分時鐘慢一些來減小功耗。
降低V和F:DVFS。Dynamic Voltage and Frequency Scaling。這個是現代芯片中非常常用的手段。根據業務負載自動的調整電壓和頻率。如下圖所示,一般來講,電壓越高芯片能跑的頻率也就越高。DVFS就是反其道行之。比如手機只有2G網,手機芯片就顯然不用跑在最高頻率。從而可以大量減少功耗。
3.2.2 編碼
接下來就到了最喜聞樂見的編碼階段。
個人認為這個部分功耗的優化有用,但有的明顯,有的不明顯,和i++與++i有異曲同工之妙,比如常見的FSM狀態機要用格雷編碼這事兒,就只能說節省了,但仿佛又沒有節省。但由于編碼自帶炫技屬性,所以寫代碼的時候還是要在意一下,此處講講我覺得最重要的三點。
降低A或者V:Memory Cell的低功耗使用。這個在編碼階段是絕對要注意到的。SRAM對于數據處理類的芯片來講功耗開銷非常大。這個我們重點講講。
·存儲量大的情況下盡量使用Memory。采用SRAM cell實現的讀寫比使用寄存器堆使用的讀寫省功耗。所以如果存儲量夠大,建議使用SRAM。
·選用低功耗的SRAM Cell。SRAM cell一般都是由memory compiler生成的。比如購買ARM的compier. 一般來講會提供各種類型的SRAM cell。盡量選擇低功耗的SRAM cell。
·SRAM Cell要盡量使用低功耗mode。SRAM一般會留出power gating, deep sleeping, retention, clock gating等等端口,這些端口要根據實際情況用起來,SRAM不用的時候要把它低功耗起來。
·避免無意義的讀寫。SRAM的讀寫都是有功耗的。比如訪問嫌麻煩,降rd_en一直拉有效這種做法是要避免的。同時,即使沒有wen, 數據端口信號變化也會產生功耗,能不變盡量不變。
降低A:操作數隔離。比如加法器,乘法器這些部件,組合邏輯,只要操作數有變化就會產生功耗。所以采用操作數隔離,將不用的操作數直接置0可以省功耗。
降低A:自動門控。這個非常好實現,節省功耗效果還算明顯。綜合工具可以直接幫忙加入。如下圖所示,只要代碼風格寫的好,綜合工具就能自動幫你門控。
如果不開低功耗的綜合,綜合出的電路是這樣的
如果開了低功耗的綜合,綜合出來就是這樣的
如果Q就1兩個bit,那其實使用mux更省一些。如果Q比較寬,例如Q為32bit的話插入ICG就收益非常明顯。
既節省了功耗,1個ICG肯定是小于32個mux。所以自動門控可以既節省功耗,又節省面積。
降低A:無復位寄存器。數據通路上往往還有辦法。。。比如大量使用寄存器的地方,其實可以不用復位,采用無復位的寄存器,既可以節省面積,防止擁塞,又可以節省功耗。
3.2.3 實現
這個步驟主要是由DC搞邏輯門優化的騷操作。不需要我們干預什么,比如下面這樣。
對于上面這種,對于一個門有可能各個Pin的功耗其實不一樣的。把變化率低的信號mapping到低功耗的pin上就有好處。
3.2.4 較為激進的新技術
這部分可能目前的芯片不一定用的上。先提一嘴。等著技術發展。后面也可以專門寫寫這些新技術。
·Process In Memory,存內計算。能節省Memory到計算單元的搬運功耗。
·Nonvolatile Memory, 非易失存儲。用非易失的存儲,一方面,讀功耗比SRAM小,二方面,不用就關電壓。
·亞閾值/近閾值技術。設計電路,降電壓降到閾值附近甚至低于閾值。增大靜態功耗的代價換取小的動態功耗。
3.3 流片制造階段
這個階段其實對于設計者來說大多數不可見的。我們講講兩個可見的。主要是std_cell可以選擇。理論上,隨著工藝的演進,電壓會降低,但是由于工藝越先進,一般芯片做出來頻率越快,單位面積上的晶體管也更大,所以工藝演進對功耗的影響其實不好說。
3.3.1 Multi-bit Cell
比如寄存器,這個東西版圖一般是由代工廠來給的。單個寄存器版圖如下圖。
如果這個東西不定制,DC會搞出兩個一毛一樣的cell,這時候提供這樣一個2bit cell
或者這樣提供一個4bit cell,功耗就能小。
能降功耗主要歸功于clock pin電容降低了,時鐘樹buffer減小了。繞線也變短了。
3.3.2 提供不同閾值的晶體管
一般來講,代工廠會提供好多種閾值電壓的cell. HVT和LVT就是兩種典型cell。HVT晶體管不容易switch, 功耗低LVT速度更快,但功耗更大。
3.4 封裝測試階段
封裝測試階段芯片其實已經都定型了,芯片本身的功耗優化還剩最后一個手段。AVS。AVS指的是Adaptive Voltage Scaling。基本原理是芯片做出來后篩選一波。有些芯片正好就造的比較好,那就降低點電壓,有的芯片造的不行,只能提電壓。由于工藝誤差等等各方面因素,芯片就是有體質的不同。。。比如intel的CPU,有的能超頻,有的超不動。這個階段就在瘋轉測試階段來做。篩片降功耗。
4 總結
本文是這個系列的一篇彩蛋,講講從全流程如何優化芯片的功耗,只能講個大概,實際情況還需要在項目中摸索。后續我們講講PPA里的Performance和Area。
編輯:黃飛
?
評論
查看更多