|
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>:協(xié)處理器行為操作碼,對于CP15來說,<opcode_1>永遠(yuǎn)為0b000,否則結(jié)果未知。
<rd>:不能是r15/pc,否則,結(jié)果未知。
<crn>:作為目標(biāo)寄存器的協(xié)處理器寄存器,編號為C0~C15。
<crm>:附加的目標(biāo)寄存器或源操作數(shù)寄存器,如果不需要設(shè)置附加信息,將crm設(shè)置為c0,否則結(jié)果未知。
<opcode_2>:提供附加信息比如寄存器的版本號或者訪問類型,用于區(qū)分同一個(gè)編號的不同物理寄存器,可以省略<opcode_2>或者將其設(shè)置為0,否則結(jié)果未知。
指 令 |
說 明 |
語法格式 |
mcr |
將ARM處理器的寄存器中的數(shù)據(jù)寫到CP15中的寄存器中 |
mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} |
mrc |
將CP15中的寄存器中的數(shù)據(jù)讀到ARM處理器的寄存器中 |
mcr{<cond>} p15, <opcode_1>, <rd>, <crn>, <crm>, {<opcode_2>} |
CP15的寄存器列表如表4-1所示。
表4-1 ARM處理器中CP15協(xié)處理器的寄存器
寄存器編號 |
基本作用 |
在MMU中的作用 |
在PU中的作用 |
0 |
ID編碼(只讀) |
ID編碼和cache類型 |
|
1 |
控制位(可讀寫) |
各種控制位 |
|
2 |
存儲保護(hù)和控制 |
地址轉(zhuǎn)換表基地址 |
Cachability的控制位 |
3 |
存儲保護(hù)和控制 |
域訪問控制位 |
Bufferablity控制位 |
4 |
存儲保護(hù)和控制 |
保留 |
保留 |
5 |
存儲保護(hù)和控制 |
內(nèi)存失效狀態(tài) |
訪問權(quán)限控制位 |
6 |
存儲保護(hù)和控制 |
內(nèi)存失效地址 |
保護(hù)區(qū)域控制 |
7 |
高速緩存和寫緩存 |
高速緩存和寫緩存控制 |
|
8 |
存儲保護(hù)和控制 |
TLB控制 |
保留 |
9 |
高速緩存和寫緩存 |
高速緩存鎖定 |
|
10 |
存儲保護(hù)和控制 |
TLB鎖定 |
保留 |
11 |
保留 |
|
|
12 |
保留 |
|
|
13 |
進(jìn)程標(biāo)識符 |
進(jìn)程標(biāo)識符 |
|
14 |
保留 |
|
|
15 |
因不同設(shè)計(jì)而異 |
因不同設(shè)計(jì)而異 |
因不同設(shè)計(jì)而異 |
CP15中寄存器C0對應(yīng)兩個(gè)標(biāo)識符寄存器,由訪問CP15中的寄存器指令中的<opcode_2>指定要訪問哪個(gè)具體物理寄存器,<opcode_2>與兩個(gè)標(biāo)識符寄存器的對應(yīng)關(guān)系如下所示:
opcode_2編碼 |
對應(yīng)的標(biāo)識符號寄存器 |
0b000 |
主標(biāo)識符寄存器 |
0b001 |
cache類型標(biāo)識符寄存器 |
其他 |
保留 |
1)主標(biāo)識符寄存器
訪問主標(biāo)識符寄存器的指令格式如下所示:
mrc p15, 0, r0, c0, c0, 0 ;將主標(biāo)識符寄存器C0,0的值讀到r0中
ARM不同版本體系處理器中主標(biāo)識符寄存器的編碼格式說明如下。
ARM7之后處理器的主標(biāo)識符寄存器編碼格式如下所示:
31 24 23 20 19 16 15 4 3 0 |
||||
由生產(chǎn)商確定 |
產(chǎn)品子編號 |
ARM體系版本號 |
產(chǎn)品主編號 |
處理器版本號 |
位 |
說 明 |
位[3: 0] |
生產(chǎn)商定義的處理器版本號 |
位[15: 4] |
生產(chǎn)商定義的產(chǎn)品主編號,其中最高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] |
生產(chǎn)商定義的產(chǎn)品子編號,當(dāng)產(chǎn)品主編號相同時(shí),使用子編號來區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
位[31: 24] |
生產(chǎn)廠商的編號,現(xiàn)在已經(jīng)定義的有以下值: 0x41 =A ARM公司 0x44 =D Digital Equipment公司 0x69 =I intel公司 |
ARM7處理器的主標(biāo)識符寄存器編碼格式如下所示:
31 24 23 22 16 15 4 3 0 |
||||
由生產(chǎn)商確定 |
A |
產(chǎn)品子編號 |
產(chǎn)品主編號 |
處理器版本號 |
位 |
說 明 |
位[3: 0] |
生產(chǎn)商定義的處理器版本號 |
位[15: 4] |
生產(chǎn)商定義的產(chǎn)品主編號,其中最高4位即位[15:12]的值為0x7 |
位[22: 16] |
生產(chǎn)商定義的產(chǎn)品子編號,當(dāng)產(chǎn)品主編號相同時(shí),使用子編號來區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
續(xù)表
位 |
說 明 |
位[23] |
ARM7支持下面兩種ARM體系的版本號: 0x0 ARM體系版本3 0x1 ARM體系版本4T |
位[31: 24] |
生產(chǎn)廠商的編號,現(xiàn)在已經(jīng)定義的有以下值: 0x41 =A ARM公司 0x44 =D Digital Equipment公司 0x69 =I Intel公司 |
ARM7之前處理器的主標(biāo)識符寄存器編碼格式如下所示:
31 24 23 22 16 15 4 3 0 |
||||
由生產(chǎn)商確定 |
A |
產(chǎn)品子編號 |
產(chǎn)品主編號 |
處理器版本號 |
位 |
說 明 |
位[3: 0] |
生產(chǎn)商定義的處理器版本號 |
位[15: 4] |
生產(chǎn)商定義的產(chǎn)品主編號,其中最高4位即為[15:12]的值為0x7 |
位[22: 16] |
生產(chǎn)商定義的產(chǎn)品子編號,當(dāng)產(chǎn)品主編號相同時(shí),使用子編號來區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
位[23] |
ARM7支持下面兩種ARM體系的版本號: 0x0 ARM體系版本3 0x1 ARM體系版本4T |
位[31: 24] |
生產(chǎn)廠商的編號,現(xiàn)在已經(jīng)定義的有以下值: 0x41 =A ARM公司 0x44 =D Digital Equipment公司 0x69 =I intel公司 |
2)cache類型標(biāo)識符寄存器
訪問cache類型標(biāo)識符寄存器的指令格式如下所示:
mrc p15, 0, r0, c0, c0, 1 ;將cache類型標(biāo)識符寄存器C0,1的值讀到r0中
ARM處理器中cache類型標(biāo)識符寄存器的編碼格式如下所示:
31 29 28 25 24 23 12 11 0 |
||||
0 0 0 |
屬性字段 |
S |
數(shù)據(jù)cache相關(guān)屬性 |
指令cache相關(guān)屬性 |
位 |
說明 |
位[28: 25] |
指定控制字段位[24: 0]指定的屬性之外的cache的其他屬性,詳見表4-2 |
位[24] |
定義系統(tǒng)中的數(shù)據(jù)cache和指令cache是分開的還是統(tǒng)一的: 0 系統(tǒng)的數(shù)據(jù)cache和指令cache是統(tǒng)一的; 1 系統(tǒng)的數(shù)據(jù)cache和指令cache是分開的 |
位[23: 12] |
定義數(shù)據(jù)cache的相關(guān)屬性,如果位[24]為0,本字段定義整個(gè)cache的屬性 |
位[31: 24] |
定義指令cache的相關(guān)屬性,如果位[24]為0,本字段定義整個(gè)cache的屬性 |
其中控制字段位[28:25]的含義說明如下:
表4-2 cache類型標(biāo)識符寄存器的控制字段位[28:25]
編 碼 |
cache類型 |
cache內(nèi)容清除方法 |
cache內(nèi)容鎖定方法 |
0b0000 |
寫通類型 |
不需要內(nèi)容清除 |
不支持內(nèi)容鎖定 |
0b0001 |
寫回類型 |
數(shù)據(jù)塊讀取 |
不支持內(nèi)容鎖定 |
0b0010 |
寫回類型 |
由寄存器C7定義 |
不支持內(nèi)容鎖定 |
0b0110 |
寫回類型 |
由寄存器C7定義 |
支持格式A |
0b0111 |
寫回類型 |
由寄存器C7定義 |
支持格式B |
控制字段位[23:12]和控制字段位[11:0]的編碼格式相同,含義如下所示:
11 9 8 6 5 3 2 1 0 |
||||
0 0 0 |
cache容量 |
cache相聯(lián)特性 |
M |
塊大小 |
cache容量字段bits[8: 6]的含義如下所示:
編 碼 |
M=0時(shí)含義(單位KB) |
M=1時(shí)含義(單位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相聯(lián)特性字段bits[5: 3]的含義如下所示:
編 碼 |
M=0時(shí)含義 |
M=1時(shí)含義 |
0b000 |
1路相聯(lián)(直接映射) |
沒有cache |
0b001 |
2路相聯(lián) |
3路相聯(lián) |
0b010 |
4路相聯(lián) |
6路相聯(lián) |
0b011 |
8路相聯(lián) |
12路相聯(lián) |
0b100 |
16路相聯(lián) |
24路相聯(lián) |
0b101 |
32路相聯(lián) |
48路相聯(lián) |
0b110 |
64路相聯(lián) |
96路相聯(lián) |
0b111 |
128路相聯(lián) |
192路相聯(lián) |
cache塊大小字段bits[1: 0]的含義如下所示:
編 碼 |
cache塊大小 |
0b00 |
2個(gè)字(8字節(jié)) |
0b01 |
4個(gè)字(16字節(jié)) |
0b10 |
8個(gè)字(32字節(jié)) |
0b11 |
16個(gè)字(64字節(jié)) |
訪問主標(biāo)識符寄存器的指令格式如下所示:
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:禁止數(shù)據(jù)/整個(gè)cache;1:使能數(shù)據(jù)/整個(gè)cache |
W |
0:禁止寫緩沖;1:使能寫緩沖 |
P |
0:異常中斷處理程序進(jìn)入32位地址模式;1:異常中斷處理程序進(jìn)入26位地址模式 |
D |
0:禁止26位地址異常檢查;1:使能26位地址異常檢查 |
L |
0:選擇早期中止模型;1:選擇后期中止模型 |
B |
0:little endian;1:big endian |
S |
在基于MMU的存儲系統(tǒng)中,本位用作系統(tǒng)保護(hù) |
R |
在基于MMU的存儲系統(tǒng)中,本位用作ROM保護(hù) |
F |
0:由生產(chǎn)商定義 |
Z |
0:禁止跳轉(zhuǎn)預(yù)測功能;1:使能跳轉(zhuǎn)預(yù)測指令 |
I |
0:禁止指令cache;1:使能指令cache |
V |
0:選擇低端異常中斷向量0x0~0x |
RR |
0:常規(guī)的cache淘汰算法,如隨機(jī)淘汰;1:預(yù)測性淘汰算法,如round-robin淘汰算法 |
L4 |
0:保持ARMv5以上版本的正常功能;1:將ARMv5以上版本與以前版本處理器兼容,不根據(jù)跳轉(zhuǎn)地址的bit[0]進(jìn)行ARM指令和Thumb狀態(tài)切換:bit[0]等于0表示ARM指令,等于1表示Thumb指令 |
附加: |
|
CP15中的寄存器C2保存的是頁表的基地址,即一級映射描述符表的基地址。其編碼格如下所示:
31 0 |
一級映射描述符表的基地址(物理地址) |
CP15中的寄存器C3定義了ARM處理器的16個(gè)域的訪問權(quán)限。
31 0 |
|||||||||||||||
D15 |
D14 |
D13 |
D12 |
D11 |
D10 |
D9 |
D8 |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
CP15中的寄存器C5是失效狀態(tài)寄存器,編碼格式如下所示:
31 9 8 7 4 3 0 |
|||
UNP/SBZP |
0 |
域標(biāo)識 |
狀態(tài)標(biāo)識 |
其中,域標(biāo)識bit[7:4]表示存放引起存儲訪問失效的存儲訪問所屬的域。
狀態(tài)標(biāo)識bit[3:0]表示放引起存儲訪問失效的存儲訪問類型,該字段含義如表4-3所示(優(yōu)先級由上到下遞減)。
表4-3 狀態(tài)標(biāo)識字段含義
引起訪問失效的原因 |
狀態(tài)標(biāo)識 |
域標(biāo)識 |
C6 |
終端異常(Terminal Exception) |
0b0010 |
無效 |
生產(chǎn)商定義 |
中斷向量訪問異常(Vector Exception) |
0b0000 |
無效 |
有效 |
地址對齊 |
0b00x1 |
無效 |
有效 |
一級頁表訪問失效 |
0b1100 |
無效 |
有效 |
二級頁表訪問失效 |
0b1110 |
有效 |
有效 |
基于段的地址變換失效 |
0b0101 |
無效 |
有效 |
基于頁的地址變換失效 |
0b0111 |
有效 |
有效 |
基于段的存儲訪問中域控制失效 |
0b1001 |
有效 |
有效 |
基于頁的存儲訪問中域控制失效 |
0b1101 |
有效 |
有效 |
基于段的存儲訪問中訪問權(quán)限控制失效 |
0b1111 |
有效 |
有效 |
基于頁的存儲訪問中訪問權(quán)限控制失效 |
0b0100 |
有效 |
有效 |
基于段的cache預(yù)取時(shí)外部存儲系統(tǒng)失效 |
0b0110 |
有效 |
有效 |
基于頁的cache預(yù)取時(shí)外部存儲系統(tǒng)失效 |
0b1000 |
有效 |
有效 |
基于段的非cache預(yù)取時(shí)外部存儲系統(tǒng)失效 |
0b1010 |
有效 |
有效 |
CP15中的寄存器C5是失效地址寄存器,編碼格式如下所示:
31 0 |
失效地址(虛擬地址) |
CP15的C7寄存器用來控制cache和寫緩存,它是一個(gè)只寫寄存器,讀操作將產(chǎn)生不可預(yù)知的后果。
訪問CP15的C7寄存器的指令格式如下所示:
mcr p15, 0, <rd>, <c7>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值組合 實(shí)現(xiàn)不同功能
CP15的C8寄存器用來控制清除TLB的內(nèi)容,是只寫寄存器,讀操作將產(chǎn)生不可預(yù)知的后果。
訪問CP15的C8寄存器的指令格式如下所示:
mcr p15, 0, <rd>, <c8>, crm, <opcode_2> ;<rd>、<crm>和<opcode_2>的不同取值組合實(shí)現(xiàn)不同功能,見第4.2節(jié)
CP15的C9寄存器用于控制cache內(nèi)容鎖定。
訪問CP15的C9寄存器的指令格式如下所示:
mcr p15, 0, <rd>, <c9>, c0, <opcode_2>
mrc p15, 0, <rd>, <c9>, c0, <opcode_2>
如果系統(tǒng)中包含獨(dú)立的指令cache和數(shù)據(jù)cache,那么對應(yīng)于數(shù)據(jù)cache和指令cache分別有一個(gè)獨(dú)立的cache內(nèi)容鎖定寄存器,<opcode_2>用來選擇其中的某個(gè)寄存器:
<opcode_2>=1選擇指令cache的內(nèi)容鎖定寄存器;
<opcode_2>=0選擇數(shù)據(jù)cache的內(nèi)容鎖定寄存器。
CP15的C9寄存器有A、B兩種編碼格式。編碼格式A如下所示:
31 32-W 31-W 0 |
|
cache組內(nèi)塊序號index |
0 |
其中index表示當(dāng)下一次發(fā)生cache未命中時(shí),將預(yù)取的存儲塊存入cache中該塊對應(yīng)的組中序號為index的cache塊中。此時(shí)序號為0~index-1的cache塊被鎖定,當(dāng)發(fā)生cache替換時(shí),從序號為index到ASSOCIATIVITY的塊中選擇被替換的塊。
編碼格式B如下所示:
31 30 W W-1 0 |
||
L |
0 |
cache組內(nèi)塊序號index |
位 |
說 明 |
L=0 |
當(dāng)發(fā)生cache未命中時(shí),將預(yù)取的存儲塊存入cache中該塊對應(yīng)的組中序號為index的cache塊中 |
續(xù)表
位 |
說 明 |
L=1 |
如果本次寫操作之前L=0,并且index值小于本次寫入的index,本次寫操作執(zhí)行的結(jié)果不可預(yù)知;否則,這時(shí)被鎖定的cache塊包括序號為0~index-1的塊,當(dāng)發(fā)生cache替換時(shí),從序號為index到ASSOCIATIVITY的塊中選擇被替換的塊 |
CP15的C10寄存器用于控制TLB內(nèi)容鎖定。
訪問CP15的C10寄存器的指令格式如下所示:
mcr p15, 0, <rd>, <c10>, c0, <opcode_2>
mrc p15, 0, <rd>, <c10>, c0, <opcode_2>
如果系統(tǒng)中包含獨(dú)立的指令TLB和數(shù)據(jù)TLB,那么對應(yīng)于數(shù)據(jù)TLB和指令TLB分別有一個(gè)獨(dú)立的TLB內(nèi)容鎖定寄存器,<opcode_2>用來選擇其中的某個(gè)寄存器:
<opcode_2>=1選擇指令TLB的內(nèi)容鎖定寄存器;
<opcode_2>=0選擇數(shù)據(jù)TLB的內(nèi)容鎖定寄存器。
C10寄存器的編碼格式如下:
31 30 32-W 31-W 32-2W 31-2W 1 0 |
|||
可被替換的條目起始地址的base |
下一個(gè)將被替換的條目地址victim |
0 |
P |
位 |
說 明 |
victim |
指定下一次TLB沒有命中(所需的地址變換條目沒有包含在TLB中)時(shí),從內(nèi)存頁表中讀取所需的地址變換條目,并把該地址變換條目保存在TLB中地址victim處 |
base |
指定TLB替換時(shí),所使用的地址范圍,從(base)到(TLB中條目數(shù)-1);字段victim的值應(yīng)該包含在該范圍內(nèi) |
P |
1:寫入TLB的地址變換條目不會受使整個(gè)TLB無效操作的影響,一直保持有效;0:寫入TLB的地址變換條目將會受到使整個(gè)TLB無效操作的影響 |
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表示當(dāng)前進(jìn)程的所在的進(jìn)程空間塊的編號,即當(dāng)前進(jìn)程的進(jìn)程標(biāo)識符,取值為0~127。
0:MVA(變換后的虛擬地址)= VA(虛擬地址),禁止FCSE(快速上下文切換技術(shù)),系統(tǒng)復(fù)位后PID=0;
非0:使能FCSE。
|