低功耗設計這個專題整理了好久,有一個月了,有圖有證據:

                            

  然而最近一直有些煩心事、鬱悶事,拖延了一下,雖然現在還是有點煩,但是還是先發表了吧。下面我們就來聊聊低功耗設計吧,由於文章比較長,因此我就不一次性發完,我整理之後再發上去。當然,這裡的低功耗設計基本上是入門階段,也就是大部分從理論角度進行闡述,你也可以說是從書本上說的,但是呢,我可以先給大家劇透一下:不僅僅是從理論上說,我還結合EDA工具進行說明如何進行低功耗設計。廢話不多說,下面就來看看這個專題的主要內容:

  ·低功耗設計的目的

  ·功耗的構成/型別

  ·功耗分析與流程——使用EDA工具

  ·低功耗設計與優化

一、低功耗設計的目的

1.便攜性裝置等需求

  電子產品在我們生活中扮演了極其重要的作用,便攜性的電子裝置便是其中一種。便攜性裝置需要電池供電、需要消耗電池的能量。在同等電能提供下,低功耗設計的產品就能夠工作更長的時間。時間的就是生命,因此低功耗設計是很重要的。便攜性的裝置需要低功耗裝置,比如說手機,如果充電兩小時,通話5分鐘,這誰還買你的手機...

2.可靠性與效能的影響

  裝置消耗電能,會產生熱量;消耗的能量越多,產生的熱量越多。發熱越嚴重,熱噪聲越大,就會影響器件的正常工作,導致電路不能正常工作。發熱量的增加,可能會使工作在1G下的電路,只能工作在500M,這就影響了速度,這最常見的就是手機的發熱了,手機發熱之後,便感覺卡卡的。

3.成本的影響

  如果不注意進行低功耗設計,那就可能導致後期的成本增加,從而導致整個系統的成本增加。例如,不進行低功耗設計,發熱量就可能增加,在封裝的時候,就需要考慮怎麼給你這個晶片進行散熱,從而增加了封裝的散熱成本。再比如,在進行系統組裝的時候,如果那你的晶片功耗過大,就需要考慮在系統外給你進行散熱,比如說新增一個風扇,發熱很嚴重的甚至可以給你進行液體降溫。這樣子就在系統組裝上面增加了組裝成本。因此在設計初始進行低功耗設計是很重要的。

  ······

  當然,除了上面那三點之外,還有許多要進行低功耗設計原因,這裡列出三點,主要是為了說明低功耗設計是以後的數字IC發展趨勢之一,我們要注重低功耗設計。

二、功耗的構成/型別

  本小節主要一方面介紹一下功耗的構成,一方面介紹一下工藝庫中的功耗模型。功耗的構成可以從兩個角度來描述,一個是從功耗種類方面,另一個是從系統結構方面。我們在設計過程中,討論比較多的往往是從功耗角度方面;工藝庫中的功耗模型主要是結合工藝庫來對功耗種類進行一些具體的、補充式的講解。下面我們就來看看功耗的工程吧。

1.功耗的構成——按型別分

  低功耗按照型別分類呢,其構成主要有動態功耗、靜態功耗、浪湧功耗這三種。在這第一小點我主要做一些簡要的介紹,在後面的第三小點我將結合工藝庫進行介紹。

  (1)動態功耗

  動態功耗包括:開關功耗或者稱為翻轉功耗、短路功耗或者稱為內部功耗。

①開關功耗

  在數字CMOS電路中,對負載電容進行充放電時消耗的功耗,比如對於下面的CMOS非門中:

                 

當Vin = 0時,上面的PMOS導通,下面的NMOS截止;VDD對負載電容Cload進行充電,充電完成後,Vout的電平為高電平。

當Vin = 1時,上面的PMOS截止,下面的NMOS導通,負載電容通過NMOS進行放電,放電完成後,Vout的電平為低電平。

這樣一開一閉的變化,電源的充放電,就形成了開關功耗,開關功耗Psitch的計算公式如下所示:

                 

  在上式中,VDD為供電電壓,Cload為後級電路等效的電容負載大小,Tr為輸入訊號的翻轉率(關於翻轉率,我們在後面第三小點會進行介紹)。我們不必追究這個公式怎麼得來,我知道這個功耗在這麼計算就可以了,有興趣的話,也可以深入探討。

②短路功耗

  短路功耗也稱為內部功耗,短路功耗是因為在輸入訊號進行翻轉時,訊號的翻轉不可能瞬時完成,因此PMOS和NMOS不可能總是一個截止另外一個導通,總有那麼一段時間是使PMOS和NMOS同時導通,那麼從電源VDD到地VSS之間就有了通路,就形成了短路電流,如下面的反相器電路圖所示:

       

短路功耗Pshort的計算公式如下所示:

               

上式中,Vdd為供電電壓,Tr為翻轉率,Qx為一次翻轉過程中從電源流到地的電荷量。

  由此我們可以找到,動態功耗主要有開關功耗和短路功耗;其中開關功耗在動態功耗中佔大部分比例;從上面的兩個式子中我們可以看到,動態功耗主要跟電源的供電電壓、翻轉率、負載電容有關。

  (2)靜態功耗

在CMOS電路中,靜態功耗主要是漏電流引起的功耗,如下圖所示:

             

漏電流有下面幾個部分組成:

  ·PN接面反向電流I1(PN-junction Reverse Current)

  ·源極和漏極之間的亞閾值漏電流I2(Sub-threshold Current)

  ·柵極漏電流,包括柵極和漏極之間的感應漏電流I3(Gate Induced Drain Leakage)

  ·柵極和襯底之間的隧道漏電流I4(Gate Tunneling)

一般情況下,漏電流主要是指柵極洩漏電流和亞閾值電流(進入超深亞微米工藝之後,隧道漏電流成為主要電流之一),因此下面就簡單介紹一下這兩種電流。

柵極洩漏功耗:在柵極上加訊號後(即柵壓),從柵到襯底之間存在電容,因此在柵襯之間就會存在有電流,由此就會存在功耗。

亞閾值電流:使柵極電壓低於導通閾值,仍會產生從FET漏極到源極的洩漏電流。此電流稱為亞閾值洩漏電流。在較狹窄的電晶體中,漏極和源極距離較近的情況下會產生亞閾值洩漏電流。電晶體越窄,洩漏電流越大。要降低亞閾值電流,可以使用高閾值的器件,還可以通過襯底偏置進行增加閾值電壓,這些屬於低功耗設計,我們在後面的低功耗設計中會進行講解。

靜態功耗的計算公式如下所示,Ipeak為洩漏電流:

                 

靜態功耗往往與工藝有關,我們在第三小節中將進一步進行討論。

  (3)浪湧功耗

  浪湧功耗是浪湧電流引起的功耗。浪湧電流是指開機或者喚醒的時候,器件流過的最大電流,因此浪湧電流也稱為啟動電流。一般情況下,浪湧功耗不是我們關注的地方,因此這裡只是說明有這個功耗存在。

2.功耗的構成——按結構分

前面按照型別進行功耗分類,這裡使用結構進行分類,也就是根據裝置的結構或者裝置的構成進行分類。(以SoC為例)主要分為:時鐘樹功耗、處理器功耗、儲存器功耗、其他邏輯和IP核功耗、輸入輸出pad功耗。在不同的應用、裝置中,這些功耗的比例不一樣,但是時鐘樹、處理器、儲存器佔了絕大部分功耗,這是需要說明的。

3.工藝庫中的功耗模型

前面介紹了功耗的構成,在這一小點中,將結合工藝庫進行闡述功耗(的構成),同時結合工藝庫舉例說明功耗的計算。

  (1)工藝庫中的功耗資訊與計算

①開關功耗計算與相關庫資訊

  我們從前面知道,開關功耗主要就是對輸出電容的充放電引起的,工藝庫中有開關功耗有關的資訊,如下所示:

      

  開關功耗可以用開關能量和翻轉率來表示:P=E·Tr=C·v^2·T2,即開關能量E=CV^2。翻轉率我們後面會進行說明,至於放在後面介紹翻轉率,一個是即介紹即用,另外一個就是幫大家功耗的組成。

②內部功耗/短路功耗與相關庫資訊

  內部功耗前面我們也介紹了一些,這裡再囉嗦一下,短路功耗/內部功耗是單元(比如說反相器單元)的輸入從0到1或者從1到0的轉換過程中,單元內部P管和N管同時導通那個瞬間的功耗,這不是因為單元損壞而產生的短路功耗 。工藝庫中包含了單元的短路功耗,短路功耗由特性描述工具預先處理,存放在工藝庫的功耗查詢表裡。也就是說,我們可以通過工藝庫中內部功耗的相關引數,從而得到內部功耗。工藝庫中內部功耗資訊如下所示:

        

單元的內部功耗與其轉換時間和輸出電容負載有關,根據輸入轉換時間和輸出電容的大小,在工藝庫中進行查表,得到上升功耗和下降功耗,然後再根據下面的公式進行計算得到總的內部功耗:

Pi=(上升功耗+下降功耗)·0.5·Tr

需要補充一下,工藝庫中比較精確的功耗模型,功耗與狀態有關,與路徑也有關,即state dependent path dependent,SDPD。

③靜態功耗/漏電功耗與相關庫資訊

  靜態功耗/漏電功耗也是由特性工具預先處理,存放在工藝庫裡面。工藝庫中的靜態功耗資訊如下所示:

          

靜態功耗跟單元的狀態有關,也就是輸入(或者說單元)在不同的狀態下,對於的功耗不一樣,通過狀態進行查表,就可以得到相應的靜態功耗了。

  (2)計算舉例

①翻轉率

  前面我們一直說翻轉率,那麼翻轉率到底是什麼呢?這裡我們就來給大家介紹一下。

翻轉率(Toggle rate,Tr):單位時間內訊號(包括時鐘、資料等等訊號)的翻轉次數。如下圖所示:

               

訊號在40ns時間內跳轉了4次,翻轉率為:Tr = 4/4ns = 0.1GHz

②動態功耗計算舉例

  從前面中我們知道,在計算動態功耗的時候,我們才用到翻轉率。其中開關功耗的表示式為:

                 

內部功耗的表示式為:

        Pi=(上升功耗+下降功耗)·0.5·Tr

現在我們使用翻轉率和工藝庫的功耗資訊來計算一下電路的動態功耗,電路如下圖所示:

                       

工藝庫資訊如下所示:

          

·動態功耗中的開關功耗計算:

             

根據公式,我們可以直接計算出開關功耗為:29.403uw

·動態功耗中的短路功耗/內部功耗:

              Pi=(上升功耗+下降功耗)·0.5·Tr

根據公式,我們先要查詢工藝庫得到上升(沿)功耗和下降(沿)功耗。輸入轉換時間為1.20000,輸出電容負載為0.270000,因此對於的上升功耗和下降功耗分別為:0.214947和0.094129。因此總的內部功耗為:

             

·於是得到總的動態功耗為:

             

③其他事項

·單元的功耗可能與狀態和路徑有關,下圖中:

           

左圖是RAM單元,在讀狀態和寫狀態時,功率是不同的。此外,單元的功耗在不同的操作模式下也有不同的值。

右圖表示了輸入到輸出的不同路徑,路徑不一樣,功耗也是不一樣的。

·工藝庫有狀態和路徑不同時的功耗描述,即SDPD描述,如下圖所示:

          

我們也可以在EDA工具中使用report_lib  slow  -power 命令列出庫中的功耗資訊: