美文网首页
浅谈ARMv7-A协处理器CP15

浅谈ARMv7-A协处理器CP15

作者: 迪捷软件 | 来源:发表于2021-12-21 16:28 被阅读0次

    协处理器,顾名思义就是协助型处理器,主要协助做一些主处理器无法执行或者执行效率不佳的事情,比如浮点、图像、音频处理这一类,随着硬件的发展,大多协处理器的功能都慢慢集成到主处理器中,但是某些特定的工作还是需要协处理器进行辅助。

    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将来使用。

    01.CP15寄存器特性:

    CP15 一共有 16 个寄存器,通常是需要 PL1 特权级才能访问,ARMv7 的 CP15 寄存器都是复合功能寄存器,多种功能对应多个寄存器内存实体,由访问指令的参数来决定访问的是哪种功能对应的内存。

    对于 ARMv7 架构而言,A 系列和 R 系列是统一设计的,A 系列带有 MMU 相关的控制,而 R 系列带有 MPU 相关控制,针对不同的功能需要做区分,同时又因为协处理器 CP15 只支持 16 个寄存器,而需要支持的功能较多,所以通过同一寄存器不同功能的方式来满足需求。

    在指令的编码中,支持 16 个寄存器只需要使用 4 位,如果需要支持 32 个寄存器,就需要多使用一位寄存器位,要知道,对于指令编码而言,每一位的资源都是非常紧缺的,关于指令编码可以参考 ARM指令集编码。

    02.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的寄存器中。

    03.CP15寄存器和操作数总览:

    尽管 CP15 的寄存器是 c0—c15,但是根据上文中的介绍,实际上真正的寄存器实体完全不止 16 个,而是通过 “<opc1>(通常是0),<CRn>,<CRm>{,#<opc2>}” 来确定需要操作的目标寄存器,下表就是整个 c0—c15 寄存器以及功能的总览:

    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协处理器来复用协处理器的多功能。

    通过仿真的协处理器,可以使得仿真芯片实现协处理器相关指令的操作。

    相关文章

      网友评论

          本文标题:浅谈ARMv7-A协处理器CP15

          本文链接:https://www.haomeiwen.com/subject/bontqrtx.html