ARM處理器中CP15協(xié)處理器的寄存器
4.1.1訪問(wèn)CP15寄存器的指令訪問(wèn)CP15寄存器指令的編碼格式及語(yǔ)法說(shuō)明如下:
指令
說(shuō)明
語(yǔ)法格式
mcr
將ARM處理器的寄存器中的數(shù)據(jù)寫(xiě)到CP15中的寄存器中
mcr{}p15,,,,, {}
mrc
將CP15中的寄存器中的數(shù)據(jù)讀到ARM處理器的寄存器中
mcr{}p15,,,,, {}
4.1.2CP15寄存器介紹CP15的寄存器列表如表4-1所示。3128 | 2724 | 2321 | 20 | 1916 | 1512 | 118 | 75 | 4 | 30 |
cond | 1 1 1 0 | opcode_1 | L | cr n | rd | 1 1 1 1 | opcode_2 | 1 | crm |
指令
說(shuō)明
語(yǔ)法格式
mcr
將ARM處理器的寄存器中的數(shù)據(jù)寫(xiě)到CP15中的寄存器中
mcr{}p15,,,,, {}
mrc
將CP15中的寄存器中的數(shù)據(jù)讀到ARM處理器的寄存器中
mcr{}p15,,,,, {}
表4-1ARM處理器中CP15協(xié)處理器的寄存器
寄存器編號(hào) | 基本作用 | 在MMU中的作用 | 在PU中的作用 |
0 | ID編碼(只讀) | ID編碼和cache類型 | |
1 | 控制位(可讀寫(xiě)) | 各種控制位 | |
2 | 存儲(chǔ)保護(hù)和控制 | 地址轉(zhuǎn)換表基地址 | Cachability的控制位 |
3 | 存儲(chǔ)保護(hù)和控制 | 域訪問(wèn)控制位 | Bufferablity控制位 |
4 | 存儲(chǔ)保護(hù)和控制 | 保留 | 保留 |
5 | 存儲(chǔ)保護(hù)和控制 | 內(nèi)存失效狀態(tài) | 訪問(wèn)權(quán)限控制位 |
6 | 存儲(chǔ)保護(hù)和控制 | 內(nèi)存失效地址 | 保護(hù)區(qū)域控制 |
7 | 高速緩存和寫(xiě)緩存 | 高速緩存和寫(xiě)緩存控制 | |
8 | 存儲(chǔ)保護(hù)和控制 | TLB控制 | 保留 |
9 | 高速緩存和寫(xiě)緩存 | 高速緩存鎖定 | |
10 | 存儲(chǔ)保護(hù)和控制 | TLB鎖定 | 保留 |
11 | 保留 | ||
12 | 保留 | ||
13 | 進(jìn)程標(biāo)識(shí)符 | 進(jìn)程標(biāo)識(shí)符 | |
14 | 保留 | ||
15 | 因不同設(shè)計(jì)而異 | 因不同設(shè)計(jì)而異 | 因不同設(shè)計(jì)而異 |
opcode_2編碼
對(duì)應(yīng)的標(biāo)識(shí)符號(hào)寄存器
0b000
主標(biāo)識(shí)符寄存器
0b001
cache類型標(biāo)識(shí)符寄存器
其他
保留
訪問(wèn)主標(biāo)識(shí)符寄存器的指令格式如下所示:
mrcp15, 0, r0, c0, c0, 0;將主標(biāo)識(shí)符寄存器C0,0的值讀到r0中
ARM不同版本體系處理器中主標(biāo)識(shí)符寄存器的編碼格式說(shuō)明如下。
ARM7之后處理器的主標(biāo)識(shí)符寄存器編碼格式如下所示:
31242320191615430 | ||||
由生產(chǎn)商確定 | 產(chǎn)品子編號(hào) | ARM體系版本號(hào) | 產(chǎn)品主編號(hào) | 處理器版本號(hào) |
位 | 說(shuō)明 |
位[3: 0] | 生產(chǎn)商定義的處理器版本號(hào) |
位[15: 4] | 生產(chǎn)商定義的產(chǎn)品主編號(hào),其中最高4位即位[15:12]可能的取值為0~7但不能是0或7 |
位[19: 16] | ARM體系的版本號(hào),可能的取值如下: 0x1ARM體系版本4 0x2ARM體系版本4T 0x3ARM體系版本5 0x4ARM體系版本5T 0x5ARM體系版本5TE 其他由ARM公司保留將來(lái)使用 |
位[23: 20] | 生產(chǎn)商定義的產(chǎn)品子編號(hào),當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)來(lái)區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
位[31: 24] | 生產(chǎn)廠商的編號(hào),現(xiàn)在已經(jīng)定義的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=Iintel公司 |
3124232216 15430 | ||||
由生產(chǎn)商確定 | A | 產(chǎn)品子編號(hào) | 產(chǎn)品主編號(hào) | 處理器版本號(hào) |
位 | 說(shuō)明 |
位[3: 0] | 生產(chǎn)商定義的處理器版本號(hào) |
位[15: 4] | 生產(chǎn)商定義的產(chǎn)品主編號(hào),其中最高4位即位[15:12]的值為0x7 |
位[22: 16] | 生產(chǎn)商定義的產(chǎn)品子編號(hào),當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)來(lái)區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
位 | 說(shuō)明 |
位[23] | ARM7支持下面兩種ARM體系的版本號(hào): 0x0ARM體系版本3 0x1ARM體系版本4T |
位[31: 24] | 生產(chǎn)廠商的編號(hào),現(xiàn)在已經(jīng)定義的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=IIntel公司 |
312423221615430 | ||||
由生產(chǎn)商確定 | A | 產(chǎn)品子編號(hào) | 產(chǎn)品主編號(hào) | 處理器版本號(hào) |
位 | 說(shuō)明 |
位[3: 0] | 生產(chǎn)商定義的處理器版本號(hào) |
位[15: 4] | 生產(chǎn)商定義的產(chǎn)品主編號(hào),其中最高4位即為[15:12]的值為0x7 |
位[22: 16] | 生產(chǎn)商定義的產(chǎn)品子編號(hào),當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)來(lái)區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的高速緩存的大小等 |
位[23] | ARM7支持下面兩種ARM體系的版本號(hào): 0x0ARM體系版本3 0x1ARM體系版本4T |
位[31: 24] | 生產(chǎn)廠商的編號(hào),現(xiàn)在已經(jīng)定義的有以下值: 0x41=AARM公司 0x44=DDigital Equipment公司 0x69=Iintel公司 |
訪問(wèn)cache類型標(biāo)識(shí)符寄存器的指令格式如下所示:
mrcp15, 0, r0, c0, c0, 1;將cache類型標(biāo)識(shí)符寄存器C0,1的值讀到r0中
ARM處理器中cache類型標(biāo)識(shí)符寄存器的編碼格式如下所示:
31292825242312110 | ||||
000 | 屬性字段 | S | 數(shù)據(jù)cache相關(guān)屬性 | 指令cache相關(guān)屬性 |
位 | 說(shuō)明 |
位[28: 25] | 指定控制字段位[24: 0]指定的屬性之外的cache的其他屬性,詳見(jiàn)表4-2 |
位[24] | 定義系統(tǒng)中的數(shù)據(jù)cache和指令cache是分開(kāi)的還是統(tǒng)一的: 0系統(tǒng)的數(shù)據(jù)cache和指令cache是統(tǒng)一的; 1系統(tǒng)的數(shù)據(jù)cache和指令cache是分開(kāi)的 |
位[23: 12] | 定義數(shù)據(jù)cache的相關(guān)屬性,如果位[24]為0,本字段定義整個(gè)cache的屬性 |
位[31: 24] | 定義指令cache的相關(guān)屬性,如果位[24]為0,本字段定義整個(gè)cache的屬性 |
表4-2cache類型標(biāo)識(shí)符寄存器的控制字段位[28:25]
編碼 | cache類型 | cache內(nèi)容清除方法 | cache內(nèi)容鎖定方法 |
0b0000 | 寫(xiě)通類型 | 不需要內(nèi)容清除 | 不支持內(nèi)容鎖定 |
0b0001 | 寫(xiě)回類型 | 數(shù)據(jù)塊讀取 | 不支持內(nèi)容鎖定 |
0b0010 | 寫(xiě)回類型 | 由寄存器C7定義 | 不支持內(nèi)容鎖定 |
0b0110 | 寫(xiě)回類型 | 由寄存器C7定義 | 支持格式A |
0b0111 | 寫(xiě)回類型 | 由寄存器C7定義 | 支持格式B |
1198653210 | ||||
000 | cache容量 | cache相聯(lián)特性 | M | 塊大小 |
編碼 | 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 |
編碼 | M=0時(shí)含義 | M=1時(shí)含義 |
0b000 | 1路相聯(lián)(直接映射) | 沒(méi)有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塊大小 |
0b00 | 2個(gè)字(8字節(jié)) |
0b01 | 4個(gè)字(16字節(jié)) |
0b10 | 8個(gè)字(32字節(jié)) |
0b11 | 16個(gè)字(64字節(jié)) |
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
位 | 說(shuō)明 |
M | 0:禁止MMU或者PU;1:使能MMU或者PU |
A | 0:禁止地址對(duì)齊檢查;1:使能地址對(duì)齊檢查 |
C | 0:禁止數(shù)據(jù)/整個(gè)cache;1:使能數(shù)據(jù)/整個(gè)cache |
W | 0:禁止寫(xiě)緩沖;1:使能寫(xiě)緩沖 |
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的存儲(chǔ)系統(tǒng)中,本位用作系統(tǒng)保護(hù) |
R | 在基于MMU的存儲(chǔ)系統(tǒng)中,本位用作ROM保護(hù) |
F | 0:由生產(chǎn)商定義 |
Z | 0:禁止跳轉(zhuǎn)預(yù)測(cè)功能;1:使能跳轉(zhuǎn)預(yù)測(cè)指令 |
I | 0:禁止指令cache;1:使能指令cache |
V | 0:選擇低端異常中斷向量0x0~0x1c;1:選擇高端異常中斷向量0xffff0000~ 0xffff001c |
RR | 0:常規(guī)的cache淘汰算法,如隨機(jī)淘汰;1:預(yù)測(cè)性淘汰算法,如round-robin淘汰算法 |
L4 | 0:保持ARMv5以上版本的正常功能;1:將ARMv5以上版本與以前版本處理器兼容,不根據(jù)跳轉(zhuǎn)地址的bit[0]進(jìn)行ARM指令和Thumb狀態(tài)切換:bit[0]等于0表示ARM指令,等于1表示Thumb指令 |
附加: |
310
一級(jí)映射描述符表的基地址(物理地址)
310
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
31987430
UNP/SBZP
0
域標(biāo)識(shí)
狀態(tài)標(biāo)識(shí)
狀態(tài)標(biāo)識(shí)bit[3:0]表示放引起存儲(chǔ)訪問(wèn)失效的存儲(chǔ)訪問(wèn)類型,該字段含義如表4-3所示(優(yōu)先級(jí)由上到下遞減)。
表4-3狀態(tài)標(biāo)識(shí)字段含義
引起訪問(wèn)失效的原因 | 狀態(tài)標(biāo)識(shí) | 域標(biāo)識(shí) | C6 |
終端異常(Terminal Exception) | 0b0010 | 無(wú)效 | 生產(chǎn)商定義 |
中斷向量訪問(wèn)異常(Vector Exception) | 0b0000 | 無(wú)效 | 有效 |
地址對(duì)齊 | 0b00x1 | 無(wú)效 | 有效 |
一級(jí)頁(yè)表訪問(wèn)失效 | 0b1100 | 無(wú)效 | 有效 |
二級(jí)頁(yè)表訪問(wèn)失效 | 0b1110 | 有效 | 有效 |
基于段的地址變換失效 | 0b0101 | 無(wú)效 | 有效 |
基于頁(yè)的地址變換失效 | 0b0111 | 有效 | 有效 |
基于段的存儲(chǔ)訪問(wèn)中域控制失效 | 0b1001 | 有效 | 有效 |
基于頁(yè)的存儲(chǔ)訪問(wèn)中域控制失效 | 0b1101 | 有效 | 有效 |
基于段的存儲(chǔ)訪問(wèn)中訪問(wèn)權(quán)限控制失效 | 0b1111 | 有效 | 有效 |
基于頁(yè)的存儲(chǔ)訪問(wèn)中訪問(wèn)權(quán)限控制失效 | 0b0100 | 有效 | 有效 |
基于段的cache預(yù)取時(shí)外部存儲(chǔ)系統(tǒng)失效 | 0b0110 | 有效 | 有效 |
基于頁(yè)的cache預(yù)取時(shí)外部存儲(chǔ)系統(tǒng)失效 | 0b1000 | 有效 | 有效 |
基于段的非cache預(yù)取時(shí)外部存儲(chǔ)系統(tǒng)失效 | 0b1010 | 有效 | 有效 |
310
失效地址(虛擬地址)
3132-W 31-W0
cache組內(nèi)塊序號(hào)index
0
編碼格式B如下所示:
3130WW-10 | ||
L | 0 | cache組內(nèi)塊序號(hào)index |
位 | 說(shuō)明 |
L=0 | 當(dāng)發(fā)生cache未命中時(shí),將預(yù)取的存儲(chǔ)塊存入cache中該塊對(duì)應(yīng)的組中序號(hào)為index的cache塊中 |
位 | 說(shuō)明 |
L=1 | 如果本次寫(xiě)操作之前L=0,并且index值小于本次寫(xiě)入的index,本次寫(xiě)操作執(zhí)行的結(jié)果不可預(yù)知;否則,這時(shí)被鎖定的cache塊包括序號(hào)為0~index-1的塊,當(dāng)發(fā)生cache替換時(shí),從序號(hào)為index到ASSOCIATIVITY的塊中選擇被替換的塊 |
31 3032-W31-W32-2W31-2W10
可被替換的條目起始地址的base
下一個(gè)將被替換的條目地址victim
0
P
位 | 說(shuō)明 |
victim | 指定下一次TLB沒(méi)有命中(所需的地址變換條目沒(méi)有包含在TLB中)時(shí),從內(nèi)存頁(yè)表中讀取所需的地址變換條目,并把該地址變換條目保存在TLB中地址victim處 |
base | 指定TLB替換時(shí),所使用的地址范圍,從(base)到(TLB中條目數(shù)-1);字段victim的值應(yīng)該包含在該范圍內(nèi) |
P | 1:寫(xiě)入TLB的地址變換條目不會(huì)受使整個(gè)TLB無(wú)效操作的影響,一直保持有效;0:寫(xiě)入TLB的地址變換條目將會(huì)受到使整個(gè)TLB無(wú)效操作的影響 |
3125240
PID
0
其中,PID表示當(dāng)前進(jìn)程的所在的進(jìn)程空間塊的編號(hào),即當(dāng)前進(jìn)程的進(jìn)程標(biāo)識(shí)符,取值為0~127。
0:MVA(變換后的虛擬地址)= VA(虛擬地址),禁止FCSE(快速上下文切換技術(shù)),系統(tǒng)復(fù)位后PID=0;
非0:使能FCSE。
評(píng)論