如何设计低功耗SOC
一,綜述
0
常見的低功耗技術(shù)
常見的技術(shù)可以總結(jié)為7種,其中前4種需要設(shè)計者重點關(guān)注,后面三種其實都集成到工具里了,不專門做這方面研究的知道原理即可。
(1)power gating, 關(guān)電壓。手動設(shè)計,需要重點關(guān)注。
(2)多點源域設(shè)計。手動設(shè)計,需要重點關(guān)注。
(3)Frequency and Voltage scaling design。手動設(shè)計,需要重點關(guān)注。
(4)應(yīng)用層面優(yōu)化。手動設(shè)計。玄學??梢躁P(guān)注。
(5)Clock gating。知道原理即可,工具自動優(yōu)化。
(6)邏輯門動態(tài)功耗優(yōu)化。知道原理即可,工具自動優(yōu)化。
(7)晶體管閾值優(yōu)化。知道原理即可,工具鏈自動優(yōu)化。
1
Power Gating
比較簡單粗暴,關(guān)掉某一塊不用的電源。這樣動態(tài)功耗和靜態(tài)功耗都被干掉了。這部分東西比較主流。
2
多電源域設(shè)計
設(shè)計多個電源域。不同的電源域用不同的電壓。比如速度慢的用低電壓,速度快的用高電壓。細節(jié)可以看這個桔里貓:如何設(shè)計低功耗SOC(三,多電源域)。
3
Frequency and Voltage scaling design
通過降電壓和頻率來節(jié)省能量。這一條也比較關(guān)鍵。各種ISSCC文章水指標的秘籍。發(fā)文章和時機使用都非常有效。樓主曾經(jīng)用65nm工藝下流片的測試結(jié)果發(fā)現(xiàn)只要頻率足夠低,供電電壓能降到0.5-0.6之間。節(jié)省的功耗還是巨大的。細節(jié)看這個。
4
從應(yīng)用層面降低功耗
顧名思義,從應(yīng)用層面優(yōu)化功耗。比如筆者在某一年國際會議上遇到一個MIT的小姐姐,她們做了一個神奇的工作,主要研究如何訓練神經(jīng)網(wǎng)絡(luò)模型,讓計算的時候翻轉(zhuǎn)率變小從而節(jié)省功耗。不過這種東西可能更適合小公司,因為對于大公司來講芯片做出來怎么用對于芯片設(shè)計者來講基本上是不歸你管的。不讓你做防呆設(shè)計就不錯了你還指望人家聽你的給你搞這個。
上面方法是架構(gòu)和前端需要重點關(guān)注的技術(shù),后面這些前端已經(jīng)要碰不到了。
5
Clock Gating
直接把時鐘停了,這樣可以干掉動態(tài)功耗。實際上在數(shù)字芯片里時鐘網(wǎng)絡(luò)本來就占用了很大功耗,有可能超過50%。其原理是這樣的。
比如有個EN信號,這個EN信號有效寄存器值才變,那不如直接用這個en把時鐘屏蔽了。寄存器多的時候節(jié)省還是挺明顯的。但需要注意的是,clock gating雖然是很直接的辦法,但是一般來說你不要頭鐵自己去RTL層面寫這個clock gating, 工具都會給你優(yōu)化好。你自己頭鐵寫個clock gating上去非常有可能產(chǎn)生個毛刺啥的影響正確性。
6
邏輯門動態(tài)功耗優(yōu)化
綜合工具除了能幫你搞clock gating, 還能幫你搞邏輯門優(yōu)化的騷操作。比如下面這樣。
對于上面這種,對于一個門有可能各個Pin的功耗其實不一樣的。把變化率低的信號mapping到低功耗的pin上就有好處。
7
使用不同閾值VT的晶體管
這個應(yīng)該好理解,VT大了晶體管不容易翻轉(zhuǎn),所以delay大。但是漏電流就小。反之相反。所以需要快速翻轉(zhuǎn)的用LVT,不需要速度的用HVT。這個東西也是有綜合工具幫你搞定的。
8
總結(jié)
低功耗設(shè)計還是非常重要的,為了讓你的SOC有競爭力,低功耗流程來一套先。對于設(shè)計者來講,還是要關(guān)注大頭。比如power gating, multi voltage. 扣細節(jié)感覺收益不大。比如第6點,這種雞肋技術(shù)。
二,Power Gating
1
Power Gating的概念
Power Gating是最直接有效的辦法節(jié)省功耗,因為你都關(guān)斷了嘛。所以從系統(tǒng)層面來講,power gating的目的是人為設(shè)計兩種芯片運行模式,一種低功耗模式和一種運行模式。在低功耗模式下只打開必要的組件來節(jié)省功耗。
2
實際上的工作模式
如上圖所示,為電路增加了power gating模式以后,會引入額外的開銷,wakeup是需要時間的,功耗到達最終的power gating功耗(即使power gating了任然會有少量漏電流的)也是需要時間的。
所以節(jié)省的功耗是中間凹下去的那個坑減掉wakeup那段功耗。設(shè)計的時候要充分考慮這個因素。如果你的芯片一直在工作(duty cycle非常大),那么power gating的收益就有些小。
總結(jié)起來,需要考慮恢復(fù)開銷和power gating節(jié)省的功耗哪個大。舉個簡單的例子,多核CPU,要是某個核執(zhí)行完任務(wù)了,power gating開銷就不大,如果需要重新建立cache什么的,開銷就非常大。
3
Power Gating的實際做法
實際的power gating有兩種做法,第一種是暴力做法。兩個電源域,一個電源域引出單獨的power pin腳,物理斷電。這種辦法適用于非常長時間的關(guān)斷。如果想用內(nèi)部控制關(guān)斷的話就需要采用第二個方法,在片上實現(xiàn)一個controller。
如上圖所示,首先,我們需要一個power gating controller, 通過power swithing network來切換電源,你可以理解為這是個開關(guān)。這樣就能把中間的block電源切換掉,例如從VDD切換成VSS。其中有幾個點需要注意。
(1)要關(guān)掉的模塊輸出需要接一個ISOL模塊,用來隔離的。為什么需要這個模塊呢?因為power gated block關(guān)斷以后,電壓會慢慢下降,在閾值電壓附近呆好久。那always on block的相關(guān)晶體管就漏電流很大。所以需要一個隔離模塊。一旦從VDD變?yōu)閂SS后把輸出直接拉到目標電壓。在本章第4節(jié)著重講一下這個問題。
(2)如果gated block的某些寄存器值不想丟的話這些寄存器可以用rentention registers。大致原理就是用特殊的具有低功耗模式的寄存器,在低功耗狀態(tài)下值不可變,但是能保留。
(3)為了關(guān)斷power,你可以把vdd換成VSS,也可以從VSS變成VDD。但一般情況下關(guān)斷最好吧VDD變成VSS。因為多點源域一般是共地的,但VDD各不相同。把VSS變成VDD還有點困難的。
(4)power gating相關(guān)的控制信號最好能在測試模式下直接用IO引出來,不然芯片一旦出了問題你會哭的的。
4
Power Gated Block輸出如何做隔離
輸入不需要特殊處理,但輸出隔離是非常關(guān)鍵的。如3節(jié)所講,輸出是會影響下級的功能和功耗的。最粗暴的辦法是加入專門的隔離單元,這些隔離單元不會被綜合優(yōu)化掉。
比如上面兩種單元。左面是把信號直接拉到低,右面是直接拉到高。一般來講,按照慣例我們直接用左面的。因為一個block關(guān)掉了輸出是VDD你不覺得怪怪的么。需要注意的是這兩單元要特殊處理的,不要直接在RTL寫個與門,否則有被優(yōu)化掉的風險,加入這些東西會引入一個邏輯門的延時。
對于IP設(shè)計者來講,這兩個門要自己帶上。這樣SOC級別的設(shè)計者不用考慮這些東西。有幾個點需要注意:
(1)隔離單元要永遠開著電源,不要手滑把隔離單元給劃到關(guān)斷區(qū)域了,否則就GG了。
(2)一般來講不要在gated block里生成時鐘,因為clock路勁上放隔離單元是真的坑。
5
典型的Power Gating過程和結(jié)構(gòu)
如上圖所示,首先把clock關(guān)掉,然后把隔離信號打開。然后把該保存的寄存器保存好,然后把reset放好,然后再關(guān)電源,順序不要錯。(唯一能錯的是save, 這個階段有可能不需要保存,也有可能直接在不關(guān)clock之前保存)。
如上圖所示,一個芯片中可能有很多種Power gating模式的。但是不同電壓域要在一個module里,盡量不要嵌套太多的power gating。主要是麻煩,易出錯。
另外,設(shè)計的時候不要上頭,為了節(jié)省功耗關(guān)了不該關(guān)的東西。比如下面這種情況。
你把domain B觀點,AC就GG了。一定要非常小心確保所有東西都在考慮范圍內(nèi)。
6
總結(jié)
power gating的概念到這兒基本就講完了,主要大頭還是個后端問題。對于架構(gòu)要分清楚要有幾個電壓域,芯片有幾種低功耗模式。對于前端要搞明白接口信號是啥,同時要實現(xiàn)一個控制器用來斷電和喚醒電源域。對于后端要正確實現(xiàn)電源域,加上隔離模塊等等。
三,多電源域
1
多電源域的原理
由于動態(tài)功耗是VDD的平方關(guān)系,所以降電壓是可以降功耗,當然代價是電路延遲會變大。
這就給降低功耗帶來了空間,某些部件并不需要跑的非常快。如上圖,SOC部分如果速度慢可以到0.9V。
2
多電源域可能帶來的問題
任何事情都是有代價的,比如多電源域的代價就包括:
(1)需要變壓器, 英文名是Level shifters. 這個東西主要是后端要考慮。所有信號都需要level shifters. 因為你拿0.7V的電源域信號去驅(qū)動1.0V的電源域很容易導(dǎo)致1.0V的晶體管時時刻刻在漏電。而level shifters其實是會導(dǎo)致延遲的。
(2)時序分析不好做。因為電壓不同會導(dǎo)致時序不同,跨電源域的信號時序分析就比較麻煩。當然,現(xiàn)在基本上工具都會支持多電壓域的分析了。但是要注意的是各個情況都要測試一遍,比如有時候電壓域會工作在幾種不同的電壓狀態(tài)。
(3)布局的時候電源網(wǎng)絡(luò)更加復(fù)雜了。
(4)上電斷電順序可能是有要求的。
3
總結(jié)
這一章節(jié)較短,主要是多電源域更多的是一個后端經(jīng)驗問題,需要有經(jīng)驗的后端來處理這事兒。對于架構(gòu)設(shè)計者來講,主要就是搞清楚降電壓是影響時序的,確保不會因為多點源域影響系統(tǒng)的功能就好。
四,降電壓頻率
1
降電壓頻率的基本原理
這個在多電源域的時候就講過,降電壓是可以降動態(tài)功耗的,但是會增加延時。對于數(shù)字電路來講,可以通過降低時鐘頻率的手段來保證功能的正確。
如上圖所示,對于一個固定的電壓,能跑到的最高頻率是有限度的。但是一般來講并不能無限通過降低電壓來節(jié)省功耗,因為電壓降低到一定程度芯片計算結(jié)果就不對了。
如上圖所示,能節(jié)省的功耗其實是兩方面的,一方面是電壓變低了,另一方面是因為頻率降低了翻轉(zhuǎn)率變低了。
2
降電壓頻率可以節(jié)省能量么?
那么你要問了,頻率變低了,豈不是完成一個任務(wù)的時間變長了?事實上確實是這樣的。
如上圖所示,如果單純的降低頻率其實是沒什么作用的,但是同時降電壓和頻率就不一樣。電壓與功耗是平方關(guān)系,最后會導(dǎo)致整個芯片消耗的能量往下降。
3
DVFS是什么?
這個詞可以說是非常容易出現(xiàn)了。Dynamic Voltage and Frequency Scaling,動態(tài)的電壓頻率調(diào)節(jié)。最常見的實現(xiàn)手段是用CPU來來調(diào)節(jié)電壓和頻率。典型的做法如下圖。
主要的過程有兩種。如果目標的頻率比現(xiàn)在高,那么先調(diào)電壓,再調(diào)頻。
(1)CPU先給Power Supply外設(shè)寫個值,調(diào)一下電壓。
(2)然后等著,直到電壓變高。
(3)然后CPU頻率切到高頻即可。
(4)如果SOC部分需要調(diào)頻,那通過CPU配置Sysclock generator或者PLL即可。
反過來,如果目標頻率比現(xiàn)在低,先調(diào)頻率,后調(diào)電壓。一般來講,頻率電壓數(shù)值是提前設(shè)計好的,會有若干的頻點,工作狀態(tài)在這些頻點之間變化。
一般來講,為了時序好處理,一種簡單的辦法是CPU的時鐘只允許是總線的整數(shù)倍。然后接口出加上latch。
如上圖所示,LPHLAT就是latch,HCLK是BUS的時鐘。latch的作用是同步一下CPU的信號,然后時序約束的時候考慮一下CPUCLK和HCLK的差別留出足夠的余量就可以了。
4
總結(jié)
這個部分東西學術(shù)研究還是比較多的尤其DVFS的各種變種。但是實際產(chǎn)品中如果不是極致追求,不一定能用的到。
【本文轉(zhuǎn)載網(wǎng)絡(luò),如有疑問請聯(lián)系本人?!?/p>
總結(jié)
以上是生活随笔為你收集整理的如何设计低功耗SOC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php301快照劫持代码,2021最新版
- 下一篇: 环信即时通讯聊天记录