首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Android所用的ARM芯片简史

Android所用的ARM芯片简史

在Android刚出来的时候,HTC G1所用的高通MSM7201芯片,基于ARM11,用的是ARM v6指令集。
后来德州仪器的OMAP 3430第一次将Cortex-A系列的第一个架构Cortex-A8,引入现实世界中。开启了ARM v7a的时代。这个时代的代表机型就是Moto Droid/MileStone,开启了第一批百万级的Android手机。
随后,从NVidia的Tegra 2开始,我们进入了A9和双核的时代。Tegra 3使用Cortex-A15,在32位上达到一个高峰。
同时,以MediaTek为代表的中低端厂商开始将低端的Cortex-A7发挥到极致,MT6577是两个A7,MT6589为4个A7,MT6592是8个A7.
进入64位时代的代表芯片,就是Qualcomm的SnapDragon 810芯片,4个Cortex-A57的发热问题困扰了无数厂商去年整整一年。
MediaTek继续发挥低端的威力,升级成64位的Cortex-A53。MT6735芯片4个A53,MT6753芯片8个A53。幸好最近的Helix X25/20开始用A72+A53了,我们总算是在MTK芯片上见到一次大核的身影。

从芯片的广泛性上考虑,我们这个讲座的目标芯片就放在Cortex-A53上。
Cortex-A57和Cortex-A53芯片对比我们简单列一下A57与A53的对比,大家有个直观印象就好。
Cortex-A53Cortex-A57典型时钟2GHz, 28nm工艺1.5~2.5GHz, 20nm工艺执行顺序顺序乱序、投机问题、超标量核心数1~41~4峰值整数能力2.3MIPS/MHz4.1~4.76MIPS/MHz浮点单元有有半精度有有硬件除法有有融合乘法累加有有流水线8级15级+返回栈条目48通用中断控制外部外部AMBA接口64位 AMBA 4/5128位 AMBA 4/5L1指令缓存8K ~ 64KB48KBL1数据缓存8K ~ 64KB32KBL2缓存可选集成L2缓存128K~2M512K~2M主TLB5121024uTLB1048指令,32数据对我们理解后续知识有影响的主要有两条:一是Cortex-A53不支持乱序执行,这将影响未来的优化策略;另一个是A53的流水线没有A57深,只有8级。
ARM v8a架构简介异常等级ARM v8a引入了异常等级的概念。一共有从EL0到EL3四种异常等级,等级越高,特权越高。我们的应用一般都运行于EL0。操作系统内核运行于EL1,EL2和EL3可以留给安全监控软件和KVM之类的虚拟化软件使用。
AArch64与AArch32ARM芯片曾经指令集比x86容易学的重要原因是历史包袱少,不需要兼容历史上的指令集。现在ARM 64位芯片也不得不做起兼容自己以前的重任。ARM的做法是将运行状态分成AArch64和AArch32两种状态。AArch64就是我们后面重点学习的64位的指令集的运行态,而AArch32是兼容Arm-v7a的状态,所有Arm-v7a以及更早的软件都可以在这个状态上正常运行。
对于我们应用来讲,EL0是没有权限进行AArch64和AArch32状态切换的,所以我们只能一条道走到黑地用一处状态。这也是我们的A64指令无法切换到A32,T16指令的原因。
返回列表