前言
以往行动上网服务大多属于由行动通讯营运业者主导的单一入口模式,从手机制造业者、平台供应业者、到内容提供业者,形成封闭的供应链。此种单一主导的模式,造成不同业者提供各自的服务内容,手机的硬件、软件规格不一,缺乏开放性与互操作性,因此在手机上难以复制个人计算机的上网经验。
为了迅速打开智能型手机上网服务的市场商机,透过网络效应进一步拉大与其他网络服务业者的差距,Google在2007年推出开放、免授权金的Android软件平台,希望让行动软件平台标准化,并主导成立开放手机联盟(Open Handset Alliance;OHA),鼓励全球主要手机大厂积极展开Android手机的开发,目前台湾业者也纷纷投入Android平台的共同开发。
Android为软件平台标准,需有硬件提供各式运算能力才能形成完整之系统。Android软件平台包含Java应用程序、Application Framework、Libraries、Runtime与Linux OS等层。每一层内含多个独立组件完成不同功能,Android在各组件与层之间订出标准界面。因此 Android系统可以像积木堆栈一般,不同应用产品可以依功能需要加入软件或硬件组件整合成不同产品。
![《图一Android软体平台与手机制造供应链示意图》](/art/2009/03/030000003080/p1.gif)
《图一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 |
平均译码能力 (fps) |
QVGA(320x240) |
12.5 fps |
23.809 fps |
全I型态画面的比特流 |
VGA(640x480) |
1.96 fps |
3.626 fps |
1.904倍 |
1.85倍 |
QVGA(320x240) |
12.6 fps |
18.37 fps |
含P型态画面的比特流 |
VGA(640x480) |
1.886 fps |
3.03 fps |
1.47倍 |
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提供的功能。
![《图七 PAC Duo与Android多媒体框架整合架构示意图》](/art/2009/03/030000003080/p7.gif)
《图七 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电源管理整合架构示意图》](/art/2009/03/030000003080/p8.gif)
《图八 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开发板》](/art/2009/03/030000003080/p9.gif)
《图九 Android执行于ARM Versatile与PACDSP开发板》 |
|
![《图十 于Android中利用PACDSP进行H.264译码》](/art/2009/03/030000003080/p10.gif)
《图十 于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开发板》](/art/2009/03/030000003080/p11.gif)
《图十一 Android执行于PAC Duo FPGA开发板》 |
|
![《图十二 整合MPU动态频率调整与系统Suspend/Resume》](/art/2009/03/030000003080/p12.gif)
《图十二 整合MPU动态频率调整与系统Suspend/Resume》 |
|
结语
整合MPU动态频率调整与系统Suspend/ResumeAndroid为软件平台标准,需有硬件提供各式运算能力才能形成完整之系统,工研院芯片中心开发的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
[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
[4] 张明伟, 曾绍崟, "在双核心平台上以画面为单元的可调式电压频率的H.264解压器", SoC Technology Journal, vol. 8, pp. 13-22, Jun. 2008