功耗組成與分類

有鑑於我身邊很多人還是不懂功耗的組成,這邊也稍微介紹。一般做 RTL 設計,在 Report 中會顯示 Interal Power、Switching Power、Leakage Power 三種。而一般學校學到的是動態功耗 (Dynamic Power) 和 靜態功耗 (Static Power)。

其中 Interal Power、Switching Power 兩者都屬於 Dynamic Power;而 Leakage Power 則屬於 Static Power。

動態與靜態功耗

動態功耗

動態功耗常用 $P=\alpha{}CV^2f$ 來描述,$\alpha{}$ 描述的是電晶體在低電壓和高電壓的變化機率、C 為電容值、V 為電壓、f 為操作頻率。一般的硬體 (除了低功耗電路外),動態功耗會遠比靜態功耗大的多。因此,電壓的調整在手機晶片是一個非常重要的技術。

靜態功耗

靜態功耗常用 $P=I_{mean}V$ 來描述,$I_{mean}$ 是平均電流、V 為電壓。

Interal、Switching、Leakage Power

Interal Power

這邊用一個 Inverter 為例,當輸入由 0 變 1 或 1 變 0 時,會有一瞬間 VDD 和 VSS 導通。這個瞬間會有電流直接的從高電壓流向低電壓,造成功耗損失。很明顯的,這個功號的大小取決於 0 和 1 的轉換率。此外,頻率也會大幅的影響,當頻率越高,轉換的次數也就會跟著提升。

Switching Power

當我們要把輸出從 0 變 1 或 1 變 0 時,由於輸出端實際上有寄生電容,我們需要額外的功耗把電容充滿,這就是所謂的 Switching Power。

Leakage Power

所有的電晶體本身都會有的漏電效應。

如何估計與優化功耗?

估計動態功耗 (dynamic power)

雖然說調整電壓對於動態功耗是最有影響性的,但在數位設計中,我們不能夠去改變電壓。因此想要估計動態功耗,基本上就是跟

  1. 操作頻率相關:可以盡可能的調低操作頻率來降低動態功耗。
  2. 降低低電壓和高電壓的變化機率 $\alpha{}$:這會和本身架構的邏輯相關。我個人認為,當電路很複雜時,一個大方向是不要有過長的 critical path,也不要有太多條(也要盡量避免使用 multicycle path)。這是因為,基本上變化機率會隨著邏輯電路的層級數呈現大幅增長(甚至是指數級增長),如果 critical path 太長就會造成整體電路的 $\alpha{}$ 變高。

估計靜態功耗 (static power)

一般 EDA 軟體估計 static power 的方式就是到 lib 把所有元件的 leakage 值相加而成。我個人認為根據大數法則,基本上會跟面積有高度的正相關性。因此,我通常會直接用面積來估算不同架構間的靜態功耗的比例。

小結

我要重申,使用這些經驗法則的時機在於:我們只有粗淺的架構想法時。實際上和用 EDA 軟體設計出來的值還是會有差距。例如,在 IC 競賽時,我們通常是先想好架構,後面的時間進行實現,在有限時間我們不可能把好幾種架構都全部試過。在這樣的情況下,這些經驗法則就會變得更為重要。