深入淺出ClockGating – 緣起 (爲什麼要做ClockGating)


深入淺出ClockGating – 緣起 (爲什麼要做ClockGating)

2021-03-02 碼農的假期

隨著晶片工藝的進步以及晶片規模的變大,晶片的功耗問題越來越成爲晶片設計時要考慮和規劃的一個方面。晶片中的功耗通常可以廣義的定義爲動態功耗和靜態功耗兩大類。

靜態功耗通常包含了晶片在不翻轉的狀態下產生的漏電功耗(關不緊產生的功耗)、襯底電流產生的功耗、熱電子效應導致的電流效應而產生的功耗等幾部分構成。通常情況下靜態功耗在前端設計階段很難做出一些優化(當然可以做電源關斷處理,本文不討論),而是一般要基於ME/BE的流程或者工藝方面的改善才能夠達到更好的結果。所以靜態功耗優優化不是本文討論的重點。

圖一靜態功耗圖示

動態功耗的來源通常包含了兩部分,第一部分,也是晶片中功耗消耗所占比例最大的一部分,是由於cell的充放電產生的功耗,如下圖二所示。以Inverter電路爲例,由一個PMOS和一個NMOS構成,在輸出端可以等效認爲有一個對地電容,每次IN從0—>1,PMOS會從導通狀態變爲斷開狀態,相反NMOS會從斷開狀態變爲導通狀態,從而導致電容從NMOS對地放電。相反當IN從1à0,會導致電容通過PMOS進行充電。這種充放電的過程,就會消耗很大一部分電能,從而產生功耗。

圖二動態功耗圖示 – cell充放電功耗

動態功耗的另一部分是由於cell在翻轉的過程中,PMOS與NMOS同時導通的瞬間而產生的功耗,又稱作internal power。如圖三所示,cell在翻轉的過程中,總會出現一小段時間PMOS與NMOS同時處於導通狀態,這時就會出現從VDD到GND的一條直流通路,這個過程雖然很短,但是處於這個過程時,電路中的電阻是非常小的,所以整個通路中的電流就會非常大。但是儘管如此,與上面講的動態功耗相比,所占比例還是相對較小的。

圖三動態功耗圖示 – internal power

由上面分析可以看出,動態功耗產生都是由於cell 翻轉導致的。而在晶片中,翻轉頻率最高的路徑便是clock path了。並且clock路徑上是要做CTS處理(clock tree)的,就會導致整個clock路徑上的CK-BUF或CK-INV特別多。而clock每個cycle的翻轉會帶動整條path上所有cell的翻轉。據統計,一個晶片中,clock路徑上的這種功耗消耗會能夠占據到整個晶片功耗比例的40%甚至更多。所以對clock路徑做動態關斷,能夠很大程度上節省功耗消耗。這種對clock進行關斷的技術就被稱作是clock gating。

接下來我們會跟大家一起梳理一下,如何去實現clock gating?如何避免電路中出現的不符合我們預期的clock gating check path?什麼時候工具會自動的進行clock gating check?等等的這一系列的問題,會逐漸的在後面進行文章更新。