Skip to content

Latest commit

 

History

History
93 lines (63 loc) · 5.65 KB

File metadata and controls

93 lines (63 loc) · 5.65 KB

ARM

基础

出于低功耗、封装限制等原因,以前的一些ARM处理器没有独立的硬件浮点运算单元,需要软件来实现浮点运算。随着技术发展,现在的高端ARM处理器基本都具备了硬件执行浮点操作的能力。

因此新旧两种架构之间的差异就产生了两种不同的嵌入式应用程序二进制接口(EABI)软浮点与矢量浮点(VFP)。其中软浮点(soft float)和硬浮点(hard float)之间有向前兼容却没有向后兼容的能力。

在ARM体系架构内核中,在没有fpu内核的情况下,是不能使用armel和armhf的。在有fpu的情况下,就可以通过gcc的选项 -mfloat-abi 来指定使用哪种,有如下三种值:

  • soft:不用​fpu计算,即使有fpu浮点运算单元也不用。
  • armel:(arm eabi little endian)也即softfp,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
  • armhf:(arm hard float)也即hard,用fpu计算,传参数用fpu中的浮点寄存器传,省去了转换性能最好,但是中断负荷高。
  • arm64:64位的arm默认就是hard float的,因此不需要hf的后缀。

使用softfp模式,会存在不必要的浮点到整数、整数到浮点的转换。而使用hard模式,在每次浮点相关函数调用时,平均能节省20个CPU周期。对ARM这样每个周期都很重要的体系结构来说,这样的提升无疑是巨大的。

在完全不改变源码和配置的情况下,在一些应用程序上,虽然armhf比armel硬件要求高一点,但是armhf能得到20-25%的性能提升。对一些严重依赖于浮点运算的程序,更是可以达到300%的性能提升。

工作模式

Arm处理器有7种基本工作模式:

  • User
    • 非特权模式,大部分任务执行在这种模式
  • FIQ
    • 当一个高优先级(fast)中断产生时将会进入这种模式
  • IRQ
    • 当一个低优先级(normal)中断产生时将会进入这种模式
  • Supervisor
    • 当复位或软中断指令执行时将会进入这种模式
  • Abort
    • 当存取异常时将会进入这种模式
  • Undef
    • 当执行未定义指令时会进入这种模式
  • System
    • 使用和User模式相同寄存器集的特权模式

其中除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。

工作状态

ARM体系的CPU有ARM和THumb两种工作状态,ARM状态执行字对齐的32位ARM指令。THumb执行半字对齐的16位指令。

命名规则

命名格式:ARM {x} {y} {z} {T} {D} {M} {I} {E} {J} {F} {-S 12 个字段

x:处理器系列,是共享相同硬件特性的一组处理器的具体实现,例如ARM7TDMI、ARM740T和ARM720T都属于ARM7系列。

y:存储管理 / 保护单元,取值有:

  • 2:Cache+MMU
  • 3:改良型 MMU
  • 4:Cache+MPU
  • 6:无 Cache、MMU/MPU

内存管理单元(Memory Management Unit, MMU),用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址。ARM的MMU作为一个协处理器存在,编号为15。

内存保护单元(Memory Protection Unit, MPU),MPU中一个域就是一些属性值及其对应的一片内存。这些属性包括起始地址、长度、读写权限以及缓存等。

z:Cache。

  • 0:Cache Size variation 1(高速缓存大小变化 1)
  • 2:Cache Size variation 2 (高速缓存大小变化 2)
  • 6:TCM(紧耦合内存)

紧耦合内存(Tightly Coupled Memory, TCM),在SOC上用专用BUS与CPU连接的Memory。由于是专用BUS,可以高速访问。

TCM是特定的高速空间,可以高速访问。TCM具有物理地址。TCM占用硬件资源比较少。TCM和Cache用途不同,TCM保存常用到的数据,如中断向量表和实时数据,而cache只是为了加快处理器和外设之间的数据处理

在ARM处理器内核中有多个功能模块可供生产厂商选择。这些模块分别用T、D、M、I、E、J、F、S 等来表示,从处理器的内核版本上可以区分出来。

T:Thumb,Thumb16 位译码器,说明该内核可从16位Thumb指令集扩充到32位ARM指令集。

D:Debug,JTAG调试器,说明该内核中内置了用于调试的结构,通常它为一个边界扫描链JTAG,可使CPU进入调试模式,从而方便地进行断点设置、单步调试。

M:Multipler,快速乘法器,内置了硬件乘法器。包括 32位*32位=64位32位*32位+32位=64位 两种。

I:Embedded ICE Logic,嵌入式跟踪宏单元,用于实现断点观测及变量观测的逻辑电路部分,其中的 TAP 控制器可接入到边界扫描链

E:DSP 增强指令

J:Jazelle,Java加速,这项技术允许直接执行Java字节代码,获得比基于软件的Java虚拟机(JVM)高得多的性能,比同等非Java加速核功耗降低80%

F:向量浮点单元VFP。

S:可综合版本。可综合的,意味着处理器内核是以源代码形式提供的。这种源代码形式又可以被编译成一种易于EDA工具使用的形式。

Semihosting

Semihosting技术将应用程序中的IO请求通过一定的通道传送到主机(host),由主机上的资源响应应用程序的IO请求,而不是像在主机上执行本地应用程序一样,由应用程序所在的计算机响应应用程序IO请求,也就是将目标板的输入/输出请求从应用程序代码传递到远程运行调试器的主机的一种机制。