對我自己來說,低功耗設(shè)計的經(jīng)驗雖然算不上非常豐富,但是至少在做過的項目中有些在低功耗方面要求極高,因此對低功耗設(shè)計的一般做法和主要手段還算有些了解。同時鑒于某些公司由于產(chǎn)品類型、技術(shù)、市場等諸多方面的限制讓很多同學(xué)完全無法接觸到低功耗設(shè)計,因此想借次機(jī)會和大家聊聊我的一些基本經(jīng)驗和感受。
盡管如此,仍然需要承認(rèn),對于低功耗設(shè)計本人完全談不上有多精通,很多細(xì)節(jié)我也不見得理解地有多到位,因此希望有經(jīng)驗的同學(xué)共同探討,不吝賜教。
今天我想先從基本概念說起,對基本概念已經(jīng)比較清楚的同學(xué)可以跳過。
對低功耗設(shè)計的追求緣起于日漸膨脹的芯片功能,不斷增高的運行頻率和隨之而來的高功耗與高發(fā)熱等方面的因素漸漸對設(shè)備整體性能造成越來越嚴(yán)重的影響。CPU在高功耗和高發(fā)熱方面的問題人盡皆知,因此很多電腦都需要額外的散熱設(shè)備;移動設(shè)備上充電間隔越來越短,這固然因為電池技術(shù)遲遲沒有重大突破,但是芯片的高功耗也難辭其咎。因此在多年前,業(yè)界就對低功耗設(shè)計做了大量的理論和實踐的嘗試,積累了很多至今仍廣泛應(yīng)用并行之有效的手段。
從原理上說,功耗即為功率,指的是單位時間內(nèi)消耗的能量。在此我們不再詳述功耗的原理,直接引出在芯片設(shè)計上常用的低功耗設(shè)計思路:
芯片設(shè)計領(lǐng)域比較常見的低功耗設(shè)計方向,其中應(yīng)用最多的就是優(yōu)化芯片架構(gòu),升級生產(chǎn)工藝、降低芯片工作電壓、采用不同速度的標(biāo)準(zhǔn)單元,分區(qū)域采用不同電壓的電源以及模塊關(guān)斷(多電壓域),而其中和后端設(shè)計有關(guān)的,基本上有以下幾種:升級生產(chǎn)工藝;降低芯片工作電壓;關(guān)斷部分時鐘(Clock Gating);采用不同速度的標(biāo)準(zhǔn)單元(Multi-Vth庫);多電壓域設(shè)計(Multi-Voltage)。在詳細(xì)解釋上述概念之前,我想先把芯片中主要的功耗構(gòu)成簡單提一下。
關(guān)于靜態(tài)功耗和動態(tài)功耗的細(xì)節(jié)方面可以參考本專欄之前的文章:【數(shù)字后端基礎(chǔ)之:芯片的整體功耗是如何計算出來的?】在上述各種低功耗設(shè)計手法中,也是從降低這兩方面的功耗出發(fā)的。下面我們詳細(xì)解釋一下這幾種與后端息息相關(guān)的低功耗設(shè)計方法。
升級工藝
這是應(yīng)用最廣泛,最行之有效的方法之一。它的原理在于,隨著晶體管的尺寸越來越小,leakage power在芯片整體功耗中所占的比重越來越大,而先進(jìn)工藝的晶體管尺寸更小,泄漏電流也更小,從而能夠整體降低leakage power。因此我們經(jīng)常能夠看到這樣的新聞:某某芯片從22nm升級到14nm,性能提升x%,功耗降低y%等。這其中的功耗降低固然可能包含架構(gòu)方面的改善,但是工藝升級帶來的優(yōu)勢一定是非常明顯的。
TSMC公開資料中最近幾代工藝的PPA比較,其他foundary廠的工藝參數(shù)在變化趨勢上應(yīng)該大致相同。正因如此,眾多手機(jī)用的SoC,包括但不限于蘋果A系列、高通驍龍系列、華為麒麟系列、三星Exynos系列等,每一代都迫不及待地爭搶最先進(jìn)工藝上的實現(xiàn),就是因為先進(jìn)工藝帶來地功耗和性能優(yōu)勢太過明顯,以至于誰都無法忽視。
降低芯片工作電壓
按照中學(xué)物理的計算公式,功率與電壓和電流的乘積正相關(guān)。在芯片上計算功耗雖然沒有這么簡單,但是從原理上降低芯片電壓仍然是降低功耗最直觀最有效的方法。也正因為如此,當(dāng)前大多數(shù)芯片的工作電壓從最初的5V、3V一路下降,目前基本都在1V以下甚至0.5V以下。而隨之而來的困難在于,隨著電壓的下降,標(biāo)準(zhǔn)單元的速度也會隨之變慢,但是電子設(shè)備對處理速度亦即芯片頻率的要求卻越來越高。以移動設(shè)備為例,最初的芯片頻率不過幾十上百兆赫茲,而現(xiàn)今最快的手機(jī)SoC頻率峰值已經(jīng)超過2GHz。這方面也是每一代芯片升級背后所需要解決的技術(shù)難題之一。
關(guān)斷時鐘(Clock Gating)
動態(tài)功耗主要是由信號的翻轉(zhuǎn)引起的,而在芯片中,翻轉(zhuǎn)最頻繁的信號就是時鐘(Clock)信號。我們知道,芯片中各種邏輯功能的傳輸,數(shù)據(jù)保存等電路是由下列timing path組成的。簡而言之,就是前面的FF1寄存器的數(shù)據(jù)通過一系列運算后,在時鐘信號clk的作用下,被后面的FF2寄存器捕捉,完成一次數(shù)據(jù)傳輸。但在實際中會有這樣的情況發(fā)生:FF1傳過來的數(shù)據(jù)和FF2當(dāng)前保存的數(shù)據(jù)相同,也就是FF2的數(shù)據(jù)無需翻轉(zhuǎn)刷新仍能保證功能的正確性,而此時clk仍然翻轉(zhuǎn)一次刷新了FF2的數(shù)據(jù)。這種情況盡管在功能上沒有任何問題,但是在功耗方面卻是實實在在的浪費。因此,在電路設(shè)計階段以及邏輯綜合階段,設(shè)計者和EDA工具會根據(jù)芯片的功能和實際數(shù)據(jù)的變化情況,人為或者自動地插入一系列的clock gating cell,從而保證僅在數(shù)據(jù)發(fā)生變化的時候信號才會翻轉(zhuǎn)。
這是當(dāng)前芯片行業(yè)最常用也是最容易使用的設(shè)計方法之一。所謂Vth,指的是邏輯門的閾值電壓。而閾值電壓和功耗與速度存在如下關(guān)系:閾值電壓越高,cell速度越慢,功耗越小;反之閾值電壓越低,cell速度越快,功耗越高。
在實際應(yīng)用中,一般采用的策略為:對于性能要求高的模塊,或者頻率比較高的部分,采用Vth比較低的cell,讓setup更容易收斂;對于性能要求較低的模塊,或者頻率較低的部分,多采用Vth比較高的cell,讓功耗更低。通過這種方法,可以實現(xiàn)在同一塊芯片上,根據(jù)性能和功耗的不同要求而調(diào)整cell的使用,從而避免在不太重要的功能上浪費過多的功耗。在使用手機(jī)的時候,我們經(jīng)常會遇到這種情況:當(dāng)我們看到電池快要沒電而手頭有沒有充電設(shè)備的時候,我們會盡量關(guān)閉所有應(yīng)用,不再聽歌不再看視頻,甚至連地圖的定位與導(dǎo)航功能都不再開啟,其根本目的就在于減少消耗電池的功能。在芯片設(shè)計中也引入了這種理念:一顆SoC中可能包含很多功能模塊如視頻處理(DSP),音頻處理(AUDIO),定位(GPS),游戲(GPU),存儲(Memory)等,但大多數(shù)功能并不會同時開啟,因此為了降低不用模塊在等待狀態(tài)下消耗的功耗,干脆就設(shè)計成在不用的時候把它們關(guān)閉。這就是Power Gating最初的想法。與此同時,對于性能要求較高的CPU,GPU等模塊,由于需求頻率較高,在設(shè)計上可能采用較高的電壓,而一些不太核心的模塊如AUDIO,GPS等,可以采用相對低的電壓來設(shè)計。
這樣一來,芯片的功耗最低時僅有一個CPU內(nèi)核處于開啟狀態(tài),可以大幅度減少其他模塊在等待時的電量消耗,從而增加電池使用時間。
盡管它的思路很簡單,但是在實際設(shè)計中不管是不同電壓還是模塊關(guān)斷,都會帶來很多額外的問題,這些問題以及業(yè)界普遍應(yīng)用的解決方案我們將在后面的文章中一一提及。