您的位置:首页 > 其它

访问CP15寄存器的指令

2010-07-05 09:38 302 查看

4.1.1

访问
CP15

寄存器的指令

访问
CP15
寄存器指令的编码格式及语法说明如下:

31
28

27
24

23
21

20

19
16

15
12

11
8

7
5

4

3
0

cond

1 1 1 0

opcode_1

L

cr n

rd

1 1 1 1

opcode_2

1

crm

说明:

<opcode_1>
:协处理器行为操作码,对于
CP15
来说,
<opcode_1>
永远为
0b000
,否则结果未知。

<rd>
:不能是
r15/pc
,否则,结果未知。

<crn>
:作为目标寄存器的协处理器寄存器,编号为
C0~C15


<crm>
:附加的目标寄存器或源操作数寄存器,如果不需要设置附加信息,将
crm
设置为
c0
,否则结果未知。

<opcode_2>
:提供附加信息比如寄存器的版本号或者访问类型,用于区分同一个编号的不同物理寄存器,可以省略
<opcode_2>
或者将其
设置为
0
,否则结
果未知。









语法格式

mcr


ARM

处理器的寄存器中的数据写到
CP15

中的寄存器中

mcr{<cond>}
p15,
<opcode_1>, <rd>, <crn>, <crm>,
{<opcode_2>}

mrc


CP15

中的寄存器中的数据读到
ARM

处理器的寄存器中

mcr{<cond>}
p15,
<opcode_1>, <rd>, <crn>, <crm>,
{<opcode_2>}

4.1.2

CP15

寄存器介绍

CP15
的寄存器列表如表
4-1
所示。


4-1
ARM
处理器中
CP15
协处理器的寄存器

寄存器编号

基本作用


MMU
中的作用


PU
中的作用

0

ID
编码(只读)

ID
编码和
cache
类型

1


制位(可读写)


种控制位

2


储保护和控制


址转换表基地址

Cachability
的控制位

3


储保护和控制


访问控制位

Bufferablity
控制位

4


储保护和控制







5


储保护和控制


存失效状态

访
问权限控制位

6


储保护和控制


存失效地址


护区域控制

7


速缓存和写缓存


速缓存和写缓存控制

8


储保护和控制

TLB
控制




9


速缓存和写缓存


速缓存锁定

10


储保护和控制

TLB
锁定




11




12




13


程标识符


程标识符

14




15


不同设计而异


不同设计而异


不同设计而异

·

CP15
的寄存器
C0

CP15
中寄存器
C0
对应两个标识符寄存器,由访问
CP15
中的寄存器指令中的
<opcode_2>
指定要访问哪个具体物理寄存器,
<opcode_2>
与两个标识符寄存器的对应关系如下所示:

opcode_2
编码

对应的标识符号寄存器

0b000


标识符寄存器

0b001

cache
类型标识符寄存器







1
)主标识符寄存器

访
问主标识符寄存器的指令格式如下所示:

mrc
p15, 0, r0, c0, c0, 0

;将主标识符寄存器
C0,0
的值读到
r0


ARM
不同版本体系处理器中主标识符寄存器的编码格式说明如下。

ARM7
之后处理器的主标识符寄存器编码格式
如下所示:

31
24
23
20
19

16
15
4
3
0


生产商确定


品子编号

ARM
体系版本号


品主编号


理器版本号








[3: 0]

生产商定义的处理器版本号


[15: 4]

生产商定义的产品主编号,其中最高
4
位即位
[15:12]
可能的取值为
0~7
但不能是
0

7


[19: 16]

ARM
体系的版本号,可能的取值如
下:

0x1
ARM
体系版本
4

0x2
ARM
体系版本
4T

0x3
ARM
体系版本
5

0x4
ARM
体系版本
5T

0x5
ARM
体系版本
5TE

其他


ARM
公司保留将来使用


[23: 20]

生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不
同的高速缓存的大小等


[31: 24]

生产厂商的编号,现在已经定义的有以下值:

0x41
=A
ARM
公司

0x44
=D
Digital
Equipment
公司

0x69
=I
intel
公司

ARM7
处理器的主标识符寄存器编码格式如下所示:

31
24

23
22

16
15
4
3
0

由生产商确定

A

产品子编号

产品主编号

处理器版本号








[3: 0]

生产商定义的处理器版本号


[15: 4]

生产商定义的产品主编号,其中最高
4
位即位
[15:12]
的值为
0x7


[22: 16]

生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等

续表








[23]

ARM7
支持下面两种
ARM
体系的版本号:

0x0
ARM
体系版本
3

0x1
ARM
体系版本
4T


[31: 24]

生产厂商的编号,现在已经定义的有以下值:

0x41
=A
ARM
公司

0x44
=D
Digital Equipment
公司

0x69
=I
Intel
公司

ARM7
之前处理器的主标识符寄存器编码格式如下所示:

31
24
23
22

16

15
4
3
0

由生产商确定

A

产品子编号

产品主编号

处理器版本号








[3: 0]

生产商定义的处理器版本号


[15: 4]

生产商定义的产品主编号,其中最高
4
位即为
[15:12]
的值为
0x7


[22: 16]

生产商定义的产品子编号,当产品主编号相同时,使用子编号来区分不同的产品子类,如产品中不同的高速缓存的大小等


[23]

ARM7
支持下面两种
ARM
体系的版本号:

0x0
ARM
体系版本
3

0x1
ARM
体系版本
4T


[31: 24]

生产厂商的编号,现在已经定义的有以下值:

0x41
=A
ARM
公司

0x44
=D
Digital Equipment
公司

0x69
=I
intel
公司

2

cache
类型标识符寄存器

访问
cache
类型标识符寄存器的指令格式如下所示:

mrc
p15, 0, r0, c0, c0, 1

;将
cache
类型标识符寄存器
C0,1
的值读到
r0


ARM
处理器中
cache
类型标识符寄存器的编码格式如下所示:

31

29

28
25
24
23
12
11
0

0
0
0

属性字段

S

数据
cache
相关属性

指令
cache
相关属性



说明


[28: 25]

指定控制字段位
[24: 0]
指定的属性之外的
cache
的其他属性,详见表
4-2


[24]

定义系统中的数据
cache
和指令
cache
是分开的还是统一的:

0

系统的数据
cache
和指令
cache
是统一的;

1

系统的数据
cache
和指令
cache
是分开的


[23: 12]

定义数据
cache
的相关属性,如果位
[24]

0
,本字段定义整个
cache
的属性


[31: 24]

定义指令
cache
的相关属性,如果位
[24]

0
,本字段定义整个
cache
的属性

其中
控制字段位
[28

25]
的含义
说明如下:


4-2
cache
类型标识符寄存器的控制字段位
[28

25]





cache
类型

cache
内容清除方法

cache
内容锁定方法

0b0000

写通类型

不需要内容清除

不支持内容锁定

0b0001

写回类型

数据块读取

不支持内容锁定

0b0010

写回类型

由寄存器
C7
定义

不支持内容锁定

0b0110

写回类型

由寄存器
C7
定义

支持格式
A

0b0111

写回类型

由寄存器
C7
定义

支持格式
B

控制字段位
[23

12]

控制字段位
[11

0]
的编码格式相同,含义如下所示:

11
9
8

6
5
3
2
1
0

0

0
0

cache
容量

cache
相联特性

M

块大小

cache
容量字段
bits[8: 6]
的含义如下所示:





M=0
时含义(单位
KB


M=1
时含义(单位
KB


0b000

0.5

0.75

0b001

1

1.5

0b010

2

3

0b011

4

6

0b100

8

12

0b101

16

24

0b110

32

48

0b111

64

96

cache
相联特性字段
bits[5: 3]
的含义如下所示:





M=0
时含义

M=1
时含义

0b000

1

相联(直接映射)

没有
cache

0b001

2

相联

3

相联

0b010

4

相联

6

相联

0b011

8

相联

12

相联

0b100

16

相联

24

相联

0b101

32

相联

48

相联

0b110

64

相联

96

相联

0b111

128
路相联

192
路相联

cache
块大小字段
bits[1: 0]
的含义如下所示:





cache
块大小

0b00

2

字(
8
字节)

0b01

4

字(
16
字节)

0b10

8

字(
32
字节)

0b11

16

字(
64
字节)

·

CP15
的寄存器
C1

访
问主标识符寄存器的指令格式如下所示:

mrc
p15, 0, r0, c1, c0{, 0}

;将
CP15
的寄存器
C1
的值读到
r0


mcr
p15, 0, r0, c1, c0{, 0}

;将
r0
的值写到
CP15
的寄存器
C1


CP15
中的寄存器
C1
的编码格式及含义说明如下:

31 16

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

附加

L4

RR

V

I

Z

F

R

S

B

L

D

P

W

C

A

M







M

0
:禁止
MMU
或者
PU

1
:使能
MMU
或者
PU

A

0
:禁止地址对齐检查;
1
:使能地址对齐检查

C

0
:禁止数据
/
整个
cache

1
:使能数据
/
整个
cache

W

0
:禁止写缓冲;
1
:使能写缓冲

P

0
:异常中断处理程序进入
32
位地址模式;
1
:异常中断处理程序进入
26
位地址模式

D

0
:禁止
26
位地址异常检查;
1
:使能
26
位地址异常检查

L

0
:选择早期中止模型;
1
:选择后期中止模型

B

0

little endian

1

big endian

S

在基于
MMU
的存储系统中,本位用作系统保护

R

在基于
MMU
的存储系统中,本位用作
ROM
保护

F

0
:由生产商定义

Z

0
:禁止跳转预测功能;
1
:使能跳转预测指令

I

0
:禁止指令
cache

1
:使能指令
cache

V

0
:选择低端异常中断向量
0x0~0x1c

1
:选择高端异常中断向量
0xffff0000~
0xffff001c

RR

0
:常规的
cache
淘汰算法,如随机淘汰;
1
:预测性淘汰算法,如
round-robin
淘汰算法

L4

0
:保持
ARMv5
以上版本的正常功能;
1
:将
ARMv5
以上版本与以前版本处理器
兼容,不根据跳转地址的
bit[0]
进行
ARM
指令和
Thumb
状态切换:
bit[0]
等于
0
表示
ARM
指令,等于
1
表示
Thumb
指令

附加:

·

CP15
的寄存器
C2

CP15
中的寄存器
C2
保存的是页表的基地址,即一级映射描述
符表的基地址。其编码格如下所示:

31

0

一级映射描述符表的基地址(物理地址)

·

CP15
的寄存器
C3

CP15
中的寄存器
C3
定义了
ARM
处理器的
16
个域的访问权限。

31

0

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

·

CP15
的寄存器
C5

CP15
中的寄存器
C5
是失效状态寄存器,编码格式如下所示:

31

9
8
7

4
3
0

UNP/SBZP

0

域标识

状态标识

其中,域标识
bit[7

4]
表示存放引起存储访问失效的存储访问所属的域。

状态标识
bit[3

0]
表示放引起存储访问失效的存储访问类型,该字段含义如表
4-3
所示(优先级由上到下递减)。


4-3

状态标识字段含义

引起访问失效的原因

状态标识

域标识

C6


端异常(
Terminal Exception


0b0010





产商定义


断向量访问异常(
Vector Exception


0b0000








址对齐

0b00x1








级页表访问失效

0b1100








级页表访问失效

0b1110








于段的地址变换失效

0b0101








于页的地址变换失效

0b0111








于段的存储访问中域控制失效

0b1001








于页的存储访问中域控制失效

0b1101








于段的存储访问中访问权限控制失效

0b1111








于页的存储访问中访问权限控制失效

0b0100








于段的
cache

取时外部存储系统失效

0b0110








于页的
cache

取时外部存储系统失效

0b1000








于段的非
cache

取时外部存储系统失效

0b1010







·

CP15
中的寄存器
C6

CP15
中的寄存器
C5
是失效地址寄存器,编码格式如下所示:

31

0

失效地址(虚拟地址)

·

CP15
中的寄存器
C7

CP15

C7
寄存器用来控制
cache
和写缓存,它是一个只写寄存器,读操作将产生不可预知的后果。

访问
CP15

C7
寄存器的指令格式如下所示:

mcr p15,
0, <rd>, <c7>, crm, <opcode_2>


<rd>

<crm>

<opcode_2>
的不同取值组合

实现不同功能

·

CP15
中的寄存器
C8

CP15

C8
寄存器用来控制清除
TLB
的内容,是只写寄存器,读操作将产生不可预知的后果。

访问
CP15

C8
寄存器的指令格式如下所示:

mcr p15,
0, <rd>, <c8>, crm, <opcode_2>


<rd>

<crm>

<opcode_2>
的不同取值组合实现不同功能,见第
4.2


·

CP15
中的寄存器
C9

C
P15

C9
寄存器用于控制
cache
内容锁定。

访问
CP15

C9
寄存器的指令格式如下所示:

mcr p15,
0, <rd>, <c9>, c0, <opcode_2>

mrc p15,
0, <rd>, <c9>, c0, <opcode_2>

如果系统中包含独立的指令
cache
和数据
cache
,那么对应于数据
cache
和指令
cache
分别有一个独立的
cache
内容锁定寄存器,
<opcode_2>
用来选择其中的某个寄存器:

<opcode_2>=1
选择
指令
cache

内容锁定寄存器;

<opcode_2>=0
选择
数据
cache

内容锁定寄存器。

CP15

C9
寄存器有
A

B
两种编码格式。编码格式
A
如下所示:

31
32-W
31-W

0

cache
组内块序号
index

0

其中
index
表示当下一次发生
cache
未命中时,将预取的存储块存入
cache
中该块对应的组中序号为
index

cache
块中。此时序号为
0~index-1

cache
块被锁定,当发生
cache
替换时,从序号为
index

ASSOCIATIVITY
的块中选择被替换的块。

编码格式
B
如下所示:

31
30

W
W-1

0

L

0

cache
组内块序号
index







L=0

当发生
cache
未命中时,将预取的存储块存入
cache
中该块对应的组中序号为
index

cache
块中

续表







L=1

如果本次写操作之前
L=0
,并且
index
值小于本次写入的
index
,本次写操作执行的结果不可预知;否则,这时被锁定的
cache
块包括序号为
0~index-1
的块,当发生
cache
替换时,从序号为
index

ASSOCIATIVITY
的块中
选择被替换的块

·

CP15
的寄存器
C10

CP15

C10
寄存器用于控制
TLB
内容锁定。

访问
CP15

C10
寄存器的指令格式如下所示:

mcr p15,
0, <rd>, <c10>, c0, <opcode_2>

mrc p15,
0, <rd>, <c10>, c0, <opcode_2>

如果系统中包含独立的指令
TLB
和数据
TLB
,那么对应于数据
TLB
和指令
TLB
分别有一个独立的
TLB
内容锁定寄存器,
<opcode_2>
用来选择其中的某个寄存器:

<opcode_2>=1
选择指令
TLB
的内容锁定寄存器;

<opcode_2>=0
选择数据
TLB
的内容锁定寄存器。

C10
寄存器的编码格式如下:

31 30
32-W
31-W
32-2W
31-2W
1
0

可被替换的条目起始地址的
base

下一个将被替换的条目地址
victim

0

P







victim

指定下一次
TLB
没有命中(所需的地址变换条目没有包含在
TLB
中)时,从内存页表中读取所需
的地址变换条目,并把该地址变换条目保存在
TLB
中地址
victim


base

指定
TLB
替换时,所使用的地址范围,从(
base
)到(
TLB
中条目数
-1
);字段
victim
的值应该包含在该范围内

P

1
:写入
TLB
的地址变换条目不会受使整个
TLB
无效操作的影响,一直保持有效;
0
:写入
TLB
的地址变换条目将会受到使整个
TLB
无效操作的影响

·

CP15
的寄存器
C13

C13
寄存器用于快速上下文切换
FCSE


访问
CP15

C13
寄存器的指令格式如下所示:

mcr p15,
0, <rd>, <c13>, c0, 0

mrc p15,
0, <rd>, <c13>, c0, 0

C13
寄存器的编码格式如下所示:

31
25

24

0

PID

0

其中,
PID
表示当前进程的所在的进程空间块的编号,即当前进程的进程标识符,取值为
0~127


0

MVA
(变换后的虚拟地址)
= VA
(虚拟地址),禁止
FCSE
(快速上下文切换技术),系统复位后
PID=0



0
:使能
FCSE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: