1.2 CP15中的寄存器
表1給出了CP15主要寄存器的功能和作用。
表1 CP15寄存器
寄存器編號(hào)基 本 作 用特 殊 用 途
0ID編號(hào)(只讀)ID和Cache類型
1控制位各種控制位
2存儲(chǔ)器保護(hù)和控制MMU:地址轉(zhuǎn)換表基地址
PU:Cache屬性設(shè)置
3內(nèi)存保護(hù)和控制MMU:域訪問控制
PU:寫緩存控制
4內(nèi)存保護(hù)和控制保留
5內(nèi)存保護(hù)和控制MMU:錯(cuò)誤狀態(tài)
PU:訪問權(quán)限控制
6內(nèi)存保護(hù)和控制MMU:錯(cuò)誤狀態(tài)
PU:保護(hù)區(qū)域控制
7Cache和寫緩存Cache和寫緩存控制
8內(nèi)存保護(hù)和控制MMU:TLB控制
PU:保留
9Cache和寫緩存Cache鎖定
續(xù)表
寄存器編號(hào)基 本 作 用特 殊 用 途
10內(nèi)存保護(hù)和控制MMU:TLB鎖定
PU:保留
11保留保留
12保留保留
13進(jìn)程ID進(jìn)程ID
14保留保留
15芯片生產(chǎn)廠商定義芯片生產(chǎn)廠商定義
1.3 寄存器c0
寄存器c0包含的是ARM本身或芯片生產(chǎn)廠商的一些標(biāo)識(shí)信息。當(dāng)使用MRC指令讀c0寄存器時(shí),根據(jù)第二個(gè)操作碼opcode2的不同,讀出的標(biāo)識(shí)符也是不同的。操作碼與標(biāo)識(shí)符的對(duì)應(yīng)關(guān)系如表2所示。寄存器c0是只讀寄存器,當(dāng)用MCR指令對(duì)其進(jìn)行寫操作時(shí),指令的執(zhí)行結(jié)果不可預(yù)知。
表2 操作碼和標(biāo)識(shí)符的對(duì)應(yīng)關(guān)系
操作碼opcode2對(duì)應(yīng)的標(biāo)識(shí)符寄存器
0b000主標(biāo)識(shí)符寄存器
0b001Cache類型寄存器
其他保留
在操作碼opcode2的取值中,主標(biāo)識(shí)符(opcode2=0)是強(qiáng)制定義的,其他標(biāo)識(shí)符由芯片的生產(chǎn)廠商定義。如果操作碼opcode2指定的值未定義,指令將返回主標(biāo)識(shí)符。其他標(biāo)識(shí)符的值應(yīng)與主標(biāo)識(shí)符的值不同,可以由軟件編程來實(shí)現(xiàn),同時(shí)讀取主標(biāo)識(shí)符和其他標(biāo)識(shí)符,并將兩者的值進(jìn)行比較。如果兩個(gè)標(biāo)識(shí)符值相同,說明未定義該標(biāo)識(shí)符;如果兩個(gè)標(biāo)識(shí)符值不同,說明定義了該標(biāo)識(shí)符,并且得到該標(biāo)識(shí)符的值。
(1)主標(biāo)識(shí)符寄存器
當(dāng)協(xié)處理器指令對(duì)CP15進(jìn)行操作,并且操作碼opcode=2時(shí),處理器的主標(biāo)識(shí)符將被讀出。從主標(biāo)識(shí)符中,可以確定ARM體系結(jié)構(gòu)的版本型號(hào)。同時(shí)也可以參考由芯片生產(chǎn)廠商定義的其他標(biāo)識(shí)符,來獲得更詳細(xì)的信息。
在主標(biāo)識(shí)信息中,bit[15:12]區(qū)分了不同的處理器版本:
· 如果bit[15:12]為0x0,說明處理器是ARM7之前的處理器;
· 如果bit[15:12]為0x7,說明處理器為ARM7處理器;
· 如果bit[15:12]為其他值,說明處理器為ARM7之后的處理器。
對(duì)于ARM7之后的處理器,其標(biāo)識(shí)符的編碼格式如圖2所示。
其中各部分的編碼含義說明如下。
bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號(hào)。
bit[15:4]:生產(chǎn)廠商定義的產(chǎn)品主編號(hào),可能的取值為0x0~0x7。
bit[19:16]:ARM體系的版本號(hào),可能的取值如表3(其他值由ARM公司保留將來使用)所示。
圖2 ARM7之后處理器標(biāo)識(shí)符編碼
表3 bit[19:16]與ARM版本號(hào)
可能的取值版 本 號(hào)
0x1ARM體系版本4
0x2ARM體系版本4T
0x3ARM體系版本5
0x4ARM體系版本5T
0x5ARM體系版本5TE
bit[23:20]:生產(chǎn)廠商定義的產(chǎn)品子編號(hào)。當(dāng)產(chǎn)品主編號(hào)相同時(shí),使用子編號(hào)區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的cache的大小。
bit[31:24]:生產(chǎn)廠商的編號(hào)現(xiàn)已定義的如表4所示。其他的值A(chǔ)RM公司保留將來使用。
表4 bit[31:24]值與ARM生產(chǎn)廠商
可能的取值A(chǔ)RM芯片生產(chǎn)廠商
0x41(A)ARM公司
0x44(D)Digital Equipment
0x69(i)Intel公司
對(duì)于ARM7系統(tǒng)的處理器,其主標(biāo)識(shí)符的編碼如圖3所示。
圖3 ARM7處理器標(biāo)識(shí)符編碼
其中各部分的含義說明如下。
bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號(hào)。
bit[15:4]:生產(chǎn)廠商定義的產(chǎn)品主編號(hào),其最高4位的值為0x7。
bit[22:16]:生產(chǎn)商定義的產(chǎn)品子編號(hào)。當(dāng)產(chǎn)品的主編號(hào)相同時(shí),使用子編號(hào)區(qū)分不同的產(chǎn)品子類,如產(chǎn)品中不同的產(chǎn)品子類、不同產(chǎn)品中高速緩存的大小。
bit[23]:ARM7處理器支持下面兩種ARM體系的版本號(hào)。0x0代表ARM體系版本3;0x1代表ARM體系版本4T。
bit[31:24]:生產(chǎn)廠商的編號(hào)已定義的如表5所示,其他的值A(chǔ)RM公司保留將來使用。
表5 bit[31:24]值與ARM生產(chǎn)廠商
可能的取值A(chǔ)RM芯片生產(chǎn)廠商
0x41(A)ARM公司
0x44(D)Digital Equipment
0x69(i)Intel公司
對(duì)于ARM7系統(tǒng)的處理器,其主標(biāo)識(shí)符的編碼如圖4所示。
圖4 ARM7之前處理器標(biāo)識(shí)符編碼
其中各部分的含義說明如下。
bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號(hào)。
bit[31:4]:處理器標(biāo)識(shí)符及其含義如表6所示。
表6 ARM之后處理器標(biāo)識(shí)符與含義
處理器標(biāo)識(shí)符含 義
0x4156030ARM3(體系版本2)
0x4156060ARM600(ARM體系版本3)
0x4156061ARM610(ARM體系版本3)
0x4156062ARM620(ARM體系版本3)
(2)Cache類型標(biāo)識(shí)符寄存器
如前所述,對(duì)于指令MRC來說,當(dāng)協(xié)處理器寄存器為r0,而第二操作數(shù)opcode2為0b001時(shí),指令讀取值為Cache類型,即可以用下面的指令將處理器的Cache類型標(biāo)識(shí)符寄存器的內(nèi)容讀取到寄存器r0中。
MRC P15,0,r0,c0,c0,1
Cache類型標(biāo)識(shí)符定義了關(guān)于Cache的信息,具體內(nèi)容如下所述。
· 系統(tǒng)中的數(shù)據(jù)Cache和指令Cache是分開的還是統(tǒng)一的。
· Cache的容量、塊大小以及相聯(lián)特性。
· Cache類型是直(write-through)寫還是回寫(write-back)。
· 對(duì)于回寫(write-back)類型的Cache如何有效清除Cache內(nèi)容。
· Cache是否支持內(nèi)容鎖定。
Cache類型標(biāo)識(shí)符寄存器各控制字段的含義編碼格式如圖5所示。
圖5 Cache屬性寄存器標(biāo)識(shí)符編碼格式
其中各控制字段的含義說明如下。
屬性字段(ctype):指定沒有在S位、數(shù)據(jù)Cache相關(guān)屬性位、指令Cache相關(guān)屬性類中指定的屬性,其具體編碼參見表7。
表7 Cache類型標(biāo)識(shí)符寄存器屬性字段含義
編 碼Cache類型Cache內(nèi)容清除方法Cache內(nèi)容鎖定方法
0b0000直寫不需要內(nèi)容清除不支持
0b0001回寫數(shù)據(jù)塊讀取不支持
0b0010回寫由寄存器定義不支持
0b0110回寫由寄存器定義支持格式A,見后
0b0111回寫由寄存器定義支持格式B,見后
S位:定義系統(tǒng)中的數(shù)據(jù)Cache和指令Cache是分開的還是統(tǒng)一的。如果S=0,說明指令Cache和數(shù)據(jù)Cache是統(tǒng)一的,如果S=1,則說明數(shù)據(jù)Cache和指令Cache是分離的。
數(shù)據(jù)Cache相關(guān)屬性:定義了數(shù)據(jù)Cache容量、行大小和相聯(lián)(associativity)特性(如果S≠0)。
指令Cache相關(guān)屬性:定義了指令Cache容量、行大小和相聯(lián)(associativity)特性(如果S≠0)。
數(shù)據(jù)Cache相關(guān)屬性和指令Cache相關(guān)屬性分別占用控制字段[23:12]和[11:0],它們的結(jié)構(gòu)相同,圖6以指令Cache為例,顯示了編碼結(jié)構(gòu)。
圖6 指令Cache編碼結(jié)構(gòu)
其中,各部分的含義說明如下。
bit[11:9]:保留用于將來使用。
bit[8:6]:定義Cache的容量,其編碼格式及含義如表8所示。
表8 類型標(biāo)識(shí)符寄存器控制字段bit[8:6]含義
編 碼M=0時(shí)的含義M=1時(shí)的含義
0b0000.5KB0.75KB
0b0011KB1.5KB
0b0102KB3KB
0b0114KB6KB
續(xù)表
編 碼M=0時(shí)的含義M=1時(shí)的含義
0b1008KB12KB
0b10116KB24KB
0b11032KB48KB
0b11164KB96KB
bit[1:0]:定義Cache的塊大小,其編碼格式及含義如表9所示。
表9 類型標(biāo)識(shí)符寄存器控制字段bit[1:0]含義
編 碼Cache塊大小
0b002個(gè)字(8字節(jié))
0b014個(gè)字(16字節(jié))
0b108個(gè)字(32字節(jié))
0b1116個(gè)字(64字節(jié))
bit[5:3]:定義了Cache的相聯(lián)屬性,其編碼格式及含義如表10所示。
表10 類型標(biāo)識(shí)符寄存器控制字段bit[5:3]含義
編 碼M=0時(shí)的含義M=1時(shí)的含義
0b0001路相聯(lián)
(直接映射)沒有Cache
0b0012路相聯(lián)3路相聯(lián)
0b0104路相聯(lián)6路相聯(lián)
0b0118路相聯(lián)12路相聯(lián)
0b10016路相聯(lián)24路相聯(lián)
0b10132路相聯(lián)48路相聯(lián)
0b11064路相聯(lián)96路相聯(lián)
0b111128路相聯(lián)192路相聯(lián)
評(píng)論
查看更多