當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式教程
[導(dǎo)讀]ARM處理器支持16個(gè)協(xié)處理器。在程序執(zhí)行過(guò)程中,每個(gè)協(xié)處理器忽略屬于ARM處理器和其他協(xié)處理器的指令。當(dāng)一個(gè)協(xié)處理器硬件不能執(zhí)行屬于它的協(xié)處理器指令時(shí),將產(chǎn)生一個(gè)未定義指令異常中斷,在該異常中斷處理程序中,可以通過(guò)軟件模擬該硬件操作。比如,如果系統(tǒng)不包含向量浮點(diǎn)運(yùn)算器,則可以選擇浮點(diǎn)運(yùn)算軟件模擬包來(lái)支持向量浮點(diǎn)運(yùn)算。

ARM存儲(chǔ)系統(tǒng)有非常靈活的體系結(jié)構(gòu),可以適應(yīng)不同的嵌入式應(yīng)用系統(tǒng)的需要。ARM存儲(chǔ)器系統(tǒng)可以使用簡(jiǎn)單的平板式地址映射機(jī)制(就像一些簡(jiǎn)單的單片機(jī)一樣,地址空間的分配方式是固定的,系統(tǒng)中各部分都使用物理地址),也可以使用其他技術(shù)提供功能更為強(qiáng)大的存儲(chǔ)系統(tǒng)。比如:

·系統(tǒng)可能提供多種類型的存儲(chǔ)器件,如FLASH、ROM、SRAM等;

·Caches技術(shù);

·寫(xiě)緩存技術(shù)(writebuffers);

·虛擬內(nèi)存和I/O地址映射技術(shù)。

大多數(shù)的系統(tǒng)通過(guò)下面的方法之一實(shí)現(xiàn)對(duì)復(fù)雜存儲(chǔ)系統(tǒng)的管理。

·使能Cache,縮小處理器和存儲(chǔ)系統(tǒng)速度差別,從而提高系統(tǒng)的整體性能。

·使用內(nèi)存映射技術(shù)實(shí)現(xiàn)虛擬空間到物理空間的映射。這種映射機(jī)制對(duì)嵌入式系統(tǒng)非常重要。通常嵌入式系統(tǒng)程序存放在ROM/FLASH中,這樣系統(tǒng)斷電后程序能夠得到保存。但是通常ROM/FLASH與SDRAM相比,速度慢很多,而且基于ARM的嵌入式系統(tǒng)中通常把異常中斷向量表放在RAM中。利用內(nèi)存映射機(jī)制可以滿足這種需要。在系統(tǒng)加電時(shí),將ROM/FLASH映射為地址0,這樣可以進(jìn)行一些初始化處理;當(dāng)這些初始化處理完成后將SDRAM映射為地址0,并把系統(tǒng)程序加載到SDRAM中運(yùn)行,這樣很好地滿足嵌入式系統(tǒng)的需要。

·引入存儲(chǔ)保護(hù)機(jī)制,增強(qiáng)系統(tǒng)的安全性。

·引入一些機(jī)制保證將I/O操作映射成內(nèi)存操作后,各種I/O操作能夠得到正確的結(jié)果。在簡(jiǎn)單存儲(chǔ)系統(tǒng)中,不存在這樣問(wèn)題。而當(dāng)系統(tǒng)引入了Cache和writebuffer后,就需要一些特別的措施。

在ARM系統(tǒng)中,要實(shí)現(xiàn)對(duì)存儲(chǔ)系統(tǒng)的管理通常是使用協(xié)處理器CP15,它通常也被稱為系統(tǒng)控制協(xié)處理器(SystemControlCoprocessor)。

ARM的存儲(chǔ)器系統(tǒng)是由多級(jí)構(gòu)成的,每級(jí)都有特定的容量和速度。

圖15.1顯示了存儲(chǔ)器的層次結(jié)構(gòu)。

①寄存器。處理器寄存器組可看作是存儲(chǔ)器層次的頂層。這些寄存器被集成在處理器內(nèi)核中,在系統(tǒng)中提供最快的存儲(chǔ)器訪問(wèn)。典型的ARM處理器有多個(gè)32位寄存器,其訪問(wèn)時(shí)間為ns量級(jí)。

圖15.1存儲(chǔ)器的層次結(jié)構(gòu)

②緊耦合存儲(chǔ)器TCM。為彌補(bǔ)Cache訪問(wèn)的不確定性增加的存儲(chǔ)器。TCM是一種快速SDRAM,它緊挨內(nèi)核,并且保證取指和數(shù)據(jù)操作的時(shí)鐘周期數(shù),這一點(diǎn)對(duì)一些要求確定行為的實(shí)時(shí)算法是很重要的。TCM位于存儲(chǔ)器地址映射中,可作為快速存儲(chǔ)器來(lái)訪問(wèn)。

③片上Cache存儲(chǔ)器的容量在8KB~32KB之間,訪問(wèn)時(shí)間大約為10ns。

④高性能的ARM結(jié)構(gòu)中,可能存在第二級(jí)片外Cache,容量為幾百KB,訪問(wèn)時(shí)間為幾十ns。

⑤DRAM。主存儲(chǔ)器可能是幾MB到幾十MB的動(dòng)態(tài)存儲(chǔ)器,訪問(wèn)時(shí)間大約為100ns。

⑥后援存儲(chǔ)器,通常是硬盤(pán),可能從幾百M(fèi)B到幾個(gè)GB,訪問(wèn)時(shí)間為幾十ms。

注意

TCM和SRAM在技術(shù)上相同,但在結(jié)構(gòu)排列上不同;TCM在片上,而SRAM在板上。

15.1協(xié)處理器CP15

ARM處理器支持16個(gè)協(xié)處理器。在程序執(zhí)行過(guò)程中,每個(gè)協(xié)處理器忽略屬于ARM處理器和其他協(xié)處理器的指令。當(dāng)一個(gè)協(xié)處理器硬件不能執(zhí)行屬于它的協(xié)處理器指令時(shí),將產(chǎn)生一個(gè)未定義指令異常中斷,在該異常中斷處理程序中,可以通過(guò)軟件模擬該硬件操作。比如,如果系統(tǒng)不包含向量浮點(diǎn)運(yùn)算器,則可以選擇浮點(diǎn)運(yùn)算軟件模擬包來(lái)支持向量浮點(diǎn)運(yùn)算。

CP15,即通常所說(shuō)的系統(tǒng)控制協(xié)處理器(SystemControlCoprocesssor)。它負(fù)責(zé)完成大部分的存儲(chǔ)系統(tǒng)管理。除了CP15外,在具體的各種存儲(chǔ)管理機(jī)制中可能還會(huì)用到其他的一些技術(shù),如在MMU中除CP15外,還使用了頁(yè)表技術(shù)等。

在一些沒(méi)有標(biāo)準(zhǔn)存儲(chǔ)管理的系統(tǒng)中,CP15是不存在的。在這種情況下,針對(duì)協(xié)處理器CP15的操作指令將被視為未定義指令,指令的執(zhí)行結(jié)果不可預(yù)知。

CP15包含16個(gè)32位寄存器,其編號(hào)為0~15。實(shí)際上對(duì)于某些編號(hào)的寄存器可能對(duì)應(yīng)多個(gè)物理寄存器,在指令中指定特定的標(biāo)志位來(lái)區(qū)分這些物理寄存器。這種機(jī)制有些類似于ARM中的寄存器,當(dāng)處于不同的處理器模式時(shí),某些相同編號(hào)的寄存器對(duì)應(yīng)于不同的物理寄存器。

CP15中的寄存器可能是只讀的,也可能是只寫(xiě)的,還有一些是可讀可寫(xiě)的。在對(duì)協(xié)處理器寄存器進(jìn)行操作時(shí),需要注意以下幾個(gè)問(wèn)題。

·寄存器的訪問(wèn)類型(只讀/只寫(xiě)/可讀可寫(xiě))。

·不同的訪問(wèn)引發(fā)的不同功能。

·相同編號(hào)的寄存器是否對(duì)應(yīng)不同的物理寄存器。

·寄存器的具體作用。

15.1.1CP15寄存器訪問(wèn)指令

通常對(duì)協(xié)處理器CP15的訪問(wèn)使用以下兩種指令。

MCR:將ARM寄存器的值寫(xiě)入CP15寄存器中;

MRC:將CP15寄存器的值寫(xiě)入ARM寄存器中。

注意

通過(guò)協(xié)處理器訪問(wèn)指令CDP、LDC和STC指令對(duì)協(xié)處理器CP15進(jìn)行訪問(wèn)將產(chǎn)生不可預(yù)知的結(jié)果。

其中,CDP為協(xié)處理器數(shù)據(jù)操作指令,這個(gè)指令初始化一些與協(xié)處理器相關(guān)的操作;

LDC為一個(gè)或多個(gè)字的協(xié)處理器數(shù)據(jù)讀取指令,此指令從存儲(chǔ)器讀取數(shù)據(jù)到指定的協(xié)處理器中;

STC為一個(gè)或多個(gè)32位字的協(xié)處理器數(shù)據(jù)寫(xiě)入指令,此指令初始化一個(gè)協(xié)處理器的寫(xiě)操作,從給定的協(xié)處理器把數(shù)據(jù)傳送到存儲(chǔ)器中。

指令MCR和MRC指令訪問(wèn)CP15寄存器使用通用語(yǔ)法。

語(yǔ)法格式為:

MCR{<cond>}p15,<opcode1=0>,<Rd>,<CRn>,<CRm>{,<opcode2>}

MRC{<cond>}p15,<opcode1=0>,<Rd>,<CRn>,<CRm>{,<opcode2>}

其中:

<cond>為指令的執(zhí)行條件。當(dāng)<cond>條件域?yàn)榭諘r(shí),指令無(wú)條件執(zhí)行;

<opcode1>在標(biāo)準(zhǔn)的MRC指令中,為協(xié)處理器的<opcode1>,即操作數(shù)1。對(duì)于CP15來(lái)說(shuō),此操作數(shù)恒為0,即0b000。當(dāng)針對(duì)CP15的MRC指令中<opcode1>不為0時(shí),指令的操作結(jié)果不可預(yù)知;

<Rd>為ARM寄存器,在ARM和協(xié)處理器交換數(shù)據(jù)時(shí)使用。在MRC指令中作為目的寄存器,在MCR中作為源寄存器。

注意

r15不能作為ARM寄存器出現(xiàn)在MRC或MCR指令中,如果r15作為<Rd>出現(xiàn)在這里,那么指令的執(zhí)行結(jié)果不可預(yù)知。

<CRn>是CP15協(xié)處理器指令中用到的主要寄存器。在MRC指令中為源寄存器,在MCR中為目的寄存器。CP15協(xié)處理器的寄存器c0、c1、…、c15均可出現(xiàn)在這里。

<CRm>是附加的協(xié)處理器寄存器,用于區(qū)分同一個(gè)編號(hào)的不同物理寄存器和訪問(wèn)類型。當(dāng)指令中不需要提供附加信息時(shí),將<CRm>指定為C0,否則指令的操作結(jié)果不可預(yù)知。

<opcode2>提供附加信息,用于區(qū)分同一個(gè)編號(hào)的不同物理寄存器,當(dāng)指令中沒(méi)有指定附加信息時(shí),省略<opcode2>或者將其指定為0,否則指令的操作結(jié)果不可預(yù)知。

MCR和MRC指令只能操作在特權(quán)模式下,如果處理器運(yùn)行在用戶模式,指令的執(zhí)行結(jié)果不可預(yù)知。

注意

在用戶模式下,如果要訪問(wèn)系統(tǒng)控制協(xié)處理器,通常的做法是由操作系統(tǒng)提供SWI軟中斷調(diào)用來(lái)完成系統(tǒng)模式的切換。由于不同型號(hào)的ARM處理器對(duì)此管理差別很大,所以建議用戶在應(yīng)用時(shí)將SWI作為一個(gè)獨(dú)立的模塊來(lái)管理并向上提供通用接口,以屏蔽不同型號(hào)處理器之間的差異。

例15.1給出了一個(gè)典型的利用SWI進(jìn)行模式切換的例子。

【例15.1】

典型的在SWI中進(jìn)行模式切換的例子。利用此例,調(diào)用SWI0來(lái)完成系統(tǒng)模式切換。

EHT_SWI

LDRsp,=EHT_Exception_Stack ;更新SWI堆棧指針

ADDsp,sp,#EXCEPTION_SIZE ;得到棧頂指針

STMDBsp!,{r0-r2,lr} ;保存程序中用到的寄存器

MRSr0,SPSR ;得到SPSR

STMDBsp!,{r0} ;保持SPSR

LDRr0,[lr,#-4] ;計(jì)算SWI指令地址

BICr0,r0,#0xFF000000 ;提取中斷向量號(hào)

CMPr0,#MAX_SWI ;檢測(cè)中斷向量范圍

LDRLSpc,[pc,r0,LSL#2] ;如果在范圍內(nèi),跳轉(zhuǎn)到軟中斷向量表

BEHT_SWI_Exit ;為定義的SWI指令出口

EHT_Jump_Table

DCDEHT_SU_Switch

DCDEHT_Disable_Interrupts

;*********************************************************************************

;用戶可在此添加更多的自定義軟中斷,在此SWI0作為系統(tǒng)保留的軟中斷,調(diào)用例程EHT_SU_Switch,來(lái)進(jìn)行模式切換

;*********************************************************************************

EHT_SU_Switch

MMU_DISABLE ;轉(zhuǎn)換前禁用MMU

LDMIAsp!,{r0} ;從堆棧中取出SPSR

BICr0,r0,#MODE_MASK ;清除模式位

ORRr0,r0,#SYS_MODE ;設(shè)置程序狀態(tài)字的supper模式位

STMDBsp!,{r0} ;從新將SPSR放入堆棧

BEHT_SWI_Exit

EHT_Disable_Interrupts

LDMIAsp!,{r0} ;從堆棧中讀出SPSR

ORRr0,r0,#LOCKOUT ;禁止中斷

STMDBsp!,{r0} ;存儲(chǔ)SPSR到中斷

;BEHT_SWI_Exit

EHT_SWI_Exit

LDMIAsp!,{r0} ;從堆棧中讀出SPSR

MSRSPSR_cf,r0 ;將SPSR放入SPSR_cf

LDMIAsp!,{r0-r2,pc}^ ;寄存器出棧并返回

END

15.1.2CP15中的寄存器

表15.1給出了CP15主要寄存器的功能和作用。

表15.1 CP15寄存器

寄存器編號(hào)

基本作用

特殊用途

0

ID編號(hào)(只讀)

ID和Cache類型

1

控制位

各種控制位

2

存儲(chǔ)器保護(hù)和控制

MMU:地址轉(zhuǎn)換表基地址

PU:Cache屬性設(shè)置

3

內(nèi)存保護(hù)和控制

MMU:域訪問(wèn)控制

PU:寫(xiě)緩存控制

4

內(nèi)存保護(hù)和控制

保留

5

內(nèi)存保護(hù)和控制

MMU:錯(cuò)誤狀態(tài)

PU:訪問(wèn)權(quán)限控制

6

內(nèi)存保護(hù)和控制

MMU:錯(cuò)誤狀態(tài)

PU:保護(hù)區(qū)域控制

7

Cache和寫(xiě)緩存

Cache和寫(xiě)緩存控制

8

內(nèi)存保護(hù)和控制

MMU:TLB控制

PU:保留

9

Cache和寫(xiě)緩存

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)廠商定義

15.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)系如表15.2所示。寄存器c0是只讀寄存器,當(dāng)用MCR指令對(duì)其進(jìn)行寫(xiě)操作時(shí),指令的執(zhí)行結(jié)果不可預(yù)知。

表15.2 操作碼和標(biāo)識(shí)符的對(duì)應(yīng)關(guān)系

操作碼opcode2

對(duì)應(yīng)的標(biāo)識(shí)符寄存器

0b000

主標(biāo)識(shí)符寄存器

0b001

Cache類型寄存器

其他

保留

在操作碼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í)符的值不同,可以由軟件編程來(lái)實(shí)現(xiàn),同時(shí)讀取主標(biāo)識(shí)符和其他標(biāo)識(shí)符,并將兩者的值進(jìn)行比較。如果兩個(gè)標(biāo)識(shí)符值相同,說(shuō)明未定義該標(biāo)識(shí)符;如果兩個(gè)標(biāo)識(shí)符值不同,說(shuō)明定義了該標(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í)符,來(lái)獲得更詳細(xì)的信息。

在主標(biāo)識(shí)信息中,bit[15:12]區(qū)分了不同的處理器版本:

·如果bit[15:12]為0x0,說(shuō)明處理器是ARM7之前的處理器;

·如果bit[15:12]為0x7,說(shuō)明處理器為ARM7處理器;

·如果bit[15:12]為其他值,說(shuō)明處理器為ARM7之后的處理器。

對(duì)于ARM7之后的處理器,其標(biāo)識(shí)符的編碼格式如圖15.2所示。

其中各部分的編碼含義說(shuō)明如下。

bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號(hào)。

bit[15:4]:生產(chǎn)廠商定義的產(chǎn)品主編號(hào),可能的取值為0x0~0x7。

bit[19:16]:ARM體系的版本號(hào),可能的取值如表15.3(其他值由ARM公司保留將來(lái)使用)所示。

圖15.2ARM7之后處理器標(biāo)識(shí)符編碼

表15.3 bit[19:16]與ARM版本號(hào)

可能的取值

版本號(hào)

0x1

ARM體系版本4

0x2

ARM體系版本4T

0x3

ARM體系版本5

0x4

ARM體系版本5T

0x5

ARM體系版本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)已定義的如表15.4所示。其他的值A(chǔ)RM公司保留將來(lái)使用。

表15.4 bit[31:24]值與ARM生產(chǎn)廠商

可能的取值

ARM芯片生產(chǎn)廠商

0x41(A)

ARM公司

0x44(D)

DigitalEquipment

0x69(i)

Intel公司

對(duì)于ARM7系統(tǒng)的處理器,其主標(biāo)識(shí)符的編碼如圖15.3所示。

圖15.3ARM7處理器標(biāo)識(shí)符編碼

其中各部分的含義說(shuō)明如下。

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)已定義的如表15.5所示,其他的值A(chǔ)RM公司保留將來(lái)使用。

表15.5 bit[31:24]值與ARM生產(chǎn)廠商

可能的取值

ARM芯片生產(chǎn)廠商

0x41(A)

ARM公司

0x44(D)

DigitalEquipment

0x69(i)

Intel公司

對(duì)于ARM7系統(tǒng)的處理器,其主標(biāo)識(shí)符的編碼如圖15.4所示。

圖15.4ARM7之前處理器標(biāo)識(shí)符編碼

其中各部分的含義說(shuō)明如下。

bit[3:0]:包含生產(chǎn)廠商定義的處理器版本型號(hào)。

bit[31:4]:處理器標(biāo)識(shí)符及其含義如表15.6所示。

表15.6 ARM之后處理器標(biāo)識(shí)符與含義

處理器標(biāo)識(shí)符

含義

0x4156030

ARM3(體系版本2)

0x4156060

ARM600(ARM體系版本3)

0x4156061

ARM610(ARM體系版本3)

0x4156062

ARM620(ARM體系版本3)

(2)Cache類型標(biāo)識(shí)符寄存器

如前所述,對(duì)于指令MRC來(lái)說(shuō),當(dāng)協(xié)處理器寄存器為r0,而第二操作數(shù)opcode2為0b001時(shí),指令讀取值為Cache類型,即可以用下面的指令將處理器的Cache類型標(biāo)識(shí)符寄存器的內(nèi)容讀取到寄存器r0中。

MRCP15,0,r0,c0,c0,1

Cache類型標(biāo)識(shí)符定義了關(guān)于Cache的信息,具體內(nèi)容如下所述。

·系統(tǒng)中的數(shù)據(jù)Cache和指令Cache是分開(kāi)的還是統(tǒng)一的。

·Cache的容量、塊大小以及相聯(lián)特性。

·Cache類型是直(write-through)寫(xiě)還是回寫(xiě)(write-back)。

·對(duì)于回寫(xiě)(write-back)類型的Cache如何有效清除Cache內(nèi)容。

·Cache是否支持內(nèi)容鎖定。

Cache類型標(biāo)識(shí)符寄存器各控制字段的含義編碼格式如圖15.5所示。

圖15.5Cache屬性寄存器標(biāo)識(shí)符編碼格式

其中各控制字段的含義說(shuō)明如下。

屬性字段(ctype):指定沒(méi)有在S位、數(shù)據(jù)Cache相關(guān)屬性位、指令Cache相關(guān)屬性類中指定的屬性,其具體編碼參見(jiàn)表15.7。

表15.7 Cache類型標(biāo)識(shí)符寄存器屬性字段含義

編碼

Cache類型

Cache內(nèi)容清除方法

Cache內(nèi)容鎖定方法

0b0000

直寫(xiě)

不需要內(nèi)容清除

不支持

0b0001

回寫(xiě)

數(shù)據(jù)塊讀取

不支持

0b0010

回寫(xiě)

由寄存器定義

不支持

0b0110

回寫(xiě)

由寄存器定義

支持格式A,見(jiàn)后

0b0111

回寫(xiě)

由寄存器定義

支持格式B,見(jiàn)后

S位:定義系統(tǒng)中的數(shù)據(jù)Cache和指令Cache是分開(kāi)的還是統(tǒng)一的。如果S=0,說(shuō)明指令Cache和數(shù)據(jù)Cache是統(tǒng)一的,如果S=1,則說(shuō)明數(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)相同,圖15.6以指令Cache為例,顯示了編碼結(jié)構(gòu)。

圖15.6指令Cache編碼結(jié)構(gòu)

其中,各部分的含義說(shuō)明如下。

bit[11:9]:保留用于將來(lái)使用。

bit[8:6]:定義Cache的容量,其編碼格式及含義如表15.8所示。

表15.8 類型標(biāo)識(shí)符寄存器控制字段bit[8:6]含義

編碼

M=0時(shí)的含義

M=1時(shí)的含義

0b000

0.5KB

0.75KB

0b001

1KB

1.5KB

0b010

2KB

3KB

0b011

4KB

6KB

續(xù)表

編碼

M=0時(shí)的含義

M=1時(shí)的含義

0b100

8KB

12KB

0b101

16KB

24KB

0b110

32KB

48KB

0b111

64KB

96KB

bit[1:0]:定義Cache的塊大小,其編碼格式及含義如表15.9所示。

表15.9 類型標(biāo)識(shí)符寄存器控制字段bit[1:0]含義

編碼

Cache塊大小

0b00

2個(gè)字(8字節(jié))

0b01

4個(gè)字(16字節(jié))

0b10

8個(gè)字(32字節(jié))

0b11

16個(gè)字(64字節(jié))

bit[5:3]:定義了Cache的相聯(lián)屬性,其編碼格式及含義如表15.10所示。

表15.10 類型標(biāo)識(shí)符寄存器控制字段bit[5:3]含義

編碼

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)

15.1.4寄存器c1

CP15中的寄存器c1包括以下控制功能:

·禁止/使能MMU以及其他與存儲(chǔ)系統(tǒng)有關(guān)的功能;

·配置存儲(chǔ)系統(tǒng)以及ARM處理器中相關(guān)的工作。

注意

在寄存器c1中包含了一些沒(méi)有使用的位,這些位在將來(lái)可能被擴(kuò)展其他功能時(shí)使用。因此為了編寫(xiě)代碼在將來(lái)更高版本的ARM處理器中仍可以使用,在修改寄存器c1中的位時(shí)應(yīng)該使用“讀?。薷奶囟ㄎ唬瓕?xiě)入”的操作序列。

當(dāng)對(duì)寄存器c1進(jìn)行讀操作時(shí),指令中CRm和opcode2的值將被處理器忽略,所以要人工將其置位為0。

例15.2用MRC/MCR指令將協(xié)處理器寄存器c1的值進(jìn)行讀取和寫(xiě)入。

【例15.2】

MRCP15,0,r0,c1,0,0;將寄存器c1的值讀取到ARM寄存器r0中

MCRP15,0,r0,c1,0,0;將ARM寄存器r0的值寫(xiě)入寄存器c1

圖15.7顯示了寄存器c1的編碼格式。

圖15.7寄存器c1編碼格式

寄存器c1各控制字段的含義如表15.11所示。

表15.11 寄存器c1中各控制位字段的含義

C1中的控制位

含義

M(bit[0])

禁止/使能MMU或者M(jìn)PU

0:禁止MMU或者M(jìn)PU

1:使能MMU或者M(jìn)PU

如果系統(tǒng)中沒(méi)有MMU或者M(jìn)PU,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

A(bit[1])

對(duì)于可以選擇是否支持內(nèi)存訪問(wèn)時(shí)地址對(duì)齊檢查的系統(tǒng),本位禁止/使能地址對(duì)齊檢查功能

0:禁止地址對(duì)齊檢查功能

1:使能地址對(duì)齊檢查功能

對(duì)寄存器進(jìn)行寫(xiě)操作時(shí),忽略該位

C(bit[2])

當(dāng)數(shù)據(jù)Cache和指令Cache分開(kāi)時(shí),本控制位禁止/使能數(shù)據(jù)Cache。

當(dāng)數(shù)據(jù)Cache和指令Cache統(tǒng)一時(shí),該控制位禁止/使能整個(gè)Cache

0:禁止Cache

1:使能Cache

如果系統(tǒng)中不含Cache,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

當(dāng)系統(tǒng)中Cache不能禁止時(shí),讀取返回1,寫(xiě)入時(shí)忽略

W(bit[3])

禁止/使能寫(xiě)緩存

0:禁止寫(xiě)緩存

1:使能寫(xiě)緩存

如果系統(tǒng)中不含寫(xiě)緩存,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

當(dāng)系統(tǒng)中的寫(xiě)緩存不能禁止時(shí),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

P(bit[4])

對(duì)于向前兼容26位ARM處理器,本控制位控制PRGC32控制信號(hào)

0:異常中斷處理程序進(jìn)入32位地址模式

1:異常中斷處理程序進(jìn)入26位地址模式

如果系統(tǒng)不支持向前兼容26位地址,讀取該位時(shí)返回1,寫(xiě)入時(shí)被忽略

D(bit[5])

對(duì)于向前兼容26位ARM處理器,本控制位控制DATA32控制信號(hào)

0:禁止26位地址異常檢查

1:使能26位地址異常檢測(cè)

如果系統(tǒng)不支持向前兼容26位地址,讀取該位時(shí)返回1,寫(xiě)入時(shí)被忽略

續(xù)表

C1中的控制位

含義

L(bit[6])

對(duì)于ARMv3及以前版本,本控制位可以控制處理器的中止模式

0:選擇早期中止模式

1:選擇后期中止模式

對(duì)于以后的處理器讀取該位時(shí)返回1,寫(xiě)入時(shí)忽略

B(bit[7])

對(duì)于存儲(chǔ)系統(tǒng)同時(shí)支持大/小端(big-endian/little-endian)的ARM處理器,該控制位配置系統(tǒng)使用哪種內(nèi)存模式

0:使用小端(little-endian)

0:使用大端(big-endian)

對(duì)于只支持小端(little-endian)的系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

對(duì)于只支持大端(big-endian)的系統(tǒng),讀取時(shí)該位返回1,寫(xiě)入時(shí)忽略

S(bit[8])

支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作系統(tǒng)保護(hù)

R(bit[9])

支持MMU的存儲(chǔ)系統(tǒng)中,本控制位用作ROM保護(hù)

F(bit[10])

本控制位由生產(chǎn)廠商定義

Z(bit[11])

對(duì)于支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),本控制位禁止/使能跳轉(zhuǎn)預(yù)測(cè)功能

0:禁止跳轉(zhuǎn)預(yù)測(cè)功能

1:使能跳轉(zhuǎn)預(yù)測(cè)功能

對(duì)于不支持跳轉(zhuǎn)預(yù)測(cè)的ARM系統(tǒng),讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

I(bit[12])

當(dāng)數(shù)據(jù)Cache和指令Cache是分開(kāi)的,本控制位禁止/使能指令Cache

0:禁止指令Cache

1:使能指令Cache

如果系統(tǒng)中使用統(tǒng)一的指令Cache和數(shù)據(jù)Cache或者系統(tǒng)中不含Cache,讀取該位時(shí)返回0,寫(xiě)入時(shí)忽略該位

當(dāng)系統(tǒng)中的指令Cache不能禁止時(shí),讀取該位返回1,寫(xiě)入時(shí)忽略該位

V(bit[13])

支持高端異常向量表的系統(tǒng)中,本控制位控制向量表的位置

0:選擇0x00000000~0x0000001c

1:選擇0Xffff0000~0xffff001c

對(duì)于不支持高端中斷向量表的系統(tǒng),讀取時(shí)返回0,寫(xiě)入時(shí)忽略

RR(bit[14])

如果系統(tǒng)中Cache的淘汰算法可以選擇的話,本控制位選擇淘汰算法

0:選擇常規(guī)的淘汰算法,如隨機(jī)淘汰算法

1:選擇預(yù)測(cè)性的淘汰算法,如輪轉(zhuǎn)(round-robin)淘汰算法

如果系統(tǒng)中淘汰算法不可選擇,寫(xiě)入該位時(shí)被忽略,讀取該位時(shí),根據(jù)其淘汰算法是否可以比較簡(jiǎn)單地預(yù)測(cè)最壞情況返回1或者0

L4(bit[15])

ARM版本5及以上的版本中,本控制位可以提供兼容以前的ARM版本的功能

0:保持當(dāng)前ARM版本的正常功能

1:對(duì)于一些根據(jù)跳轉(zhuǎn)地址的bit[0]進(jìn)行狀態(tài)切換的指令,忽略bit[0],不進(jìn)行狀態(tài)切換,保持和以前ARM版本兼容

此控制位可以影響以下指令:LDM、LDR和POP

對(duì)于ARM版本5以前的處理器,該位沒(méi)有使用,應(yīng)作為UNP/SBZP

對(duì)于ARM版本5以后的處理器,如果不支持向前兼容的屬性,讀取時(shí)該位返回0,寫(xiě)入時(shí)忽略

Bit(bit[31:16])

這些位保留將來(lái)使用,應(yīng)為UNP/SBZP

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉