- SoC底層軟件低功耗系統設計與實現
- 李曉杰
- 1426字
- 2024-04-12 18:22:48
1.3 低功耗系統的架構設計
單獨對于一款芯片,無論是哪家廠商,低功耗設計都要分為電路設計和系統軟件設計兩部分。本書不涉及電路級的設計(可單獨參考《低功耗設計詳解》這本書),僅做系統軟件的設計與實現。在系統軟件設計中,如果系統比較復雜,則需要一個低功耗主控核來負責對各個子系統進行低功耗的控制。功耗控制分層結構如圖1-2所示。
如圖1-2所示,自底向上,每個上級系統負責對其子系統進行上下電控制,因為任何一個子系統都沒有辦法自己對自己進行上下電。比如低功耗主控核(通常為LPMCU),負責其控制芯片平臺上的所有其他子系統的上下電控制(比如應用處理器、基帶處理器、HIFI等),而每個二級子系統又負責其自身的三級子系統的上下電控制。
對于每一個子系統,通用的低功耗軟件棧如圖1-3所示(參考Linux軟件棧),低功耗相關框架實現主要集中在操作系統(OS)層。

圖1-2 功耗控制分層結構

圖1-3 通用的低功耗軟件棧
其中各個模塊的功能如下。
? wakeup source:該模塊為系統中其他模塊或應用提供睡眠鎖功能,當允許系統睡眠時,釋放自己持有的睡眠鎖,否則保持持有。
? autosleep:系統進入睡眠的入口,當系統沒有任何組件持有睡眠鎖時,會觸發autosleep的工作隊列進入睡眠流程中。
? PM Core:系統睡眠主流程,負責對低功耗各個組成模塊的調用,并最終使系統進入睡眠狀態,喚醒流程為睡眠流程的逆流程,都在PM Core中實現。
? PM notifier:低功耗模塊基于notifier封裝的通知鏈,用于通知對suspend/resume(睡眠/喚醒)流程敏感的模塊,但模塊需要注冊到PM notifier中才能被通知到。
? DPM:設備電源管理(Device Power Management),即內核提供給各個設備注冊低功耗處理的機制,睡眠和喚醒流程都有4個優先級的回調函數供設備注冊,供PM Core在睡眠和喚醒流程中調用。
? syscore:與DPM不同,syscore工作在鎖中斷的環境中,只提供一個級別的回調函數,且與設備注冊DPM的機制一樣,也需要在該階段做低功耗處理的模塊注冊,供PM Core在睡眠和喚醒流程中調用。
? PSCI:電源狀態協調接口(Power State Coordination Interface),聚焦安全和非安全世界電源管理的交互,它提供處理電源管理請求的一些方法,包括CPU_ON、CPU_OFF等,是Linux內核中一個比較大的特性,在第16章中會做詳細介紹。
? ATF:ARM Trusted Firmware,與PSCI配合使用,支撐安全世界的低功耗操作(此功能僅為ATF功能之一),更多的介紹會在第17章中展開。
? Runtime PM:運行時電源管理。對于某些模塊或者功能,因為其隔離性比較好,比如單獨供電或者單獨供時鐘,我們無須等到系統睡眠時關掉,在系統運行時也可以動態做關閉和打開動作,Runtime PM就為這類模塊提供了一套處理機制。
? CLK:負責對時鐘的管理,支持對特定模塊時鐘的開關操作。
? regulator:負責對供電的管理,支持對特定模塊供電的開關操作。
? thermal:負責對溫度的控制,當對應設備的溫度升高時,做相應的降壓、降頻、開風扇、復位等動作。
? DVFS:動態電壓頻率調整(Dynamic Voltage and Frequency Scaling),動態技術是根據芯片所運行的應用程序對計算能力的不同需要,動態調節芯片的運行頻率和電壓(對于同一枚芯片,運行頻率越高,它需要的電壓越高),從而達到節能的目的。
? AVS:自適應電壓縮放(Adaptive Voltage Scaling),目的是通過調節芯片整體或者部分電源域的電源電壓來降低功耗。AVS可以更精確地在一定范圍內自由調節電壓值。
? Hotplug:支持對CPU的動態插拔,當系統負載比較小時,可以把功耗大的CPU動態拔除來達到節省功耗的目的,當負載超過一定閾值時可以動態地把CPU再加入系統調度中。
? CPUIdle:當系統不滿足睡眠條件,同時又無任務可調度時,系統會進入CPUIdle狀態(通常最終會進入wfi狀態),從而在一定程度上達到節省功耗的目的。
在后文中,我們會分別對涉及模塊的設計與實現進行詳細介紹。