對於現在的IC來說,
除了追求性能外另外一個重點就是如何降低功耗,
除了電池考量外,高功耗帶來較高的溫度,然而隨著溫度升高有可能會導致IC燒毀,
以及cooling的設計會替產品帶來較高的成本,
因此對於如何降低chip的功耗逐漸成為了ic design的顯學
以APPLE 最新的A18 Core來說對比A16的power consumption降低了35%,
那對於ic design的過程中有甚麼手法有機會讓chip的功耗降低呢
在這邊來探討一下
以現今主流的low power 技術大致上有幾種
這裡來上述的item做更深一點的介紹讓各位了解到其內涵,
首先對於logic power consumption計算來說,
有一個屬於他的model
Total power = Dynamic power + Static power
這個公式淺而易懂,
意思就是logic power消耗的總和 = 因為變化造成的power消耗 + 底電提供的power消耗
舉個好懂一點例子,
就像是電動車一樣,
當發動後,即使沒有踩油門,也會因為必須讓汽車處於一個可正常工作的條件下,
電池會對發電機等周遭的設備提供一定的電源供應,這個基礎的供電消耗就是屬於static power的部分
而因為油門加速所造成額外的電力消耗則是屬於dynamic power.
又或是我們日常在使用手機一樣,
相信大家都有注意到,即使我手機擺著不用,一段時間後電池的電量還是會隨著時間降低,
因為手機處於一個待機的狀態,電池必須提供他最低的一個用電需求,讓他處於一個功能正常隨時可用的狀態,這就像是底電的部分,屬於static power consumption,又稱為leakage power
對於我們在划手機時,會使的螢幕等一直不斷地更新去update最新的data,
在為了要更新狀態所消耗的電就屬於dynamic power consumption,亦為switching power + internal power (short circuit power)
那我們把觀察的scale 縮小
縮到剩一個CMOS來說,
CMOS 屬於電路中的最基本元件,
在操作上,必須提供他一個最基本的工作電壓,也就是底電的部分,讓他可以處於一個待命的狀態,隨時都可以運作,這時所消耗的最基本電量即為static power
對於trigger cmos output從0變成1或是從1變成0,
因為這個轉換的過程所造成的電量即為dynamic power
Total power = Dynamic power + Static power
= (Switching power + Internal power) + leakage power
1.clk gating
clk gating屬於ic design中最常見的手法,
IC在運作過程中,所有的register或latch皆是由clk來trigger,
每當active clk來臨,就會去更新data
假如我function都劃分得很開,
每塊module都有自己特定的功能,
像是對於手機運作來說,
如果我只想要用藍芽耳機聽串流音樂,
此時我使用到的module可能有blue tooth module , DAC module , wifi module ,
此外像是display ,camera module等是完全不用被用到的
因此這些不會用到的module基本上就算該區域個regiser一直被clk trigger也不會需要update任何東西,
所以我們就說,那不如直接把這些沒用到的module clk直接停掉吧
這樣這些idle的register就不會再動了,直接切掉了dynamic power
只會剩下讓他們維持待命所需的基本電量消耗 static power
因此對於做了clk gating的register來說
基本上可以看成Total power = static power = leakage power
此外於clk source to register上的 clock tree cell也會一併停止toggle
power gating 和clk gating一樣常見的技術,
對於power gating來說,使屬於一個簡單暴力的省電方法,
對於那些不需要使用的module,我直接把他的供電給關了,
等到下次要被使用時,再把他開起來,表面是就是幫module的供電上裝一個開關,
不用時可以把電關掉,
和我們生活中一樣,隨手關燈達到省電的效果,
以clk gating使用的例子來說,
我用藍芽耳機來聽串流音樂,
就只會用到某幾個module而已,
對於剩下處於idle狀態的register來說雖然因為使用了clk gating來省掉了dynamic power,不過最終還是剩下了static power
因此我狠一點在這些module 供電的地方裝一個開關,
在不用的時候除了把dynamic power掐掉外,連底電都不給他了,
直接達到沒有耗電的狀態
Total power = 0
等到下次會需要使用時,我們在把power給他開回來