前言
以往行動上網服務大多屬於由行動通訊營運業者主導的單一入口模式,從手機製造業者、平台供應業者、到內容提供業者,形成封閉的供應鏈。此種單一主導的模式,造成不同業者提供各自的服務內容,手機的硬體、軟體規格不一,缺乏開放性與互通性,因此在手機上難以複製個人電腦的上網經驗。
為了迅速打開智慧型手機上網服務的市場商機,透過網路效應進一步拉大與其他網路服務業者的差距,Google在2007年推出開放、免授權金的Android軟體平台,希望讓行動軟體平台標準化,並主導成立開放手機聯盟(Open Handset Alliance;OHA),鼓勵全球主要手機大廠積極展開Android手機的開發,目前台灣業者也紛紛投入Android平台的共同開發。
Android為軟體平台標準,需有硬體提供各式運算能力才能形成完整之系統。Android軟體平台包含Java應用程式、Application Framework、Libraries、Runtime與Linux OS等層。每一層內含多個獨立元件完成不同功能,Android在各元件與層之間訂出標準界面。因此 Android系統可以像積木堆疊一般,不同應用產品可以依功能需要加入軟體或硬體元件整合成不同產品。
《圖一 Android軟體平台與手機製造供應鏈示意圖》 |
|
圖一為Android軟體平台對手機製造供應鏈之影響分析,以往在智慧型手機軟硬體供應鏈上屬於單純的垂直產業鏈,其產業模式如圖一右側,手機上關鍵軟硬體元件,如作業系統、中介軟體、人機介面的軟體元件、核心SoC與平台設計等關鍵技術,大多掌握在國外供應業者。以HTC的3G手機為例,手機上大部分軟體包含作業系統都是Microsoft所提供,由於Microsoft不公布原始碼,HTC僅能針對有限的軟體部分進行客製化設計;關鍵之SoC則由TI或是QualComm提供晶片,平台所需的驅動程式已由SoC廠商或Microsoft提供,系統廠商不需要作太多開發;系統廠設計挑戰著重在電磁干擾、安規、測試、甚至cost down等,此種商業模式對台灣多數規模無法與大公司競爭之廠商而言,要切入十分困難。
Google提出之Android軟體平台採取開放原始碼,可以讓不同軟體層的廠商清楚地看到與其他層介面,就其專精部分深入開發,其研發成果可以再掛回Android平台作效能展示。對於不同硬體元件或是模組廠商,透過定義清楚的標準介面,可以直接與Android軟體進行開發,再以模組的方式整合在Android系統,創造不同之嵌入式產品。Android的開放性,將使行動裝置軟硬體供應鏈產生進一步的垂直分工,如圖一左側所示,猶如PC產業一般,此種商業模式最適合台灣廠商之規模發展。
工研院晶片中心於去年完成PAC Duo系統晶片設計開發,在開發過程中即使用Android軟體平台進行FPGA平台驗證,並進一步整合PACDSP多媒體功能與系統低功耗設計,已獲得初步成果。本文將介紹PAC Duo之系統架構與設計特點,再描述Android軟體平台與PAC Duo系統晶片的整合技術,並呈現其整合成果與總結。
工研院PAC Duo SoC研究成果
工研院的PAC(Parallel Architecture Core)計畫始於2003年,其目的在開發一個低功耗、高效能的可程式化多媒體應用平台。圖二為PAC技術的發展藍圖。在2007年,晶片中心成功推出PACDSP V3.0並完成商業授權,該架構為一個可同時執行五道指令的超長指令數位訊號處理器核心(5-way VLIW DSP),並以TSMC 0.13μm製程實現。經由與ARM9平台的整合,該系統可以達到H.264解碼VGA 30fps的執行效能。PACDSP V3.3是針對雙核心(Dual PACDSP)系統開發的新版PACDSP,延續原本PACDSP V3.0的指令集,PACDSP V3.3的架構差異主要在於修改系統介面並增加資料傳輸量以因應整體運算能力的提升,包含支援AMBA AXI匯流排架構、更有效率的記憶體存取介面以及提供雙核心的除錯介面。在今年,PACDSP V3.5將更進一步針對Android平台的PID(Personal Information Device)系統增加新的指令,以滿足包含DVB-T以及物件追蹤(object tracking)等應用上的需求。
本節將進一步說明PAC Duo SoC系統架構,並強調針對多媒體運算效能上的特殊設計;由於PAC Duo SoC整合了雙DSP,我們提出一個適用於H.264解碼器之雙核心軟體實現方式;文中並將描述於PAC Duo FPGA開發平台上實際之測試結果。
PAC Duo系統架構大要
圖三為PAC Duo系統晶片的系統架構圖,其處理器核心是由一顆ARM926EJ-S以及兩顆PACDSP所組成,並搭配有AXI、AHB、APB匯流排以及系統上的各種IP。其中ARM926EJ-S用來管理和控制整個系統,PACDSP進行大量的多媒體運算處理。在進行多媒體編解碼的運算過程中,為了達到最佳的運算效率,待處理的資料必須存放在DSP的內部記憶體內,因此需要先從外部記憶體透過DMAC搬進DSP內,資料搬移的效率與編解碼程式的平行化,成為系統運作效能上相當重要的關鍵。
藉由分析多媒體資料的運算特性,PAC Duo系統晶片中設計了一個增強版的DMAC-EMDMAC(Enhanced Multimedia Direct Memory Access Controller)。如圖四所示,EMDMAC支援使用者以二維座標軸來描述欲搬移的資料,並直接將二維座標軸轉換為實際位址。同時,EMDMAC能夠在一次通道設定就搬移多個參考區塊,大幅減少搬移資料時所需設定的通道數。另外,EMDMAC還提供非對齊傳輸(Unaligned Transfer)模式,可有效的利用匯流排頻寬。除此之外,根據使用者輸入的二維資訊,EMDMAC可自行判斷參考區塊是否超出畫面,並自動將超出畫面的部分進行補點動作。從實際H.264解碼運算的效能改善來看,在頻率為24MHz的PAC Duo FPGA平台上測試,使用EMDMAC來搬移資料,與傳統GDMAC(General Direct Memory Access Controller)相較,整體效能平均增加了約60%。
PAC Duo雙核心編解碼技術
PAC Duo系統晶片包含一顆ARM以及兩顆PACDSP,可以同時利用兩顆PACDSP加速進行多媒體運算。因此如何開發雙核心軟體發揮PAC Duo SoC之最大效能,為PAC Duo SoC軟體之最大挑戰。在PAC Duo上設計了以資料切割的雙核心H.264解碼器,可解的位元流規格為Baseline標準,圖五是雙核心解碼示意圖,首先ARM將H.264位元流以畫面為單位進行切割,也就是PACDSP0與PACDSP1分別處理不同的畫面。當所解碼的位元流是全I型態畫面的位元流時,由於在解碼過程當中I型態畫面僅需要利用同一張畫面內的資訊來進行畫面預測,因此兩顆PACDSP的工作幾乎是完全的獨立。
然而典型的H.264位元流為了達到資料壓縮的最佳化,往往都是包含著P型態畫面(解碼時需要參考前面幾張解碼完成的圖),當解碼的位元流包含了P型態畫面時,因為參考圖片可能是由另一顆PACDSP來進行解碼,兩顆PACDSP就需要互相等待,舉例來說PACDSP1在解畫面5時需要參考到畫面4的某一區塊(如圖六所示),則必須確認PACDSP0已經將畫面4中需要被PACDSP1參考的區域解碼完成,反之參考的畫面若是由自己所解碼完成的就不需要進行等待的動作。
表一為針對QVGA以及VGA解析度的位元流所進行的效能測試,測試環境是在頻率為24MHz的PAC Duo FPGA平台上。當解碼的位元流是全I型態畫面的內容下,由於PACDSP0與PACDSP1的任務幾乎完全獨立,因此雙核心解碼能力提升將近1.85倍左右。若位元流是典型含有P型態畫面的內容時,在解碼的過程當中需要參考到前一張畫面的資料以進行畫面預測,因此兩顆PACDSP的工作不再完全獨立而會有互相等待的情形。針對含有P型態畫面的位元流,以VGA(640×480)解析度而言,解碼能力平均可以增加大約1.5倍左右。
單核心與雙核心H.264解碼器效能比較表
Resolution |
Single PACDSP
平均解碼能力 (fps) |
Dual PACDSP
平均解碼能力 (fps) |
Improvement |
全I型態畫面的位元流 |
QVGA(320x240) |
12.5 fps |
23.809 fps |
1.904倍 |
VGA(640x480) |
1.96 fps |
3.626 fps |
1.85倍 |
含P型態畫面的位元流 |
QVGA(320x240) |
12.6 fps |
18.37 fps |
1.47倍 |
VGA(640x480) |
1.886 fps |
3.03 fps |
1.606倍 |
Android軟體平台整合
PAC Duo SoC完整支援Android軟體平台標準,PACDSP、ARM及其他硬體如EMDMA提供Android Linux、Media Framework、Java Runtime…等運算能力形成完整之系統。而PAC Duo系統晶片效能的展現,也必須透過完整的軟體應用才得以展現。針對PAC Duo的技術重心,PACDSP多媒體應用、PAC Duo平台低功耗技術,與Android軟體平台的整合,需要對不同軟體層的架構進行了解並開發。以下分別敘述之。
PAC Duo與Android多媒體框架整合
在Android中負責多媒體處理的部份,是由OHA的成員PacketVideo提供名為OpenCORE的子系統。OpenCORE整合了播放、串流及錄製等功能,讓Android的程式開發者可以藉由這些基礎能力來設計音樂播放、影片觀賞與錄製、視訊通話、多媒體串流等各種應用。目前OpenCORE可支援的多媒體格式有3GPP、MP4等,影像格式有MPEG-4、H.263、AVC,音訊格式有MP3、AAC、AAC+,串流則支援HTTP、RTSP/RTP協定。除了這些既有的格式之外,OpenCORE提供數種相當有彈性的介面,讓第三方業者或其他有興趣的程式開發者可以新增或修改多媒體的編解碼器。在這些編解碼器中,大多都以OpenMAX標準為其介面。OpenMAX是一種跨平台、以C語言寫成,為音訊、影像、圖片的應用提供基本元件的介面標準。OpenMAX標準包含三層介面,分別是Application Layer、Integration Layer、Development Layer,而OpenCORE引入的是屬於Integration Layer的介面。透過PacketVideo提供的adaption node,只要是符合OpenMAX IL介面的編解碼器,皆可相當容易的與OpenCORE整合。
OpenCORE可以粗分成幾個單元,包括:PVPlayer Engine、PVAuthor Engine、PVMF、OSCL。PVMF是PacketVideo Multimedia Framework的縮寫,提供多媒體檔案解析、合成等功能,其中各項元件以node方式組成,編解碼器也包含在此。OSCL是Operating System Compatibility Library的簡稱,負責虛擬化底層不同作業系統的各項基本服務,讓整個OpenCORE能夠獨立於OS之上,又能使用檔案系統操作等OS提供的功能。PVPlayer Engine與PVAuthor Engine分別負責多媒體播放與編輯的介面,讓上層的應用程式可以透過此一Engine來串連PVMF中的node元件。
《圖七 PAC Duo與Android多媒體框架整合架構示意圖》 |
|
由於OpenCORE提供的編解碼器皆屬於純軟體計算,因此在執行運算時會占用MPU相當大的資源,同時全速運轉的MPU也會消耗更多的電力。為了讓MPU能更有效率的執行作業系統,處理使用者及週邊裝置的服務要求,並且延長電池使用的時間,利用PACDSP進行編解碼的處理將是一個既具彈性又能兼顧效能的方案。圖七為PAC Duo與Android多媒體框架的整合架構,透過OpenMAX adaption node,將PACDSP多媒體編解碼器實作OpenMAX IL介面,即可將PACDSP的多媒體加速能力整合至Android系統中。而PACDSP多媒體編解碼器在設計上,更進一步整合PAC Duo系統晶片上所提供的低功耗技術、多媒體加速功能、與雙核心設計,可以依照應用需求提供適切的多媒體處理能力。
PAC Duo與Android電源管理整合
為求PACDSP最有效能量消耗,PAC Duo系統晶片在設計上已經考慮電源管理的需求,提供動態調整電壓頻率DVFS與多元電源領域,因此在系統整合上根據Android軟體平台的電源管理機制,實作PAC Duo相關的硬體控制部份,其整合架構如圖八所示。
《圖八 PAC Duo與Android電源管理整合架構示意圖》 |
|
Android軟體平台在底層使用Linux作業系統,因此在電源管理部份主要使用Linux現有的電源管理架構,主要項目說明如下:。
- ●Power Management API:定義硬體平台電源管理的基本函式,實作PAC Duo電源管理單元的控制方式,提供一致性的電源管理使用介面。
- ●MPU Governors:根據系統設定的電源管理策略、系統狀態、以及MPU運算負載,進行MPU動態頻率調整,並根據Linux核心所設計的電源管理架構進行系統整體電源模式(Power Mode)的管理。
- ●DSP Power Manager:依照多媒體應用的運算量需求,動態調整PACDSP電壓與頻率。整合具有節能感知的多媒體編解碼器,以利用PACDSP多元電源領域設計達到低功耗之要求,並配合Linux系統電源管理架構進行PACDSP電源模式整合。
- ●Device Power Management:針對個別週邊的使用行為、使用狀態、硬體規格特性,進行動態的電源閘、時序閘控制。開發具有電源控制能力的驅動程式,並與系統整體電源模式運作結合。
- ●Linux Power Management:主要為整合Linux Suspend/Resume流程,控制PAC Duo系統進入省電模式。
- ●Android Power Driver:為了進一步節省整體系統的功耗,Android另外增加了Wake Lock機制,採取更積極的電源管理方式,由上層的應用程式透過Acquire Lock要求相關系統資源保持開啟狀態,因此對應於不同的Lock狀態,可以讓不同的硬體進入不同的省電模式。
整合成果
PAC DSP SoC整合Linux作業系統之移植與Android相關軟體模組修改,於PAC Duo FPGA板上可成功執行Android系統,透過Browser上網,並使用PACDSP H.264解碼器播放影片。另外,在軟體實作方面,可以讓Android系統進行動態頻率調整並進入系統省電模式。
在開發過程中,我們先使用ARM的開發平台Versatile,進行Android的移植,並結合PACDSP V3.0晶片開發板,作為整合的驗證平台,圖九為Android Home Application執行於ARM Versatile與PACDSP開發板的畫面;透過PACDSP進行H.264解碼運算,再顯示於Android畫面,如圖十所示,可達VGA realtime效能。透過Ethernet連接網路,此平台亦可執行Android相關應用,如Browser網際網路瀏覽,Google Map檢視地圖,Weather讀取各大城市天氣報告等功能。
《圖九 Android執行於ARM Versatile與PACDSP開發板》 |
|
《圖十 於Android中利用PACDSP進行H.264解碼》 |
|
在PAC Duo FPGA上,除了上述的相關移植整合工作,根據PAC Duo之系統架構再次開發進行測試,同時驗證PAC Duo SoC設計之正確性,成功完成執行Android軟體平台,利用PACDSP於Android系統中播放H.264影片,並透過Ethernet連接網路,執行Android相關應用,圖十一所示即為Android Home Application於PAC Duo FPGA開發板上之執行畫面。更進一步針對PAC Duo SoC之雙DSP核心設計,實作雙核心H.264編解碼技術,藉以提升H.264運算效能。另一方面,根據PAC Duo SoC系統低功耗之設計,完成相關電源模式控制軟體的開發整合,於PAC Duo FPGA開發板上進行初步測試,在整合電源管理呈現上,開發Android之應用程式進行MPU動態頻率調整與系統Suspend/Resume的設定與狀態顯示,如圖十二所示。相關電源管理功能並將於PAC Duo SoC晶片平台上再次進行整合測試。
《圖十一 Android執行於PAC Duo FPGA開發板》 |
|
《圖十二 整合MPU動態頻率調整與系統Suspend/Resume》 |
|
結語
Android為軟體平台標準,需有硬體提供各式運算能力才能形成完整之系統,工研院晶片中心開發的PAC Duo系統晶片,內含ARM926處理器及兩顆自行開發的32位元低功耗多媒體數位信號處理器(PACDSP),比過去的單核心處理器提升了約50%的運算速度,將可支援高效率的影音編解碼標準攝影(H.264 D1的720×480畫素)以及高畫質的影片播放功能(H.264 HD的1280×720畫素)。PAC Duo相容於Android軟體平台,可執行Google Map應用程式,以及網路電視、高畫質媒體播放器等多媒體實際應用,可提供有效的Android晶片系統解決方案。希望透過PAC Duo在Android平台上的應用,能突破台灣廠商過往難以進入智慧型手機嵌入式軟體核心技術與系統晶片關鍵技術的設計瓶頸,強化整體產業競爭力。
目前工研院除規劃將Android系統解決方案的研究成果技轉給台灣IC設計公司、IC設計服務公司與手機系統廠商外,同時也考慮與連網式消費性電子產品廠商策略結盟,希望在新一波手機應用平台大戰中,為台灣廠商開創新契機。
(作者瞿萬邦、蘇文建、陳仕杰均任職於工研院系統晶片科技中心;蘇慶龍任職於雲林科技大學)
<參考文獻:
[1] Google, "What is Android?", http://code.google.com/intl/en/android/what-is-android.html
[2] Tay-Jyi Lin, Chun-Nan Liu, Shau-Yin Tseng, Yuan-Hua Chu, and An-Yeu Wu, "Overview of ITRI PAC project - from VLIW DSP processor to multicore computing platform," in IEEE International Symposium on VLSI Design, Automation and Test (VLSI-DAT 2008), pp. 188-191, Apr. 2008
[3] 劉仲凱, 蘇文建, "應用於多媒體視訊處理之高效能直接記憶體存取控制器設計", SoC Technology Journal, vol. 9, pp. 29-40, Dec. 2008
[4] 張明偉, 曾紹崟, "在雙核心平台上以畫面為單元的可調式電壓頻率的H.264解壓器", SoC Technology Journal, vol. 8, pp. 13-22, Jun. 2008
[5] Shau-Yin Tseng, and Ming-Wei Chang, "DVFS Aware Techniques on Parallel Architecture Core (PAC) Platform," in International Conference on Embedded Software and Systems Symposia (ICESS Symposia 2008), pp.79-84, Jul. 2008
[6] "Android Open Source Project", http://android.git.kernel.org/
[7] PacketVideo Corporation, "OpenCORE brochure", http://www.packetvideo.com/resources/OpenCORE-brochure.pdf
[8] Matthew Locke, "A Linux Power Management Architecture," in CELF Embedded Linux Conference Europe (ELC-E 2007), Nov. 2007
[9] Patrick Brady (Google), "Android Anatomy and Physiology", http://sites.google.com/site/io/anatomy--physiology-of-an-android>