一、芯片功耗概述
隨著移動設備的興起和芯片工藝的提升,功耗成為近年來芯片設計越來越關注的話題。對功耗關注度的提升大致可以從兩方面進行分析,用戶角度和芯片設計者角度。
從用戶角度來看 :
如今手機、PAD、TWS耳機等便攜式設備在生活中扮演著重要的角色,芯片功耗越大,對于同等的電池容量意味著使用時間越短;如果使用時間過短,對于現代人們的出行、支付、交流等方面帶來不便,會使我們日常生活的安全感降低。芯片功耗越高,手機等便攜式設備消耗的能量越多,進而產生的熱量也會越多。發熱越嚴重,熱噪聲越大,就會影響器件的正常工作,導致手機運行速度變慢等問題,會大大影響用戶。
從芯片設計者來看 :
隨著工藝的進步,芯片內部集成電路的密度越來越高,運行速度越來越快,而片上的連線越來越細,片上的供電網絡必須將電力以更少連線資源送至每個單元,這就要求芯片設計者在設計階段減少功耗的需求。另外如果不注意低功耗設計,還會導致后期成本增加,例如,芯片低功耗設計不好,發熱量就可能增加,在封裝的時候,就需要考慮怎么給芯片進行散熱,從而增加了封裝的散熱成本。成本的增加還會進一步導致芯片的市場競爭力降低,所以對芯片進行低功耗設計是十分必要的。
二、功耗來源
對芯片進行低功耗設計時要首先搞清芯片功耗的來源,這樣才能有針對性的進行控制。從功耗的種類來看,功耗主要來自三個地方,如下圖所示。
1. 開關功耗
在數字CMOS電路中,對負載電容進行充放電時消耗的功耗。比如對于下面的CMOS非門中:當Vin = 0時,上面的PMOS導通,下面的NMOS截止,VDD對負載電容Cload進行充電,充電完成后,Vout的電平為高電平;當Vin = 1時,上面的PMOS截止,下面的NMOS導通,負載電容通過NMOS進行放電,放電完成后,Vout的電平為低電平。這樣一開一閉的變化,電源的充放電,就形成了開關功耗
開關功耗Pswitch的計算公式如下所示,其中VDD為供電電壓,Cload為后級電路等效的電容負載大小,Tr為輸入信號的翻轉率
2. 短路功耗
短路功耗也稱為內部功耗,短路功耗是因為在輸入信號進行翻轉時,信號的翻轉不可能瞬時完成,因此PMOS和NMOS不可能總是一個截止另外一個導通,總有那么一段時間是使PMOS和NMOS同時導通,那么從電源VDD到地VSS之間就有了通路,就形成了短路電流。
短路功耗Pshort的計算公式如下所示,其中Vdd為供電電壓,Tr為翻轉率,Qx為一次翻轉過程中從電源流到地的電荷量。
3. 靜態功耗
在CMOS電路中,靜態功耗主要是漏電流引起的功耗,漏電流有下面幾個部分組成:
- PN結反向電流I1(PN-junctionReverse Current)
- 源極和漏極之間的亞閾值漏電流I2(Sub-threshold Current)
- 柵極漏電流,包括柵極和漏極之間的感應漏電流I3(Gate Induced Drain Leakage)
- 柵極和襯底之間的隧道漏電流I4(Gate Tunneling)
靜態功耗的計算公式如下所示,其中Vdd為供電電壓,Ipeak為所有泄漏電流之和,除了式中列出的影響因素外,溫度對靜態功耗也有顯著影響,一般靜態功耗會隨著溫度的升高呈指數上升。
三、功耗控制方法
從第二節的描述中可以看出芯片的功耗的大小主要與供電電壓、運行頻率和電路負載相關,針對這些影響因素芯片設計者主要采用了如下辦法:
1. clock gating
在芯片中翻轉率最高的路徑就是clock path,clk path上的功耗消耗會占據到整個芯片功耗比例的40%甚至更多。clock經pll 和預分頻器輸出后,后面會驅動成千上萬寄存器,并且為了增加clock的驅動能力,在clock path上會插入許多buffer,而clock 每個cycle翻轉就會帶動整條path上所有cell 翻轉。如果當某一個subsys 或者module 不工作時clock仍在toggle,那么就會產生很大的功耗浪費。如果能夠根據系統或者任務的需要對clock 做動態的關斷就能極大地節省功耗消耗,這種對clock 進行關斷的技術就是clock gating(時鐘門控)。如下圖,clock gating 技術主要就是在原來的clock path上加入enable 信號,使clock 在滿足一定條件后才能往后傳輸。
根據clock gating 所加的層次,大體可以分為三個類型:
- 粗粒度門控:這種clock gating主要由架構師決定,他們根據整個soc 的工作情況來決定在那些pll 或者預分頻器的輸出端添加門控邏輯。
- 中粒度門控:這種clock gating由模塊設計師決定,他們根據模塊的功能決定是否在模塊外部或者模塊內部的子模塊處添加門控邏輯;
- 細粒度門控:這種主要是面向寄存器級別,可以使寄存器idle時將寄存器前端的clock 關掉。這種設計的優勢是即使模塊正在工作,模塊內部某些處于空閑狀態寄存器的clcok 也會被關掉,進一步節省模塊內部的功耗。這種gating對designer 的編碼有一定要求,當designer 按照如下圖所示模式進行硬件編碼時,綜合工具會自動在插入門控邏輯。
Clock gating 方式可以分為auto gating 和force gating,auto gating 為系統正常工作時的方式,門控單元根據自己所負責的cell/module/subsys的工作狀態動態的關斷和打開clock;force gating多用在調試階段或者作為備用方法,強制關掉或打開某個clock觀察其運行情況或者功耗變化。
2. DVFS
DVFS技術即dynamicvoltage dynamic frequency scaling,動態電壓頻率技術,是系統根據負載的變化來動態地調整電壓和頻率的技術。如果一個電路能夠估算出它必須做多少工作才能完成當前的任務,那么理論上講就可以將時鐘頻率調低到剛好能適時完成該任務的水平。時鐘頻率和電壓緊密相關,降低時鐘頻率意味著可以同時降低供電電壓。頻率和電壓同時降低,功耗就大大降低了。
DVFS 一般流程如下:
- 首先計算系統當前的負載,這個負載可以軟件統計得出也可以由硬件計算;
- 根據負載計算當前系統需要的頻率并進行設置;
- 根據頻率選擇相應的電壓進行設置。
DVFS技術可以通過軟件和硬件的方式實現,但電路中必須有電源管理模塊和時鐘管理模塊。真正硬件實現的dvfs 結構比較復雜,包括dvfs trigger 模塊/dvfs map 模塊/votage compare 模塊/arbitration 模塊等。
3. multi voltage
由第二節的描述可知,動態功耗和電壓的平方成正比,靜態功耗和電壓成正比,所以降低電壓對功耗的改善會很明顯。multi-voltage(多電壓域) 設計思想就是讓SOC內的每個模塊/IP根據自己的需要,工作在不同電壓域,這樣可以減少所有模塊共電壓域造成的功耗浪費。
信號在不同電壓域間進行傳輸時,可能會存在驅動不足或者過驅動等問題。例如當一個低電壓域的信號去驅動高電壓域的cell時,欠驅動力的信號不僅增加了輸入端的上升時間和下降時間,增加短路電流的持續時間,還會使時序變差。為了解決這個問題,需要在不同電壓域之間添加level-shifter(電平轉換器),它可以實現將某個電壓域的輸出電平轉換成另一個電壓域可以識別的邏輯電平。
多電壓設計技術可以分為三種方式:
- 各電壓區域有固定的電壓,這種方式不能夠根據自己的負載調節電壓,如圖(a)所示 ;
- 各電壓區域具有固定的多個電壓,可以根據負載調節電壓,但必須由軟件決定選擇哪一個電壓,如圖(b)所示;
- 自適應的方式,各電壓域具有可變的,可以根據負載調節電壓,可以由軟件或者硬件決定選擇哪一個電壓,如圖(c)所示。
4. power gating
當芯片內部的模塊/IP不工作時,即使我們把輸入端的時鐘和數據全部隔離,仍然會有部分漏電存在。工藝提升使芯片內部集成的晶體管數量越來越多,漏電功耗在芯片整體功耗的比重也越來越大,讓設計師不得不關注這部分漏電。power gating(電源門控)技術是指將芯片中某個區域的供電電源關掉,斷電后,芯片進入深度睡眠模式,其漏電功率很小,只剩power switch 的功耗。
實現這種技術需要isolation cell(電源隔離單元) 和retention cell(保持寄存器)的支持。isolation cell主要使模塊的輸入/輸出在電源關掉時信號保持為常數,從而避免信號懸空或者胡亂toggle;retention cell可以在關掉電源時將寄存器的狀態保留下來,為subsys或module 的喚醒保留必要的初始數據。
powergating有兩種方式:auto shutdown 和force shutdown。Auto shutdown 是系統正常工作使用的方式,芯片ALL ON 區域的PMU 單元會監測個subsys內各module的運行情況,當各module 處于idle 狀態時,subsys就可以進入深睡狀態;一旦監測到subsys內module的工作請求,subsys 就會自動退出睡眠狀態。Force shutdown 一般用在調試階段,也作為auto shutdown 模式失效時的備用方法。
5. 多閾值電壓設計
如第4小節所述,工藝的進步雖然使芯片的晶體管(門)數增多、供電電壓變低、尺寸減小,但卻使靜態功耗的比重越來越大。據統計在90nm或以下的工藝,靜態功耗要占整個設計功耗的20%以上,這就需要對功耗作更深層次的優化。工藝庫中存在著不同的cell類型,cell 類型的速度、電壓和漏電可以用下表表示:閾值電壓越高,cell速度越慢,功耗越小;反之閾值電壓越低,cell速度越快,功耗越高。
多閾值電壓設計的策略是:對于性能要求高的模塊,或者頻率比較高的部分,采用閾值電壓比較低的cell,以減少單元門的延遲;對于性能要求較低的模塊,或者頻率較低的部分,多采用閾值電壓比較高的cell,讓功耗更低。通過這種方法,可以實現在同一塊芯片上,根據性能和功耗的不同要求而調整cell的使用,從而避免在不太重要的功能上浪費過多的功耗。
6. 低功耗的布局規劃
這一部分工作中沒有參與過,只簡單介紹一下為了實現低功耗,布局布線的規則:
- 對于設計中翻轉活動很頻繁的節點,采用低電容的金屬層進行布線;
- 使高翻轉率的節點盡可能地短;
- 對于高負載的節點與總線,采用低電容的金屬層;
- 對于特別寬的器件,采用特殊的版圖技術,以得到更小的漏極結電容;
- 在有些布局布線工具中,可以將功耗作為優化目標來生成時鐘。
四、功耗驗證方式
為了驗證功耗的大小,在芯片tapeout之前與tapoout 之后有不同的驗證工具。在tapeout 之前使用工具進行仿真驗證;tapeout之后使用精密電流源精密電流源進行實測分析。
1. 前仿真
一般使用Spypower,如下圖所示。但是spypower里面自帶綜合工具,不需要輸入netlist文件,可以在設計前期應用于功耗分析。
由于spypower是利用自身的綜合引擎進行自綜合,所得功耗數據與PTPX相比,誤差較大,一般是利用spypower看不同版本間相對數據的變化。Spypower雖然在功耗準確度方面較差,但它提供了豐富的功耗優化數據可以用于功耗優化,如下圖所示。Cgr可以用于觀察添加時鐘門控寄存器的比例;cge 可以用觀察時鐘門控的效率;rodf和rode可以用于觀察寄存器輸出端與時鐘輸入端的比值,進一步檢驗插入的clock gate 是否合適。
當然,前仿真還有power artist工具,功能類似,本文暫不展開。
2. 后仿真
后仿真一般使用較多時PTPX,PTPX 是芯片設計公司普遍使用的功耗仿真工具,不僅仿真精度高,而且產生的功耗數據豐富,便于進行功耗分析。使用PTPX 工具不僅可以產生一段波形的平均功耗,還可以產生每一時刻的瞬時功耗;不僅可以產生基于block的功耗,還可以報告出block內部 每一個層次的功耗,甚至是每個cell的功耗;不僅可以產生整體的功耗,還可以按照memory、clock、pad等分類產生功耗。
PTPX工作流程如下圖所示,用戶提供lib、netlist、activity和parasitic文件,然后PTPX工具按照一定的算法對各種數據進行統計和計算,最后產生功耗報告。各種文件的作用如下所述:
- tech library:工藝庫文件,里面包含著各種cell在不同狀態下的功耗信息。
- netlist:門級網表電路,通過綜合得到,里面包含著芯片中使用的cell 類型。
- parasitic:包含設計中連線等寄生參數,比如寄生電容、寄生電阻,這個一般是后端RC寄生參數工具提供。
- switch activity:包含設計中每個節點的開關行為情況,比如說節點的翻轉率或者可以計算出節點翻轉率的文件,可以為saif、vcd和fadb文件。
雖然不同的功耗類型,PTPX的計算公式不同,但都是通過從netlist文件中確定使用的cell 類型,從activity 文件中確定cell的狀態,從parasitic文件中確定對應狀態的負載大小,然后再去lib 文件中查找cell在當前狀態下的功耗,最后將所有cell的功耗相加。
拿leakage的計算舉例說明,cell的leakage 在工藝庫中描述如下,其中Leakage_power_unit標示leakage power的單位;cell_leakage_power標示固定的leakage power值,如果library里沒有該變量的定義,或者該變量是個負值,工具會用default_cell_leakage_power的值,如果default_cell_leakage_power也沒有指定,則用default_leakage_power_density的值乘以該cell的面積來計算得出一個leakage值,如果這三個變量都沒有定義,則leakage的值為0;
leakage_power()這一部分就是用來定義跟輸入狀態相關的leakage power,其中"when"用于定義輸入的狀態,如果某種狀態沒有定義,則用cell_leakage_power定義的值來計算leakage;power_level用于多電壓cell中指定是跟哪個電壓相關的leakage power。
單個cell leakage power計算公式如下,其中K表示cell 包含的state數量;Pstate_leakage表示cell在當前state的功耗大小;probability表示每種狀態的占比。PTPX工具就是按照如下公式逐個統計cell的功耗,最后相加。
3. 精密電流源
芯片tapout之后,功耗測試主要依靠精密電流源進行,將精密電流的輸出端連接芯片的供電端,就可以得到芯片工作時的電流。精密電流源具有如下特點:
4. 其他IC設計相關工具和方法
UTF(Unified Power Format),其作用是把功耗設計意圖(powerintent)傳遞給EDA工具,從而幫助實現物理設計。這就類似于綜合時的約束,是把跟時序相關的設計意圖傳達給EDA。說簡單一些,UPF就是一些tcl命令,系統架構師通過這些命令的組合,把真實的低功耗設計意圖傳遞給工具。
CLP(Conformal Low Power),低功耗檢查是低功耗設計必不可少的一個環節,此處所謂的低功耗設計指:多電壓域設計,實現過程中在原有功能邏輯基礎上插入低功耗單元,如:isolation cell, level shifter cell, retention register, power switch等。
此外,還有RTL級功耗優化平臺PowerPro。
五、功耗評估內容
利用上節所述的功耗驗證工具,一般會進行如下功耗評估:
1. 場景功耗分析
場景功耗分析一般是為大系統軟件服務,為大系統軟件提供場景的功耗target和golden 配置。場景功耗分析之前首先要定義功耗需求,進行競品分析,確定功耗目標,分解功耗場景,然后才利用工具進行場景功耗分析。
場景功耗分析的流程一般為:
- 定義場景,包括場景數據流、場景代碼流、場景各power domain狀態等;
- 根據場景定義進行coding;
- 將編好的代碼在仿真器上運行,并抓取activity文件;
- 利用PTPX工具對activity文件進行功耗分析;
- 確定功耗達標后,導出寄存器信息。
2. leakage分析
leakage 分析可以為產線提供交付標準,也可以優化deep sleep 場景功耗。
Leakage 分析使用ptpx 工具完成,網表ready 之后就可以進行,無需波形。
Leakage 分析時不僅會分析power on 時的leakage,也會分析shutdown 時的leakage;分析多個corner leakage,如tt、ffg等;分析多個lib 下的功耗,不僅包括電壓的變化還有溫度的變化。
3. cgr/cge分析
cgr/cge分析主要針對designer的clock gating內容,用于指導RTL designer 優化設計,改善clock gating 效率。
Cgr/cge分析主要使用spypower 工具完成,分析cgr時只需要rtl code即可;分析cge時需要activity 文件。利用spypower工具,可以列出register name、driving clock name、signal width、clock gating type等信息,這些信息可以使designer方便定位問題,快速解決。
4. maxpower 和IR-drop
Maxpower和IR-drop都為pmic 設計人員服務,maxpower 分析使pmic 輸出電壓能夠滿足最大功耗的要求并留出足夠的margin;IR-drop 分析使pmic 能夠應對電源噪聲問題,確保系統可以穩定工作。
Maxpower由ptpx完成,maxpower pattern 要使系統clock 和負載最大,測量極端情況的功耗;IR-drop 分析涉及多個部門,多種工具,引入IR-drop分析可以盡早發現功耗策略中的不足,提前想法解決。
評論