浅谈ARMv7-A协处理器CP15
ARM拥有16个协处理器,常被命名为 CP0—CP15,其中CP0—CP7由厂家定义协处理功能,而CP8—CP15预留给ARM使用:
1.CP15 提供一些系统控制功能,这包括体系结构和特征识别,以及控制、状态信息和配置支持,还提供了性能监视器寄存器。
2.CP14 主要提供 debug 系统的控制、Thumb执行环境、Java字节码执行。
3.CP10、CP11 两个协处理器一起,提供了浮点运算和向量操作,以及高级的 SIMD 指令扩展。
4.协处理器8、9、12和13预留给ARM将来使用。
CP15寄存器特性:
CP15 一共有 16 个寄存器,通常是需要 PL1 特权级才能访问,ARMv7 的 CP15 寄存器都是复合功能寄存器,多种功能对应多个寄存器内存实体,由访问指令的参数来决定访问的是哪种功能对应的内存。
对于 ARMv7 架构而言,A 系列和 R 系列是统一设计的,A 系列带有 MMU 相关的控制,而 R 系列带有 MPU 相关控制,针对不同的功能需要做区分,同时又因为协处理器 CP15 只支持 16 个寄存器,而需要支持的功能较多,所以通过同一寄存器不同功能的方式来满足需求。
在指令的编码中,支持 16 个寄存器只需要使用 4 位,如果需要支持 32 个寄存器,就需要多使用一位寄存器位,要知道,对于指令编码而言,每一位的资源都是非常紧缺的,关于指令编码可以参考 ARM指令集编码。
CP15寄存器的访问:
ARMv7 中对于协处理器的访问,使用 mcr 和 mrc 指令,分别表示将 ARM 核心寄存器中的值的写到 CP15 寄存器中和从 CP15 寄存器中读到 ARM 核心寄存器中,大部分指令都需要在 PL1 以及更高的特权级下才能正常执行,这是因为 CP15 协处理器大多都涉及到系统和内存的设置,user 模式没有操作权限,user 模式仅能访问 CP15 中有限的几个寄存器比如:ISB、DSB、DMB、TPIDRURW、TPIDRURO 寄存器。
下面以mrc和mcr指令为例,进行讲解:
MRC:

作用:将协处理器寄存器的值读取到ARM的寄存器中
实例:mrc p15, 0, r0, c0, c1, 1
将协处理器CP15的寄存器的值读取到ARM的r0寄存器中。
MCR:

作用:将ARM的寄存器的值读取到中协处理器寄存器
实例:mcr p15, 0, r0, c0, c1, 1
将ARM的r0寄存器的值读取到协处理器CP15的寄存器中。
CP15寄存器和操作数总览:
尽管 CP15 的寄存器是 c0—c15,但是根据上文中的介绍,实际上真正的寄存器实体完全不止 16 个,而是通过 “

c0:
c0是标识寄存器,对应的功能列表如下表:

c1:
c1是系统控制寄存器,对应的功能列表如下表:

c2、c3:
c2和c3是内存保护和控制寄存器,对应的功能列表如下表:

在ARM v7-A的大型物理地址扩展或虚拟化扩展的实现中,CP15的c2寄存器包括一些64位的系统控制寄存器。

c4:
c4未使用
c5、c6:
c5和c6是内存系统错误寄存器,对应的功能列表如下表:

c7:
c7包括缓存维护、地址转换,以及其他功能,对应的功能列表如下表:

c8:
c8是TLB维护操作,对应的功能列表如下表:

c9:
c9寄存器预留了缓存、TCM控制和性能监视器,对应的功能列表如下表:

c10:
c10是内存重映射和TLB控制寄存器,对应的功能列表如下表:

c11:
c11保留给TCMDMA寄存器,对应的功能列表如下表:

c12:
c12是安全扩展寄存器,对应的功能列表如下表:

c13:
c13是进程、上下文和线程ID寄存器,对应的功能列表如下表:

c14:
c14,保留给通用计时器扩展,对应的功能列表如下表:
32位的c14寄存器:

64位的c14寄存器:

c15:
ARMv7保留CP15的c15用于实现定义的目的,并且对CP15的c15编码的使用不做任何限制。
从上述的协处理器寄存器列表可以看出,每个寄存器都对应多种功能,通过 mcr 或者 mrc 指令的参数来指定需要操作的具体寄存器,同时,CP15 协处理器的大部分寄存器功能都是和系统的内存相关,比如 MMU、TCM、TLB、DMA、Memory protection 等等。
SkyEye相关仿真介绍
由本公司自主研发的SkyEye全数字实时仿真软件,是基于可视化建模的硬件行为级仿真平台,利用拖拽的方式快速搭建任意的虚拟硬件平台,保证虚拟嵌入式系统的可靠性和实时性,进行嵌入式软件的开发和调试。SkyEye目前支持主流的嵌入式硬件平台,可以运行主流的操作系统,此外还能适配国内自主研发的操作系统天脉。通过利用基于LLVM的动态二进制翻译技术,使虚拟处理器在典型的桌面计算机上运行速度可以达到2000MIPS以上。对标产品为美国风河公司的Simics。

在SkyEye软件里面,关于ARM架构的仿真芯片中,主要设置了CP10、CP11协处理器来进行VFP和SIMD相关指令运行,CP15协处理器来复用协处理器的多功能。
通过仿真的协处理器,可以使得仿真芯片实现协处理器相关指令的操作。