無線與有線系統設計人員都應關心電源效率,只不過箇中原由並不相同。對行動裝置而言,更長的電池壽命以及更長的通話或使用時間顯然都是優勢,但降低電力需求還能讓產品使用較小的電池或不同的電池技術,散熱問題也變得更簡單。
對有線系統來說,設計人員可以縮小電源供應體積、降低散熱要求和減少風扇噪音。另一較少為人提及的優點則是在提高電源效率後,系統就能留下更多空間給其它增強效能的零件,這在設計人員使用多顆處理器時特別有用。
無論已含DSP的嵌入式系統,或想在系統功率預算允許下增加DSP的嵌入式系統,都能利用DSP獨有的技術、相關作業系統與支援軟體節省電力。因為如此,DSP或雙處理器設計可以提供傳統技術無法做到的更強大省電功能。
本文將同時介紹傳統技術和DSP特有的技術,但首先要定義文中用到的名詞和原理。
功耗基本知識
CMOS電路的總功耗等於動態(active)與靜態(static)功耗之和。
邏輯閘切換邏輯狀態就會產生動態功耗,它主要來自開關電流(內部元件充電所需)和穿越電流(P和N通道電晶體同時導通所造成)。動態功耗可估計如下:
另一個關係式則指出,電路穩定操作的最大開關頻率(F)是由電壓(Vcc)決定。這些關係式隱含兩個重要概念:
- (1)動態功耗與開關頻率為線性關係,與供應電壓則為平方關係;
- (2)最大安全開關頻率是由供應電壓決定。
本文為討論方便,將把一對特定的頻率和電壓稱為「設定點」(setpoint)。
降低處理器時脈頻率,它的動態功耗也會等比例減少,但若在不影響效能的情形下降低電壓,則從前述的平方關係可知它會節省更多電力。但對特定作業而言,降低處理器時脈頻率同樣會等比例延長其執行時間,因此設計人員必須謹慎分析,確保它在時脈頻率降低後仍可達到即時要求。
靜態功耗是電晶體漏電造成,而CMOS電路的靜態功耗過去都遠小於動態功耗。嵌入式應用為避免動態功耗,通常會在閒置時關閉處理器時脈,這能大幅減少總功耗。未來的設計則必須更注意靜態功耗,因為新型電晶體雖然效能更強,漏電流卻也會大幅增加。
嵌入式系統通用技術
常見的功耗管理技術分為兩類,一種屬於硬體設計初期所做的選擇,另一種則是系統運行期間執行的技術。
設計初期所做的決定對達成效能和功耗目標當然很重要。下文就是包括硬體選擇、設計方法和架構選項在內的10大重要決定,其中大多數是嵌入式設計的基本知識,其它則比較複雜。雖然這些都是設計初期要做的決定,仍有些內容須在設計過程重新確認。這10項決定包括:
- (1)選擇低耗電零件;
- (2)分割電壓域和時脈域;
- (3)提供電壓與頻率調整功能;
- (4)提供保持電壓(retention voltage)閘控功能;
- (5)利用中斷減少軟體執行輪詢(polling)的次數;
- (6)採用階層式記憶體模型;
- (7)減少輸出負載;
- (8)開機時不要啟動非必要資源的電源;
- (9)將主動鎖相迴路(active PLL)的數目減至最少;
- (10)利用時脈除頻器迅速選擇替代頻率。
系統架構確定後,設計團隊應把注意力轉到系統執行期間環境。雖然這部份只有14個重點,其中多數卻必須在設計過程隨時注意:
- (1)關閉不需要的閘極時脈;
- (2)開機時主動關閉不必要的耗電裝置;
- (3)僅在必要時提供電源給次系統;
- (4)啟動週邊裝置的低耗電模式;
- (5)利用週邊裝置動作偵測器;
- (6)利用自動更新模式(auto-refresh mode);
- (7)測量應用效能,找出最低所需的頻率與電壓;
- (8)根據整體工作情形調整處理器頻率和電壓;
- (9)動態安排處理器頻率和電壓,使其配合工作負載預測;
- (10)將程式碼執行速度最佳化;
- (11)使用耗電較少的程式碼序列(code sequence)和資料型樣(data pattern);
- (12)利用程式碼重疊技巧(code overlays)減少所需的高速記憶體;
- (13)改變電源時進入精簡功能模式;
- (14)降低精確度,以便減少功耗。
這些項目適用於所有的嵌入式系統,包括內建DSP的產品,而且多數有經驗的設計人員至少在觀念上應很熟悉它們。
這些動作與方法看似簡單,實現卻不容易。任何降低設計功耗的做法都可能影響系統效能和穩定性。而使用基本電源管理技術時也可能遇到一些困難。
DSP即時作業系統有那些幫助
多數有經驗的嵌入式設計人員都知道許多技術皆能由作業系統提供,不需他們針對每個新設計重新再做一遍。
即時作業系統(RTOS)甚至可包含一些最有價值和眾所認可的技術,例如讓電路進入閒置狀態(idling)、避免動態功耗、裝置驅動程式通知、記憶體管理以及電壓/頻率調整。然而這些技術的設計目標差異太大,要把它們全部加入即時作業系統並不容易,必須由開發人員做出適當取捨。就應用耗電最佳化而言,主要設計目標應該是效率、彈性以及與作業系統的鬆散結合(loose coupling)。
要瞭解現有即時作業系統的電源管理模組有那些特性、限制和功能,一個好例子就是TI為DSP/BIOS作業系統提供的電源管理程式(Power Manager;PWRM)。雖然以下介紹的設計主要是針對DSP/BIOS,其觀念卻很容易運用到其它作業系統或不含作業系統的應用環境。
電源管理程式要求
設計電源管理程式時,最主要的七個要求為:
- (1)電源管理動作須由應用啟動,而不是由作業系統啟動;
- (2)電源管理動作對多數應用程式碼必須完全透明;
- (3)電源管理程式必須支援電壓與頻率調整,並能利用晶片的閒置與休眠模式;
- (4)應用程式必須協調電源管理事件的處理,發生特定事件時必須通知用戶程式;
- (5)所有的執行緒環境(thread context)以及特定用戶程式的多個實體(instance)都須能使用這些電源管理功能,例如裝置驅動程式的多個實體;
- (6)將電源事件通知用戶程式後,電源管理程式須能容忍對方延遲完成事件處理,並在等待對方傳回完成訊號的同時,繼續通知其它用戶程式;
- (7)電源管理程式須能擴充,並可移植到各種不同功能的平台。
為達到前述的要求,如(圖一)所示把Power Manager當成附屬模組加入DSP/BIOS。
Power Manager位於DSP/BIOS核心之外。它不是作業系統執行的一個工作,而是在應用控制緒(control thread)和裝置驅動程式環境裡執行的一組應用程式界面(API)。
這表示核心不需要任何修改。但是在處理器時脈與作業系統計時器時脈耦合在一起的其它平台上,設計人員就必須為DSP/BIOS時脈模組(CLK)提供輔助常式。這對頻率調整很重要,因為這些常式可將作業系統時脈當成Power Manager的用戶程式進行調整。
Power Manager界面透過特定平台專用的電源調整程式庫(Power Scaling Library)直接控制DSP硬體,並且讀寫時脈閒置組態暫存器(clock idle configuration register),該程式庫可以控制處理器時脈速率和穩壓電路。透過電源調整程式庫,Power Manager和其它應用軟體就不需要知道頻率及電壓控制硬體的實作細節。
Power Manager是由設計工程師靜態配置其組態,並由應用軟體在執行期間動態呼叫。它有幾項功能與應用有關:
將時脈域設為閒置狀態
Power Manager提供界面將特定時脈域設為閒置狀態,以便減少動態功耗。它還提供一套機制,可在作業系統閒置迴圈(idle loop)的適當位置讓DSP內部的處理器和快取記憶體自動進入閒置狀態。
開機省電功能
Power Manager包含一套程式連結機制,讓開發人員指定一個在開機時自動呼叫的省電函式。
電壓與頻率調整
Power Manager提供界面讓應用動態調整DSP核心的操作電壓和頻率,應用軟體可以根據實際處理需求,利用這項功能調整功耗。Power Manager應用程式界面讓應用指定是否同時調整電壓和頻率,以及調降電壓過程中是否繼續執行程式(調整所需時間與負載有關,而且可能很長;若處理器在調降電壓過程中仍很穩定,就可以讓應用繼續執行)。Power Manager還有應用程式界面可以查詢電壓/頻率設定點以及調整所需時間。
休眠模式
Power Manager提供與休眠有關的組態與執行期間界面,開發人員可利用它們啟動客製休眠模式,減少無動作期間(inactivity)的功耗。
電源事件的註冊與通知
為了協調應用執行期間的電壓/頻率調整動作、休眠模式和其它事件,Power Manager提供一套註冊和通知機制,讓應用程式碼、週邊驅動程式、封裝內容(packaged content)以及作業系統時脈模組等軟體元件,把會影響它們的事件向Power Manager註冊,以便在發生這些事件時通知它們。這些電源事件包括:即將調整電壓/頻率設定點、電壓/頻率設定點調整完成、進入休眠模式、離開休眠模式和電源故障。通知程序是Power Manager的一項重要功能。當軟體元件不需要通知時,也可向Power Manager取消註冊。
實際設計
電源效率分析的準備工作至此算大功告成,接著就是擬定一套方法,利用作業系統提供的技術和支援發展省電應用。本文建議的方法共有11個步驟,設計人員只要發現尚未達成功耗目標,或者需要額外的執行期間技術來滿足應用功耗預算,就應該重新執行這些步驟。
- (1)一開始就要考慮電源效率的問題;
- (2)選擇低耗電元件;
- (3)建立功耗模型和估計功耗值,然後進行硬體實驗;
- (4)設計硬體並提供軟體連結點(hooks),以便管理和測量功耗;
- (5)採用高效率的軟體架構;
- (6)為電源管理功能提供易於使用的開關;
- (7)在不啟動電源管理功能的情形下,先讓系統正常運作;
- (8)輪流開啟電源管理功能,並測量其省電效果;
- (9)啟動程式碼產生最佳化,重新安排程式和資料,並調校其中影響最大的部份;
- (10)針對最低頻率和電壓進行校準;
- (11)啟動和使用所有電源管理功能。
在前述11個步驟裡,步驟(1)的意思很清楚,不需再做解釋。步驟(2)和(4)基本上就是利用這套評估模組來完成,它們證明一套廣泛供應的平台確實有其價值。步驟(3)(實驗)是在評估模組上執行,它會測量不同技術的省電能力,例如存取晶片內部和外部電路時的核心與系統功耗、DMA與CPU的傳輸比較、以及讓特定週邊裝置和時脈域進入閒置狀態的省電效果等。
與功耗有關的重要設計決定包括:
- (1)使用作業系統的執行緒(threading)和阻斷(blocking)等程式元素(primitives),讓時脈能夠進入閒置狀態;
- (2)利用DMA執行高效率的背景資料串流。DMA只有在完成整塊資料傳輸時才會中斷處理器作業,而不是序列埠每輸入/輸出一筆樣本資料就中斷一次;
- (3)利用外部共享時脈做為序列埠的主時脈,這樣就不必為了調整DSP內部處理器的頻率而重新設定序列埠;
- (4)註冊一個回呼函式(callback)來連結編碼解碼器裝置驅動程式,讓應用程式進入休眠模式時能關閉編碼解碼器;
- (5)使用校準功能,以便在音訊品質下降前退回前一個頻率(和電壓)設定點;
- (6)使用電源管理程式的時脈適應功能,確保定期執行函式(periodic function)在頻率調整後仍能以規定的速率執行;
- (7)從關閉DSP到重新啟動的這段時間,應使用電源管理程式的深度休眠(deep sleep)界面讓DSP進入深度休眠模式。
結語
要將省電能力強大的技術整合到即時作業系統,最好方法就是讓開發人員選擇最符合應用需求的技術。只要作業系統具備這些省電支援功能,開發人員就能輕鬆、安全和以最小負擔的方式提高應用電源效率。
本文介紹一種適合所有應用的功耗最佳化策略,它會在嵌入式應用的初期發展階段調整設計和減少耗電量。這套方法會視情況反覆執行某些步驟,例如當它發現耗電超出要求或需要增加其它執行期間技術時,就會重新執行最前面的幾項動作。本文以採用這套方法的音訊應用為例,證明只要利用幾種高效益省電技術,即可大幅降低應用的耗電量。
---作者任職於TI德州儀器---