天天看點

ARM 920T CP15 協處理器

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中的作用
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
附加 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 域辨別 狀态辨別

其中,域辨別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

CP15的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

其中index表示當下一次發生cache未命中時,将預取的存儲塊存入cache中該塊對應的組中序号為index的cache塊中。此時序号為0~index-1的cache塊被鎖定,當發生cache替換時,從序号為index到ASSOCIATIVITY的塊中選擇被替換的塊。

編碼格式B如下所示:

31    30                                          W      W-1                                     0
L 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 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

其中,PID表示目前程序的所在的程序空間塊的編号,即目前程序的程序辨別符,取值為0~127。

0:MVA(變換後的虛拟位址)= VA(虛拟位址),禁止FCSE(快速上下文切換技術),系統複位後PID=0;

非0:使能FCSE。