1.1.4 基于ARM的移动电话硬件结构
1.ARM处理器简介
ARM架构是32位元精简指令集中央处理器架构,广泛地使用在许多嵌入式系统设计中。由于节能这一特点,ARM处理器非常适合应用于移动通信领域,符合移动设备低耗电的设计目标。
截至2009年,ARM架构处理器占据了市面上32位嵌入式RISC处理器90%的份额。ARM处理器可以在很多消费类电子产品中看到,从便携式设备(PDA、移动电话、多媒体播放器、掌上型电子游戏和计算机)到电脑外设(硬盘、桌面型路由器),甚至在导弹的弹载计算机等军用设施中都有应用。同时还有一些基于ARM设计的派生产品,例如Marvell的XScale架构和德州仪器的OMAP系列。
2011年,ARM的客户报告了79亿ARM处理器出货量,占有了当年智能手机市场的95%,硬盘驱动器市场的90%,数字电视和机顶盒市场的40%,单片机市场的15%和移动电脑市场的20%。2012年,微软与ARM科技生产了新的Surface平板电脑,同年,AMD宣布将于2014年开始生产基于ARM核心的64位服务器芯片。
现行的(基于ARMv6、7、8架构)ARM处理器分为以下3类别:
·用于应用处理器的Cortex-A系列
·用于实时控制器的Cortex-R系列
·用于高级单片机的Cortex-M系列
ARM处理器支持多核计算,可以有多个核同时执行不同的指令,从而加快系统运行的速度。常见的多核系统有双核Cortex A9、四核Cortex A15等。同时,ARM也支持异构多核,即多个不同的ARM核所构成的多核系统,通常是由Cortex-A7和Cortex-A15构成的面向低功耗、高性能的异构多核系统。最近,TI公司推出了基于双核Cortex-R4的Hercules系列实时处理器。
在任何时刻,CPU只能运行在一种模式,但由于外部事件(中断)或编程方式,能够切换到其他的模式。CPU ARM架构指定了以下的CPU模式:
·用户模式,唯一的非特权模式。
·系统模式,通过非异常的方法进入的特权模式。
·SVC模式,执行SWI指令或处理器复位后进入的模式。
·Abort模式,缓存没有命中时进入的模式。
·未定义模式,执行非法指令时进入的模式。
·干预模式,处理IRQ的模式。
·快速干预模式,处理FRQ(快速IRQ)的模式。
·Hyp模式,Cortex-A15专用的虚拟化模式。
ARM架构包含了以下精简指令集处理器的特性:
·读取/存储架构。
·正交指令集。
·大量的16×32位寄存器阵列。
·固定的32位操作码长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。
·大多均为一个CPU周期运行。
·大部分指令可以条件运行,降低在分支时产生的负重,弥补分支预测器的不足。
·算术指令只会在要求时更改条件码。
·32位筒型位移器可用来运行大部分的算术指令和寻址计算,而不会损失性能。
·强大的索引寻址模式。
·精简但快速的双优先级中断子系统,具有可切换的暂存器组。
ARM处理器支持丰富的指令集,包括传统的ARM指令集、高密度的Thumb/Thumb2指令集、为浮点运算优化的VFP指令集等,部分ARM处理器甚至能直接执行部分Java字节码,这就为以Java作为主要编程语言的Android系统带来了极大的便利。
2.ARM SoC架构及选型
ARM虽然性能强大,但是ARM仅仅是一种处理器核,要组成一个通用处理器,还需要有总线系统、存储系统、I/O系统等部件的配合。为了协调各种部件,ARM公司推出了为ARM处理器定制的、行业标准的AHB和APB总线。常见的基于ARM的SoC包含至少一个ARM内核、一个AHB总线控制器、一个内存控制器、一个闪存控制器、至少一个APB总线控制器和一些外设。ARM SoC的性能取决于ARM核和RAM子系统,ARM SoC的功能取决于外设的种类和数目。
基于Cortex-M系列核的SoC通常主频不超过200MHz,内置Flash与RAM,Flash不超过1MB,RAM不超过256KB,面向传统的单片机市场以及PLC、现场总线等控制类应用。基于Cortex-M系列核的SoC因直接与外部I/O打交道,所以拥有丰富的片内外设,如大量的定时器、丰富的ADC和DAC以及比较器等模拟外设、UART总线和CAN总线等。这类单片机对外部电路依赖小,低功耗,低成本,可以使用复杂的、大型的实时操作系统,能处理复杂的网络协议,目前正在取代传统的8位单片机。Cortex-M家族中的Cortex-M0面向低功耗市场,Cortex-M1面向FPGA嵌入式软核市场,Cortex-M3面向通用控制和通信市场,Cortex-M4有可选的FPU,并能运行在高达200MHz的频率下,面向高性能控制、通信和人机接口市场。
面向高可靠性、高可用性、低延时的关键类应用,ARM公司推出了Cortex-R系列实时控制器。与Cortex-M系列相比,该类产品拥有双机备份的能力,即在一个芯片内实现两个CPU核,双机同时工作,另有一个独立的模块负责监督,在发生故障时屏蔽出错的核,由另一个核继续工作。这种热备份、冗余的结构使得Cortex-R系列的可靠性非常高,又因为Cortex-R系列的总线、RAM控制器和Flash控制器都支持高级的ECC等校验机制,使得SEU在多数情况下不会对系统造成严重的影响。另外,基于Cortex-R系列内核的实时控制器拥有更大的片内Flash和片内RAM以及更高的运行频率,为冗余、安全操作系统和控制程序提供了更好的运行环境,在软件层面上也加强了系统的可靠性。与Cortex-M系列核的微控制器相同的是,Cortex-R核的实时控制器也包含丰富的外设,因为片内外设的可靠性一般来说比片外外设要高,而且很多集成外设也包含一定程度的安全特征。
Cortex-A系列核代表了当今性能最强的ARM处理器,该系列包含Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15等多款处理器核。所有的Cortex-A系列核都是为高性能而设计的,因而都可以用作移动设备或者瘦客户机等高性能设备的处理器核。其中,Cortex-A8是最早发售的型号,被用作通用应用处理器;Cortex-A9、Cortex-A15因良好的多核支持,被用于高性能系统,如手机和ARM服务器。后来的Cortex-A7则是精简版的Cortex-A8,拥有与Cortex-A8相似或略高的性能和更小的硅片面积,同时支持多核,并且耗电更少。Cortex-A5则是ARM公司对ARM9、ARM11产品推出的升级产品,与Cortex-A8、Cortex-A8和Cortex-A9完全应用兼容,是ARM公司的低成本、低功耗产品。所有的Cortex-A系列核均含有MMU等系统管理模块,因此都可以运行Linux等大型操作系统。部分处理器还有可选的NEON单元、Java虚拟机、虚拟化等高级功能,这些功能为ARM作为高性能移动处理器或高能效服务器处理器打下了坚实的基础。通常,Cortex-A系列的处理器都能运行在至少800MHz的频率上,有的甚至能超过2000MHz。
3.ARM指令集
ARM处理器属于精简指令集处理器(RISC),这是ARM与x86处理器最大的不同。实际上,几乎所有的x86兼容处理器以外的处理器都是RISC处理器,只有x86、x86-64等传统的、面向桌面市场的处理器还在使用复杂指令集处理器(CISC)。以常用的Intel桌面处理器为例,传统的CISC处理器指令集支持丰富的操作,指令可以访问内存,提供大量的内存缓存,因此可以在同样的指令周期内执行更多的命令。然而,CISC处理器的结构臃肿,需要很大程度的手工优化和工艺优化来提升运行频率,由于内部逻辑单元和缓存太多,耗电量也远高于RISC处理器。
RISC处理器旨在使用简单的指令集实现与CISC一样的功能。因为指令集的减少,很多操作需分步进行,从而减少了相同周期内执行指令的个数。尽管如此,RISC处理器因为结构简单,可以在设计阶段使用自动化工具进行逻辑综合、布局和布线,从而大幅度降低了设计门槛。又因结构简化,RISC处理器可以在同样的工艺和优化成本上实现更高的运行频率和更低的电能消耗。举例来说,一颗Intel的、基于Ivy Bridge架构的至强处理器(E3-1230v2)拥有4个核,每个核运行频率为3.3GHz,耗电69W。而同一时期的三星公司生产的ARM SoC,Exynos 5420,拥有4个能运行在1.9GHz的核和4个能运行在1.3GHz的核,而耗电不超过3W。虽然指令集效率可能没有基于CISC且拥有SSE/SSE/AVX的至强处理器高,但是每瓦特性能(即能效)远高于后者,因此RISC处理器常用于移动设备、嵌入式设备等对功耗有严格要求的领域。
ARM处理器支持ARM和Thumb指令集。以最新、最简单的Cortex-M0为例,该处理器占用硅片面积小,在90纳米工艺下约0.04平方毫米,功耗低至16微瓦MHz,是理想的8位或16位单片机的替代品。在低功耗的同时,Cortex-M0处理器还集成了丰富的指令,支持ARM v6Thumb指令集,包括Thumb II扩展指令集。该处理器的高性能版本甚至还支持单周期32位乘法。Cortex-M0处理器共支持56条指令,分为本原指令(Intrinsic Instructions)、内存操作指令(Memory Access Instructions)、通用数据处理指令(Generic Data Processing Instructions)、分支和控制指令(Branch and Control Instruments)和其他指令(Miscellaneous Instruments)。
本源指令和其他指令是标准C语言不用的,但是在操作系统或应用程序中可能用到用于控制CPU工作的指令。为了在C语言中使用这些CPU相关的扩展指令,可以使用CMSIS接口或者内嵌汇编代码。以下是Cortex-M0核所支持的本源指令和其他指令。
CPSIE i:使能IRQ
CPSID i:禁止IRQ
ISB:代码缓存同步
DSB:数据缓存同步
MSB:内存同步
NOP:等待一个周期
REV:32位按位反转
REV16:16位按位反转
REVSH:32位低半字反转
SEV:发送中断
WFE:等待事件
WFI:等待中断
MRS:从特殊寄存器移动至通用寄存器
MSR:从通用寄存器移动至特殊寄存器
BKPT:设置断点
SVC:调用SVC例程
内存操作指令用于读、写内存、生成地址和堆栈管理。以下是Cortex-M0支持的内存操作指令。
ADR:生成相对PC的地址
LDM:装载多个寄存器
STM:存储多个寄存器
LDR系列:装载一个寄存器
STR系列:存储一个寄存器
PUSH:入栈
POP:出栈
通用数据处理指令对数据进行算术运算。Cortex-M0支持如下通用数据处理指令。
ASRS:算术右移
LSLS:逻辑左移
LSRS:逻辑右移
ROR:循环右移
ADCS:带进位加法
ADDS:无进位加法
ANDS:逻辑与
BICS:位清除
CMN:负数比较
CMP:比较
EORS:异或
MOVS:复制数据
MULS:乘法
MVNS:取非并移动
ORRS:逻辑或
RSBS:取反相减
SBCS:带进位减法
SUBS:无进位减法
SXTB:设置扩展字节
SXTH:设置扩展双字节
UXTB:取消扩展字节
UXTH:取消扩展双字节
TST:按位与并比较
分支控制指令改变PC中的值,从而实现代码跳转。跳转可以是有条件的,也可以是无条件的。有条件跳转的条件存放于状态寄存器。Cortex-M0支持如下分支控制指令。
B:条件跳转
BL:带返回跳转
BX:交换指令跳转
BLX:带返回的交换指令跳转
4.ARM处理器的外围电路
ARM处理器通常作为SoC的核存在,本节中所采用的ARM处理器都是基于ARM处理器的SoC。近年来常用的ARM核为ARM7、ARM9、ARM11、Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-R4、Cortex-R7、Cortex-A5、Cortex-A6、Cortex-A8、Cortex-A9和Cortex-A15等。由于处理器市场定位、性能区间和设计的相似性,本节将ARM7、Cortex-M0、Cortex-M1、Cortex-M3和Cortex-M4称为微控制器系列,将Cortex-R4和Cortex-R7称为实时处理器系列,将ARM9、ARM11、Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9和Cortex-A15称为应用处理器系列。
通常微控制器系列的ARM处理器不需要外接Flash和RAM,其内部的Flash和RAM存储器能够满足绝大部分应用需求。有些早期的ARM7处理器支持外接SDRAM,如三星公司的S3C44B0,此类处理器定位于高端工控而非微控制器,本书不介绍。一般的微控制器集成度很高,仅需要提供合适的电源即可工作。有的芯片可能还需要输入一个外部复位信号。多数的处理器支持电路编程,即芯片在安装之后通过ISP/ICP接口进行编程。
综上所述,多数微控制器类的ARM处理器的电路设计十分简单,最小系统仅需要电源稳压器、退耦电容以及ISP/ICP相关电路即可。如图1-7所示为一个实际的应用电路——STM32F103T8U6Cortex-M3处理器为例。
图1-7 STM32F103T8U6Cortex-M3处理器应用电路
实时处理器,即Cortex-R4和Cortex-R7等,因为面向高可靠市场,所以一般集成Flash与RAM,用法与微控制器类似。由于对可靠性的要求高,所以配备相应的片外监控芯片与更可靠的电源供应。常见的片外外设有看门狗定时器、电源监控和复位芯片、电平转换与静电防护芯片等。供电方面应该配备多重可并联的冗余供电,以防止因供电问题导致可靠性降低。
应用处理器定位高性能市场,内部集成的Flash和RAM不能满足需求。几乎所有应用处理器都要外加代码存储器和RAM。代码存储器通常由Flash闪存提供,也可以是硬盘等其他存储介质。为了保证高峰值运算能力与低平均功耗,应用处理器一般会采用复杂的电源管理系统,因此外围电路非常复杂,可能需要六层或八层电路板来实现。虽然有些应用处理器通过封装叠加或多芯片封装的方法把Flash和RAM集成到一个封装内,目的在于降低布线的难度,但其外设电路仍然复杂。下面将专门介绍应用处理器在Android智能设备上的硬件架构。
5.基于ARM的Android智能设备硬件架构
常见的Android手机/平板架构,其中包含应用处理器、基带处理器和射频前端、内存、闪存、音频Codec、电源管理、传感器、触摸屏幕等组件。
应用处理器通常是一个ARM处理器或MIPS处理器,负责运行Android程序代码。一般情况下,应用处理器集成了图形处理器、浮点运算协处理器和Java字节码处理器。图形处理器用于通过OpenGL ES接口提供高速的图像渲染、3D场景重构。浮点运算协处理器和Java字节码处理器能在降低CPU负载的情况下完成复杂的运算和Java字节码的执行,实现快速的Java虚拟机。这种组合决定了基于Java的Android几乎可以和基于C++的移动系统一样快。
基带处理器一般是一个高性能的DSP处理器,它负责无线通信的基带算法。所有的基于蜂窝系统的通信均通过基带系统实现。射频前端分为接收和发射两大部分:接收部分包含低噪声放大器、射频混频器、本机振荡器、带通滤波器和模数转换器;发射部分包含数模转换器、本机振荡器、射频混频器和功率放大器。其中模数转换器和数模转换器一般被集成在一个芯片里,叫做模拟前端。模拟前端直接与基带处理器连接,由基带处理器负责通信信号的处理。基带处理器还负责语音的处理,包括消回音算法、信噪比增强和AMR/ADPCM编解码等。通过基带处理器与应用处理器通信,实现了完整的蜂窝系统设备。
内存、闪存是支撑应用处理器和基带处理器的必需部件。内存提供临时、高速的数据缓冲,用以支撑高速的处理器数据请求。一般通过DDR3、LPDDR3或LPDDR2与处理器连接。DDR3的优势是高性能,LPDDR3的优势是低功耗,LPDDR2的优势是在功耗较低的前提下提供快速的突发访问能力。闪存则提供永久的数据保存,用来存储程序和数据。传统上分为NOR Flash和NAND Flash。NOR Flash一般用来存储系统程序,而NAND Flash用来存储用户程序和数据。由于NAND Flash的成本下降、性能提升,现在的手机几乎完全使用NAND Flash。一种新型的基于NAND Flash的eMMC/iNAND正在慢慢占领新的市场,这种新的闪存器件需要更少的I/O资源,拥有不低于传统闪存的性能,从而获得更多的青睐。
音频Codec,全称是音频编解码器,负责采集来自话筒的音频信号以及从耳机接口或扬声器输出的音频信号。由于包含了数模转换和模数转换,所以被称为Codec,即编码器和解码器。
电源管理部分负责电池的充放电、电池电量、寿命监测,并为各种处理器等系统部件提供稳定的电源。手机等移动设备需要高度省电,因此很多电源管理系统都需要配合应用处理器实现各种低功耗功能,比如动态电压频率调节、低功耗模式等。
传感器与触摸屏提供了最直观的输入输出功能。通常智能手机包含加速度传感器、陀螺仪、温度传感器、光线传感器、接近传感器和地磁传感器等多个传感器部件。这些传感器会占用大量的I/O资源。为了节约I/O资源,会用一个单片机将全部的传感器数据汇总,一并发给应用处理器。这个单片机就是Sensor Hub。触摸屏可以分成触摸控制器和液晶显示屏。触摸控制器一般与各种传感器一起连接至Sensor Hub,而液晶显示屏直接连接至应用处理器的LCD接口。