浅谈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将来使用。
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相关推荐
- ARM Cortex-M0(1)---浅谈ARM Cortex-M0
浅谈ARM Cortex-M0 一.引言 ARM公司在2009年初发布了其嵌入式处理器系列中最小型.最低功耗的CortexM0处理器.CortexM0低功耗.高性能与极精简程序代码的特性,能应用于各种 ...
- 浅谈关于CPU的架构和工艺(1)
http://www.jianshu.com/p/fa7e11321cd8 inside 高通骁龙 刚入手了SONY Xperia Z5 Premium,其CPU采用了争(fa)议(re)较大的骁龙( ...
- 浅谈MySQL存储引擎-InnoDBMyISAM
浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...
- 【大话设计模式】——浅谈设计模式基础
初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...
- 学校计算机机房好处,浅谈学校计算机机房维护
浅谈学校计算机机房维护 现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- mybatis与php,浅谈mybatis中的#和$的区别
浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...
- 浅谈GCC预编译头技术
浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...
- 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)
震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...
最新文章
- 算法:多数元素,多种解法
- idea编辑springboot,如何打成war包
- 枚举Enum与注解Aunotation大杂烩
- Github-Client(ANDROID)开源之旅(二) ------ 浅析ActionBarSherkLock
- android 还可以输入多少个字符
- 不能连接到 mysql_怎么无法连接到数据库?
- Spring Cloud:Security OAuth2 自定义异常响应
- Atitit 上传进度的实现与原理 目录 1.1. 前端	1 1.2. 读取进度	1 1.3. 后端 定时注入进度	1 1.1.前端 wind
- 计算机信息安全工程师教材,第三级 安全标记保护级-信息安全工程师教材
- 中文手写输入法闪退问题
- 软件需求工程 高校教学平台 测试计划
- matlab解微分方程
- drupal与html转换,HTML转Drupal主题的方法
- SpringBoot+H5微信登陆(网页)
- java 对象数据映射_SpringMVC中json数据映射为java对象的坑
- 机器学习中的算法:支持向量机(SVM)基础
- Ubuntu12.04 Skype4.2 提示Skype can't connect,安装Skype4.3
- struts2 超链接a标签执行action
- 用python实现水纹特效
- 使用Python Link SDK接入阿里云物联网平台
热门文章
- 欧奈尔4个经典形态_股票K线图基础知识:图解4大经典K线组合形态
- qlv视频转换器免费版_迅捷视频转换器无法转换腾讯视频怎么办?亲测操作快速转换...
- echarts 动态设置标题_echart动态生成标题
- 在线图表分析制作_(漂亮)象形柱状图表制作 在线图表制作工具
- 计算机游戏高少手电影,支持switch,还有电影特技!上手简评骨伽IMMERSA Ti游戏耳机...
- android 让dialog保持在最前_Android 面试进阶指南 —— 唠唠任务栈,返回栈和启动模式...
- fat32转ntfs工具无损数据安全转换_干货真香! 无损制作UD三分区教程,新手小白的福利来了...
- ajax如何做到异步交互,1.ajax简单实现异步交互
- linux sh 必要,Linux Shell学习之基础篇(不适合学习,仅为本人笔记)
- mui-scroll-wrapper mui-scroll 内容增多不出滚动条