摘要
由於SOC (System On Chip)技術的進步,諸 如監控、量測、家電等各種不同的領域都有研發 人員採用 SOC 晶片製成各式各樣的嵌入式系 統。這些嵌入式系統都具有輕薄短小的特點,而 它們的問世所帶來的好處就是讓生活更方便、更 有效率。除了性能的優劣及功能的多寡外,功率 消耗也是設計嵌入式系統時的一個重要考量因 素。目前對嵌入式系統率消耗的研究多是從架構 設計、硬體電路、作業系統等方面著手。我們認 為在設計嵌入式系統時,每一個環節都應該盡力 避免無謂的功率消耗,而在設計過程中,開發應 用程式的階段顯然是較被忽略的一環。所以本論 文討論如何從應用程式的層次改善嵌入式系統 之功率消耗。
關鍵字:嵌入式系統、功率消耗
壹、緒論
為了讓生活更方便、工作更有效率,人們都 希望所用的工具、設備更輕便、功能更多、操控 連絡的範圍更遠。隨著VLSI 技術的進步,SOC 晶片變成可行[3, 4],並以嵌入式系統的形式逐 漸出現在日常生活、通訊、工業、醫療、軍事等 應用上。目前在SOC 嵌入式系統的應用方面,
以8 位元及 32 位元為主,8 位元系統已算是成 熟的設計,而32 位元的系統可說是方興未艾,
已經有許多 32 位元的嵌入式系統作成,例如 PDA、機上盒、大哥大、網路電話等,其它像家 庭娛樂、遠端監控也都陸續有32 位元的嵌入式 系統問世。
SOC 嵌入式系統的設計流程如圖一所示,要 得出好的設計,必需考量很多因素,包括:硬體 的考量(如 SOC 晶片的選擇、系統記憶體的配 置、IP 或介面 IC 的選用)、軟體的考量(如作業 系統的選擇、應用程式應達成的功能) [5]。而這 些考量因素所要求的目標除了使設計的產品具 有合適的性能及功能外,還希望產品的功率消耗
降至合理範圍內[6]。這是因為嵌入式系統所使 用之環境可能沒有方便的交流電源插座,而需要 以電池提供電源。如果系統耗電量過大,頻繁的 電池更換變成擾人的負擔,重要的工作如常因為 電池供電不足而中斷更是掃興。再者,32 位元 嵌入式系統中很重要的一項功能就是無線傳輸 [1],這項功能在整體系統的功率消耗所佔的比 率相當大。所以功率消耗是設計嵌入式系統時的 一個重要考量因素。
圖1:SOC 嵌入式系統的設計流程 貳、目標
目前所看到的研究多是從架構設計、硬體電 路、作業系統等方面對 SOC 的功率消耗進行改 善[7, 8, 9, 10]。其中包括時脈的閘控、Vdd電源 的定時關閉、匯流排的架構設計、記導體的讀寫 策略、及動態的電源管理等。我們認為在設計嵌 入式系統時,每一個環節都應該盡力避免無謂的 功率消耗,而在設計過程中,開發應用程式的階 段顯然是較被忽略的一環。因此我們針對「如何 從應用程式對嵌入式系統進行節能」進行較深入 的研究。
我們針對以 SOC 晶片配合週邊介面的整體 定規格
軟硬體分割
軟體合成 硬體合成
軟硬體共同模擬/驗証 設計完成
作業系統 硬體平台
驅動程式 驅動程式
驅 動 程 式 應用程式 應用程式 應用程式
驅 動 程 式
(a)
作業系統 硬體平台 驅動程式
應用程式 應用程式
驅
(b) 嵌入式系統進行功率消耗的研究,在這樣的嵌入
式系統中,硬體架構及電路已然成形,作業系統 及相關驅動程式亦已決定,圖二(a)之陰影區所示 者即為已定案之部份。我們專門針對圖二(a)中未 加陰影的部份(即應用程式)進行功率消耗的改 進。另外,雖然在實務上常透過系統組態的規劃 使系統的性能及功率消耗達到最佳化,如圖二(b) 粗線所框之區域即為經過組態規劃的結果,但因 為這道步驟和應用程式的寫法無關,所以在這項 研究中也不將系統組態的規劃列入考慮。
圖2:硬體平台、作業系統、驅動程式、及應用 程式
所以,假定系統電路中有 n 個功能方塊,若 將各功能方塊視為不同的電路模組 bi (i=1 to n),且各電路模組的功率消耗為 p(bi),我們的目 標就是透過應用程式將整個嵌入式系統的功率 消耗 Pe降至最低,即
Pe = min ( ) (1)
參、實驗方法及過程 一、軟硬體平台
我們的實驗平台採用市售的SOC 開發系統[1, 2],硬體部份包括 S3C4510 CPU、SDRAM、Flash ROM、擴充記憶體、Ethernet、UART、USB、
CODEC (語音模組)、LCD 模組、CF 卡、及影像 模組,作業系統則是採用 uCLinux。編譯工具以 GNU Tool Chain 為主。另外,還利用電流量測 模組針對SOC 開發系統中不同的功能方塊進行 個別測試。 電流量測模組之等效電阻為 Z,用 來將電流值轉成電壓訊號並以數位電表(DVM) 顯示,所顯示之電壓值 V 和待測模組之消耗電 流I 呈 V = I × Z 的關係,若將硬體平台之電路以 模組的形式表示,而且我們準備量測某個電路的
消耗功率,則待測電路、其它電路模組、電流量 測模組、及顯示用之數位電表間的關係可以用圖 3 表示,其中的 Vdd 及 Gnd 分別表示電源的正 負端。
二、實驗過程
圖 4 為本項研究之應用程式開發流程,
透過 make 檔的協助,編譯程式編譯連結 library 可得出 image 檔,顯然這個流程和典 型的應用程式開發過程一樣。
我們所進行的實驗基本上分成兩個階 段:功率消耗的分析及應用程式最佳化。在 第一階段量測不同的電路模組在待機狀態 和工作狀態下所耗用的功率,同時監讀待測 模組在工作狀態下對其它模組的影響。就第 一階段所得的結果進行分析後,我們就可以 進入第二階段,也就是應用程式的最佳化。
圖3:電流量測模組與實驗平台 Vdd
電流量 測模組
DVM
待
Gnd
電路 模組 跳線
電路 模組 跳線
=
∑
1ton ibi
p( )
make
C/C++ 應
用程式 Library Make 檔
Image
gcc ld
34 圖4:應用程式之開發流程
應用程式最佳化的主要策略包括:(a)耗 電量大的工作優先完成,(b)所有的工作盡量 以較短的時間完成,(c)所有的工作盡量以較 省電的方式完成。
讓耗電量大的工作優先完成的基本原則 就是一旦該工作啟動後,就讓它一氣呵成,
盡量不要打斷它。因為無線傳輸所耗用的功 率在整個系統的功率消耗中佔了相當的比 率,因此這項策略對於無線傳輸而言尤其重 要。
要讓工作儘快完成的方法包括:
(1).
以資料代碼代替資料
例如在無線傳 輸前,資料接收端預建資料檢視表,進行傳輸時所傳送的是資料代碼而非 資料,資料接收端收到資料代碼後再 以資料代碼為索引,到資料檢視表中 取得正確的資料。
(2).
以巨集代替副程式
減少叫用副程式 時在堆疊存放返回位址,及結束副程 式時由堆疊取出返回位址所耗用的時 間。(3).
以較快的指令代替較慢的指令
例如 在數學運算時,乘除指令所耗用的時脈 數遠比加減指令大,所以盡量用加減指 令代替乘除指令。此外,有些乘除的運 算可以直接用移位指令完成,而移位指 令的速度不但比乘除指令快詪多,也比 加減指令還快。(4). 減
少對記憶體的存取
將經常存取的 變數置於暫存器中,而非記憶體中,以 C 語言為例,以下的宣告即可將變數 x 放在暫存器中。reg int x;
當某項工作以較短的時間完成時,事實 上它就是以較省電的方式完成。但我們實現 第三項策略的方法還包括:
(1).
以較省電的路徑完成任務
例如,可以 進行有線傳輸時就以有線傳輸代替無 傳輸。(2).
減少不必要的
LCD顯示
這是因為LCD 電路模組在顯示圖形或字元時所 耗用的功率比不顯示時高。
(3).
以快速演算法代替慢速演算法
若無法 找到同樣精確且速度較快的演算法,只 要不影響系統的運作,則速度較快但精 確度稍差的演算法也是很好的選擇。以上三個讓系統省電的方法都可以經由 應用程式來完成。
圖 5 為本項研究所使用之硬體平台。圖 中 包 括 S3C4510-based 電路板、ICE、及 DVM,應用程式編譯成 IMAGE 後係載入電 路板上的SDRAM 中。
圖5:以應用程式進行功率消耗所用之平台
肆、結果與討論
我 們 針 對 SOC 開 發 系 統 中串 列 介 面 、 CODEC、及 Ethernet 介面、LCD 顯示等功能方 塊分別測試。在不同條件下對各功能方塊所量測 之電流值以mA 為單位分別表示如下。
表一串列介面
等待接收資料 串列介
面
開機後待 機狀態
連續傳
送資料 輪詢模 式
中斷模 式 UART 186 186 186 186
CPU 840 1060 1064 1030 記憶體 91 431 444 426
表二 CODEC 介面 CODEC 介
面
開機後待 機狀態
程式 啟動
開始 錄音
開始 放音 CODEC 模 34 50 51 51
組
CPU 841 1058 1062 1062 記憶體 90 430 428 428
表三 Ethernet介面 Ethernet介面 開機後待
機狀態
接收封 包
傳送封 包 Ethernet模組 673 674 674
CPU 840 1040 1038 記憶體 90 430 429
由表一至表三中,我們可以發現各功能模組 一旦由待機狀態進入工作狀態,功能模組本身、
CPU、記憶體的耗電量幾乎是固定值。
改善方法之一就是使不用的電路回到待機 狀態。以表四的LCD 顯示功能為例,由標示陰 影的欄位可看出,經由程式來強迫LCD 恢復待 機可節省LCD 模組之功率消耗達 1/3。
表四 LCD 顯示 LCD 顯
示 開機後待 機狀態 填滿
字元 填滿 空格
填滿字元數 秒後強迫恢 復待機 LCD 模
組 12 18 17 12 CPU 841 1045 1045 1032 記憶體 90 438 439 442