嵌入式系統降低功耗的方法研究
另一種常用的時鐘技術就是可變頻率時鐘。它可根據系統性能要求,配置適當的時鐘頻率以避免不必要的功耗。門控時鐘實際上是可變頻率時鐘的一種極限情況(即只有0和最高頻率兩種值),因此,可變頻率時鐘比門控時鐘技術更加有效,但需要系統內嵌時鐘產生模塊PLL,增加了設計復雜度。圖4為在具有低功耗特性的嵌入式芯片上進行的時鐘系統設計方案。片上時鐘系統通過2個數字鎖相環CPUPLL和SysPLL來穩定16 MHz的輸入時鐘,分別送到不同的倍頻器和分頻器。經CPU-PLL的時鐘信號作為處理器內核時鐘,經SysPLL的時鐘信號作為處理器內核之外的系統時鐘、存儲器時鐘和外設時鐘。
由于處理器芯片(如i.MX1)不支持電壓動態調節,可通過配置片內數字鎖相環實現內核頻率動態調節。根據公式計算出系統頻率:

![]()
其中:fref是系統的低頻時鐘頻率,作為倍頻的參考頻率;MFI是倍頻因子的整數部分;MFN和MFD分別是倍頻因子的分子和分母;PD是預設分頻因子。
2.2 操作系統層
系統級低功耗設計一般是在操作系統層實現。因為操作系統管理系統所有軟硬件資源,并獲取系統的各種狀態信息,控制硬件設備的狀態。因此,在操作系統中實現全局功耗控制是最佳選擇。操作系統層面分成功耗驅動模塊和功耗調度模塊。
2.2.1 功耗驅動模塊
驅動模塊實現相對簡單,主要是對硬件操作。功耗模式轉換和頻率調節都是通過片上時鐘系統控制寄存器進行設置。因此,實質上是對寄存器的設置。從睡眠模式或停止模式進入運行模式相對容易,只需向系統發出中斷信號,喚醒系統進入運行模式。而從運行模式到睡眠模式或停止模式相對復雜,其關鍵代碼如下:



2.2.2 功耗調度模塊
功耗調度模塊實現的關鍵技術在嵌入式Linux操作系統中有具體體現。在Linux操作系統中,任務的調度主要由進程調度(或任務調度)模塊 schedule()完成。schedule()掌握系統內所有進程的運行狀態,并對其執行的優先級進行管理調度。因此,系統級實現功耗控制,需要對嵌入式Linux內核的schedule()模塊全面改寫,將DPM和DVS策略加入其中。設計思路為:由于Linux內核提供的 cpu_usage_stat結構記錄了處理器運行時間的分配情況,可以通過讀取這些參數計算出當前系統的運行比例,即通過cpu_scan函數來實現具體的操作。cpu_scan函數是處理器設備驅動的主要部分,它在固定的時間片內調用,時間片的大小可以根據需要在5~1D0 ms之間選取。該函數通過調用cpu_dvs函數和cpu_dmp函數來評估系統的狀態,這兩個函數分別是可變電壓技術和動態功耗管理的實現。
(1)DPM策略
DPM策略在低功耗嵌入式Linux系統的實現上分為觀測器和控制器兩部分,如圖5所示。我們在實現過程中采用了Timeout算法。該算法實現簡單,預測準確性也較高。統計表明,只要合理地設計Timeout,這種假設的可信度為95%。采用了Timeout算法的cpu_dmp函數在此不再具體解釋。但在動態電源管理實現過程中容易出現一個喚醒信號發送給一個等待隊列中的進程后,該進程不能夠立即被調度執行,從而造成事件丟失的情況。為了避免這種情況的出現,Llow被設置成比Lmax稍小的值。當事件數量到達Llow時,即使事件處理進程被喚醒后不能馬上轉入執行,由于LlowLmax,事件列表還沒有全滿,也不會造成新事件丟失。這樣,既降低了事件丟失的幾率,對系統的影響也降到了最小,因為只有當事件列表快滿時才會調用事件處理進程。









評論