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