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