隨著集成電路技術(shù)的飛速發(fā)展和對(duì)消費(fèi)類電子產(chǎn)品——特別是便攜式(移動(dòng))面向客戶的電子產(chǎn)品的需求,推動(dòng)了SoC(System on Chip)的飛速發(fā)展,也給人們提出了許多新的課題[1]。對(duì)于電池驅(qū)動(dòng)的SoC芯片,已不能再只考慮它優(yōu)化空間的兩個(gè)方面——速度(performance)和面積(cost),而必須要注意它已經(jīng)表現(xiàn)出來(lái)的且變得越來(lái)越重要的第三個(gè)方面——功耗,這樣才能延長(zhǎng)電池的壽命和電子產(chǎn)品的運(yùn)行時(shí)間。
SoC中CMOS電路功耗有:一是靜態(tài)功耗,主要是由靜電流、漏電流等因素造成的;二是動(dòng)態(tài)功耗,主要是由電路中信號(hào)變換時(shí)造成的瞬態(tài)開(kāi)路電流(crowbar current)和負(fù)載電流(load current)等因素造成的[2],它是SoC芯片中功耗的主要來(lái)源[3]。因此,解決好SoC中的動(dòng)態(tài)功耗是降低整個(gè)SoC芯片功耗的關(guān)鍵。本文后面所提到的功耗就是指SoC芯片中的動(dòng)態(tài)功耗。
如何降低SoC中的功耗,從不同的層面分析會(huì)得出不同的解決方案。從芯片的系統(tǒng)級(jí)(architecture)角度考慮,有低功耗總線設(shè)計(jì)、低功耗存儲(chǔ)系統(tǒng)設(shè)計(jì)、低功耗時(shí)鐘網(wǎng)絡(luò)設(shè)計(jì)、開(kāi)發(fā)系統(tǒng)的休息模式、時(shí)鐘門(mén)控等技術(shù);從芯片的行為級(jí)(RTL)角度考慮,有信號(hào)門(mén)控、預(yù)前計(jì)算、操作數(shù)分離、狀態(tài)機(jī)優(yōu)化、并行和流水結(jié)構(gòu)等技術(shù);從芯片的門(mén)級(jí)(gate)角度考慮,有緩沖插入、提取因子、單元縮放、管腳交換、相位配置等技術(shù)[4]。從越高的抽象層次去考慮功耗問(wèn)題,芯片功耗優(yōu)化的幅度就越顯著。
本文所提出的基于動(dòng)態(tài)配置時(shí)鐘的SoC低功耗管理是從芯片的系統(tǒng)級(jí)角度考慮的。在最后的實(shí)驗(yàn)中,它非常明顯地降低了整個(gè)芯片的功耗。
1 動(dòng)態(tài)配置時(shí)鐘的SoC低功耗管理原理
基于微處理器應(yīng)用的SoC設(shè)計(jì),其復(fù)雜程度變化很大:在一些應(yīng)用中可能需要用到所有的硬件資源,但是在其它的一些應(yīng)用中可能只需要用到其中一部分硬件資源;在一些應(yīng)用中可能需要很高的工作頻率,而在其它的一些應(yīng)用中卻可以大大降低工作頻率。動(dòng)態(tài)管理SoC系統(tǒng)時(shí)鐘的思想就是:不僅動(dòng)態(tài)地管理SoC內(nèi)部模塊的時(shí)鐘源供給,還可以動(dòng)態(tài)地配置SoC系統(tǒng)的時(shí)鐘頻率。
動(dòng)態(tài)地管理SoC內(nèi)部模塊的時(shí)鐘源供給就是,根據(jù)不同的應(yīng)用,管理SoC內(nèi)部的硬件資源。簡(jiǎn)而言之,就是進(jìn)行內(nèi)部模塊的開(kāi)和關(guān)的操作。關(guān)閉單個(gè)模塊,可以通過(guò)對(duì)每個(gè)模塊設(shè)置一個(gè)使能位,然后對(duì)這個(gè)使能位編程做到關(guān)閉或打開(kāi)那個(gè)模塊。但這樣做不是最佳的,原因有二:其一,每個(gè)模塊的接口部分必須是始終打開(kāi)的,否則,CPU核無(wú)法隨時(shí)對(duì)它的內(nèi)部寄存器進(jìn)行編程;其二,通過(guò)模塊使能位只是關(guān)閉了它的功能操作,而并沒(méi)有把它模塊內(nèi)的時(shí)鐘樹(shù)關(guān)閉掉,也就是說(shuō)它里面的時(shí)鐘樹(shù)依然處于激活狀態(tài),而時(shí)鐘樹(shù)所造成的功耗占單個(gè)模塊功耗的很大一部分。其實(shí)大多數(shù)模塊都是同步系統(tǒng),系統(tǒng)的所有操作都是在時(shí)鐘信號(hào)的節(jié)拍下進(jìn)行的[5],關(guān)閉時(shí)鐘源能同時(shí)達(dá)到關(guān)閉模塊和降低功耗的目的。
動(dòng)態(tài)地配置SoC系統(tǒng)的時(shí)鐘頻率則是以不犧牲系統(tǒng)的性能為前提,動(dòng)態(tài)地管理系統(tǒng)的工作頻率來(lái)降低SoC的功耗。時(shí)鐘頻率是影響動(dòng)態(tài)功耗的重要因素:[3]。它的工作頻率越高,功耗也就越大。但在很多時(shí)候,所有的模塊并不是工作在同一時(shí)鐘頻率,或者同一個(gè)模塊在不同的時(shí)段可以工作在不同的時(shí)鐘頻率。這些就是動(dòng)態(tài)地配置SoC系統(tǒng)的時(shí)鐘頻率的前提。
圖1是整個(gè)SoC中的時(shí)鐘網(wǎng)絡(luò)(時(shí)鐘樹(shù))。圖中的功耗管理模塊(power management module)完成這種功能。
圖1 SoC時(shí)鐘網(wǎng)絡(luò)
2 芯片的低功耗工作管理模式
為了更好地實(shí)現(xiàn)動(dòng)態(tài)配置時(shí)鐘的SoC低功耗管理策略,芯片在其工作中開(kāi)發(fā)出了其低功耗管理機(jī)制中的四種工作模式:Slow、Normal、Idle和Sleep。下面結(jié)合圖2所示的工作模式流程圖來(lái)說(shuō)明它的工作機(jī)制。
圖2 工作模式流程
表1為四種工作模式的狀態(tài)。
表1
(1) Slow模式
當(dāng)系統(tǒng)復(fù)位以后或當(dāng)系統(tǒng)關(guān)掉PLL不需要高速時(shí)鐘運(yùn)行時(shí),系統(tǒng)進(jìn)入到Slow模式。在Slow模式下,系統(tǒng)中的CPU核和所有模塊的時(shí)鐘源都來(lái)自晶振。如果這時(shí)系統(tǒng)認(rèn)為有必要關(guān)掉某些模塊,那么,就可以通過(guò)配置功耗管理模塊內(nèi)部的寄存器,把相應(yīng)模塊的時(shí)鐘源使能位關(guān)掉。
(2) Normal模式
如果在某些應(yīng)用中需要高速時(shí)鐘,那么就應(yīng)該切換到Normal模式。在Normal模式下,系統(tǒng)中的CPU核和所有模塊的時(shí)鐘源都來(lái)自PLL。當(dāng)然,在這種模式下也可以根據(jù)系統(tǒng)的應(yīng)用關(guān)掉某些模塊。如果系統(tǒng)需要調(diào)整時(shí)鐘的頻率,可以通過(guò)動(dòng)態(tài)配置PLL來(lái)實(shí)現(xiàn)。但是在動(dòng)態(tài)配置PLL過(guò)程中,要注意這樣一個(gè)問(wèn)題:因?yàn)镻LL有一個(gè)時(shí)鐘鎖定的時(shí)間,在這段時(shí)間內(nèi),它輸出的時(shí)鐘波形是不規(guī)則的,此時(shí)不能使用它作為芯片的時(shí)鐘源。為了保證系統(tǒng)的正常運(yùn)行,可以暫時(shí)把系統(tǒng)的時(shí)鐘源切換到晶振狀態(tài),待PLL的時(shí)鐘輸出穩(wěn)定以后再把系統(tǒng)的時(shí)鐘源切換到PLL狀態(tài)。
(3) Idle模式
如果CPU核在當(dāng)前狀態(tài)下已經(jīng)處理完所有任務(wù),在很長(zhǎng)一段時(shí)間內(nèi)都將處于空閑狀態(tài),那么系統(tǒng)應(yīng)該進(jìn)入到Idle模式。在Idle模式下,只會(huì)關(guān)閉CPU核的時(shí)鐘源,而所有的模塊都保持原狀。但在這種模式下,不可動(dòng)態(tài)配置PLL,以得到不同的時(shí)鐘頻率;也不可以動(dòng)態(tài)地管理各模塊的時(shí)鐘源,因?yàn)檫@個(gè)時(shí)鐘Core已經(jīng)休眠了,它沒(méi)辦法對(duì)功耗管理模塊內(nèi)部的寄存器進(jìn)行配置。無(wú)論前一個(gè)狀態(tài)是Slow模式還是Normal模式,系統(tǒng)都可以進(jìn)入到Idle模式下;而當(dāng)系統(tǒng)退出Idle模式時(shí),它應(yīng)該退回到前一個(gè)工作模式。當(dāng)系統(tǒng)重新需要CPU核進(jìn)行事務(wù)處理時(shí),可以通過(guò)一個(gè)喚醒信號(hào)讓系統(tǒng)退回到Slow模式或Normal模式。
(4) Sleep模式
如果整個(gè)系統(tǒng)都已經(jīng)處理完所有的事務(wù),并且在很長(zhǎng)的一段時(shí)間內(nèi)都將處于空閑狀態(tài),那么系統(tǒng)應(yīng)該進(jìn)入到Sleep模式。在Sleep模式下,關(guān)閉CPU核和所有模塊的時(shí)鐘源。雖然可以從Slow模式或Normal模式切換到Sleep模式,但是當(dāng)它退出Sleep模式時(shí),系統(tǒng)只能回到Slow模式。因?yàn)闉榱诉M(jìn)一步降低整個(gè)芯片的功耗,在Sleep模式時(shí)會(huì)同時(shí)關(guān)閉PLL,所以在它退出時(shí)只能回到Slow模式,然后根據(jù)當(dāng)前的應(yīng)用決定有沒(méi)有再切換到Normal模式的必要。當(dāng)系統(tǒng)需要再次進(jìn)行事務(wù)處理時(shí),可以通過(guò)一個(gè)喚醒信號(hào)喚醒整個(gè)SoC芯片系統(tǒng)。
3 功耗管理模塊的實(shí)現(xiàn)
功耗管理模塊主要由一個(gè)狀態(tài)機(jī)、一些多路選擇器和一些門(mén)控時(shí)鐘電路組成。狀態(tài)機(jī)的責(zé)職就是完成各種模式之間的切換和送出PLL的控制信號(hào)。多路選擇器主要完成各種時(shí)鐘源之間的選擇,而門(mén)控時(shí)鐘電路則完成CPU核和各模塊時(shí)鐘源的打開(kāi)和關(guān)閉功能。圖3是功耗管理模塊中時(shí)鐘源路線。
從圖3中可以清楚地看出,在功耗管理模塊中例示了兩個(gè)PLL:一個(gè)是主PLL(MPLL),它提供整個(gè)SoC中除USB模塊以外的所有模塊的時(shí)鐘源;另一個(gè)是次PLL(UPLL),它只對(duì)USB提供時(shí)鐘源。MUX完成晶振時(shí)鐘和PLL時(shí)鐘的選擇,被選中的時(shí)鐘(FCLK)同時(shí)送到CPU核、HCLK和PCLK,然后根據(jù)各個(gè)模塊的需要門(mén)控地送出時(shí)鐘源。這是基于AMBA總線結(jié)構(gòu)的SoC。根據(jù)AMBA總線的協(xié)議,CPU核、AHB上的模塊和APB上的模塊的時(shí)鐘頻率可以配置成倍比關(guān)系[6]。經(jīng)過(guò)HCLK分頻的時(shí)鐘源只提供給AHB上的模塊,而經(jīng)過(guò)PCLK分頻的時(shí)鐘源只提供給APB上的模塊。AHB_con 、APB_con、Core_con和USB_con一起管理SoC內(nèi)部模塊的時(shí)鐘源供給。
圖3 時(shí)鐘源路線
4 動(dòng)態(tài)時(shí)鐘管理中的問(wèn)題及消除方法
動(dòng)態(tài)地配置整個(gè)系統(tǒng)的時(shí)鐘頻率,雖然可以很方便地控制好整個(gè)SoC芯片的功耗,但同時(shí)也帶來(lái)了一些負(fù)面影響。功耗管理單元中的多路選擇器和門(mén)控時(shí)鐘電路是最有可能產(chǎn)生毛刺的,而毛刺對(duì)同步數(shù)字系統(tǒng)是致命的。它會(huì)導(dǎo)致同步的失敗、數(shù)據(jù)的丟失、寄存器進(jìn)入亞穩(wěn)態(tài),更為嚴(yán)重的是,使整個(gè)同步系統(tǒng)的功能失敗。毛刺的產(chǎn)生是因?yàn)槟切┹斎胄盘?hào)的時(shí)序匹配出現(xiàn)了問(wèn)題,沒(méi)有按照既定的順序出現(xiàn),或者說(shuō)那些信號(hào)裝轉(zhuǎn)換的時(shí)機(jī)不合適。因此在RTL設(shè)計(jì)時(shí)要保證做到時(shí)序的匹配,以降低毛刺產(chǎn)生的可能性。
在功耗管理模塊中有三種情況需要用到多路選擇器:
a. 由Slow模式切換到Normal模式;
b. 在Normal模式下重新配置PLL;
c. 由Normal模式切換到Slow模式。
圖4是功耗管理模塊中的一個(gè)二選一MUX。它的控制信號(hào)是OscillatorOrMPLL,兩個(gè)選擇源是clk_MPLL和clk_Osci,輸出是out_ClockSource。當(dāng)OscillatorOrMPLL為“1”時(shí),MUX選中clk_Osci;當(dāng)OscillatorOrMPLL為“0”時(shí),MUX選中clk_MPLL。在MUX選擇其中任何一個(gè)時(shí)鐘信號(hào)之前,clk_MPLL或clk_Osci必須已經(jīng)穩(wěn)定下來(lái)了。強(qiáng)調(diào)一下,這里的穩(wěn)定不是指已經(jīng)輸送出完整的時(shí)鐘信號(hào),而是輸送出高電平或低電平。這樣當(dāng)選擇開(kāi)關(guān)達(dá)到它們那一方時(shí),接受到的是沒(méi)有毛刺的且對(duì)整個(gè)SoC不會(huì)產(chǎn)生操作的時(shí)鐘信號(hào)。雖然在這時(shí)因?yàn)檫@種操作把SoC的頻率降了下來(lái),但這是暫時(shí)的(大約2~3個(gè)晶振時(shí)鐘周期),因此對(duì)整個(gè)SoC性能的影響是微乎其微的。接下來(lái)被選中的信號(hào)(clk_MPLL或clk_Osci)才開(kāi)始輸送出沒(méi)有毛刺的時(shí)鐘信號(hào),從而最終送出的時(shí)鐘信號(hào)是去除了毛刺的。
圖4 MUX結(jié)構(gòu)
圖5是系統(tǒng)從Slow模式切換到Normal模式時(shí)的時(shí)序圖。通過(guò)配置功耗管理模塊的內(nèi)部寄存器打開(kāi)PLL,即in_PLLStartOrStop信號(hào),由它觸發(fā)Slow2Normal_r信號(hào),表明當(dāng)前將要從Slow模式過(guò)渡到Normal模式。然后,由這個(gè)信號(hào)觸發(fā)Lock Time 計(jì)數(shù)器開(kāi)始計(jì)數(shù)(計(jì)數(shù)值由PLL的IP提供商所給的公式中確定),接著先把晶振時(shí)鐘的使能信號(hào)關(guān)掉,再把多路選擇器打到MPLL那一方。最后,把PLL時(shí)鐘的使能信號(hào)打開(kāi),這時(shí)得到的就是經(jīng)過(guò)倍頻的PLL時(shí)鐘。
圖5 Slow到Normal的切換時(shí)序
從時(shí)序圖可以清晰看出,在時(shí)鐘源切換的過(guò)程中,最終送出的時(shí)鐘(out_ClockSource)頻率會(huì)很明顯地降低下來(lái)(大約是晶振時(shí)鐘頻率的1/3或1/2);但是如果選擇的晶振時(shí)鐘頻率在10MHz以上,則不會(huì)對(duì)整個(gè)SoC芯片的性能產(chǎn)生影響。
至于門(mén)控時(shí)鐘電路,已經(jīng)有許多人在這方面作了很廣泛的研究,本文不再對(duì)此作過(guò)多的解釋[7]。
5 結(jié)論
本文提出了一種SoC芯片的低功耗管理策略。其基本思想是,首先從全局考慮,在滿足性能的前提下,根據(jù)各種應(yīng)用環(huán)境動(dòng)態(tài)地配置SoC芯片的時(shí)鐘頻率。然后,從局部單獨(dú)考慮單個(gè)模塊,通過(guò)判斷它當(dāng)前的工作狀態(tài)決定是否打開(kāi)其時(shí)鐘源。
該低功耗管理方案已經(jīng)應(yīng)用于我們?cè)O(shè)計(jì)的一款SoC芯片——Garfield。經(jīng)過(guò)表2所列Power Compiler的功耗分析,可以清晰地看出:在Slow模式下的功耗僅為Normal模式下功耗的17%左右,而在Sleep模式下的功耗更低。
表2 功耗分析結(jié)果
評(píng)論
查看更多