一、定义

ARM协处理器是辅助主CPU处理特定任务的专用硬件,通过扩展指令集和硬件加速,提升ARM架构在特定场景的性能与效率,主CPU可通过协处理器指令(如CP15、CP10等)调度其工作。

 

1. 核心功能与分类

- 系统控制类(如CP15):负责内存管理(MMU)、缓存控制、异常处理配置,是ARM内核的核心辅助单元,贯穿从ARMv4到ARMv8的架构演进。

- 浮点运算类(如VFP、NEON):VFP专注浮点计算(替代早期软件模拟),NEON(高级SIMD)支持多媒体、信号处理等并行计算,广泛用于手机、嵌入式设备。

- 专用功能类:包括加密协处理器(加速AES、SHA)、图形协处理器(早期GPU雏形)、传感器协处理器(处理传感器数据,降低主CPU功耗)。

 

二、关键特性

- 与主CPU共享系统总线,指令通过ARM指令集的协处理器操作码(如MCR、MRC)交互,延迟低。

- 采用“按需激活”设计,仅处理主CPU不擅长的任务(如复杂浮点运算、加密解密),降低整体功耗。

- 现代ARM架构(如ARMv8-A)中,部分协处理器功能已集成进主CPU核心(如NEON内置),但专用协处理器(如加密模块)仍独立存在。

 

三. 典型应用场景

- 移动端:NEON加速视频编解码、游戏图形渲染;

- 嵌入式设备:CP15负责内存保护,加密协处理器保障数据安全;

- 服务器:浮点协处理器支持科学计算、AI推理等高性能场景。

 四、在arm中的架构

ARM 架构支持最多 16 个协处理器,编号为 CP0 到 CP15 。每个协处理器只执行针对自身的协处理指令 。

下表概括了这些协处理器的主要功能(请注意,并非所有系统都完全实现全部协处理器)

 

五、 访问协处理器的指令

ARM 架构提供了一组专门的指令用于与协处理器交互 ,其中最基本和最常用的是  MCR  和  MRC :

 MCR :将数据从 ARM 核心寄存器 移动到 协处理器寄存器 。

 MRC :将数据从 协处理器寄存器 移动到 ARM 核心寄存器 。

这些指令的典型操作流程是"读取-修改-写回":先使用  MRC  将协处理器寄存器的值读到通用寄存器,修改特定位后,再用  MCR  写回 。

六、汇编代码示例:操作 CP15 启用缓存

下面的汇编代码演示了如何使用  MRC  和  MCR  指令,通过配置 CP15 的控制寄存器(c1)来启用指令缓存和数据缓存 。


.global _start

 

_start:

    @ 1. 使用MRC指令读取CP15的控制寄存器c1的值到通用寄存器r0中

    MRC p15, 0, r0, c1, c0, 0 @ [6,8](@ref)

 

    @ 2. 启用指令缓存(I Cache),设置第12位为1

    ORR r0, r0, #(1 << 12) @ 设置位12以启用I Cache [8](@ref)

 

    @ 3. 启用数据缓存(D Cache),设置第2位为1

    ORR r0, r0, #(1 << 2) @ 设置位2以启用D Cache [6,8](@ref)

 

    @ 4. 启用MMU(内存管理单元),设置第0位为1(通常缓存需与MMU配合工作)

    ORR r0, r0, #(1 << 0) @ 设置位0以启用MMU [8](@ref)

 

    @ 5. 使用MCR指令将修改后的配置值从r0写回CP15的控制寄存器c1

    MCR p15, 0, r0, c1, c0, 0 @ [6,8](@ref)

 

    @ 6. 确保所有配置生效(内存屏障指令)

    ISB @ 指令同步屏障 [7](@ref)

 

    @ ... (后续可以执行其他代码)

 

    @ 示例:禁用数据缓存

    MRC p15, 0, r0, c1, c0, 0 @ 再次读取控制寄存器

    BIC r0, r0, #(1 << 2) @ 清除第2位以禁用D Cache [6](@ref)

    MCR p15, 0, r0, c1, c0, 0 @ 写回配置

    ISB

 

    @ 程序循环

    B .

 

 

七、关键点解析与注意事项

 

指令作用:代码通过  MRC  和  MCR  指令操作 CP15 的 c1 寄存器(系统控制寄存器),通过设置其中的特定控制位来启用或禁用相应的系统功能 。

 

内存屏障:在对系统关键配置进行修改后,使用  ISB  等内存屏障指令非常重要,它能确保在屏障之后的指令能够看到配置更改后的效果 。

 

特权级别:操作协处理器(尤其是 CP15)的指令通常需要在特权模式下运行,如果在非特权模式执行,可能会引发异常 。

 

硬件差异:不同型号的 ARM 处理器,其协处理器(特别是 CP15)寄存器的具体定义和行为可能存在差异。在实际开发中,务必参考对应芯片的详细技术参考手册 。

 

八、总结与演进

协处理器是 ARM 架构中用于扩展和增强核心 CPU 功能的重要组件 。通过专用的协处理器指令,我们可以精细地控制系统行为,这在操作系统底层开发、驱动编写和性能优化中至关重要 。

 

需要注意的是,在 ARMv8 开始的 64 位架构中,协处理器的概念有所弱化,许多功能被集成到核心指令集或通过新的系统寄存器进行控制 。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐