ARM微处理器的体系结构
這里概述的都是一些傳統意義上ARM處理器的一些方面,提醒自己看了之后會想起相關知識,或是對ARM有一個總體上的概念,其實都是些簡述性的總結,很多都來自網上資料或教學課件,貼在這里,方便以后隨時隨地的復習!
ARM微處理器包括ARM7、ARM9、ARM9E、ARM10E、SecurCore、以及Intel的StrongARM、XScale和其它廠商基于ARM體系結構的處理器,除了具有ARM體系結構的共同特點以外,每一個系列的ARM微處理器都有各自的特點和應用領域。
?
一、總的來說ARM處理器的一些特點:
1、采用RISC架構的ARM微處理器一般具有如下特點:
支持Thumb(16位)/ARM(32位)雙指令集,能很好的兼容8位/16位器件。Thumb指令集比通常的8位和16位CISC/RISC處理器具有更好的代碼密度;
●????????指令執行采用3級流水線/5級流水線技術;
●????????帶有指令Cache和數據Cache,大量使用寄存器,指令執行速度更快。大多數數據操作都在寄存器中完成。尋址方式靈活簡單,執行效率高。指令長度固定(在ARM狀態下是32位,在Thumb狀態下是16位);
●????????支持大端格式和小端格式兩種方法存儲字數據;
●????????支持Byte(字節,8位)、Halfword(半字,16位)和Word(字,32位)三種數據類型。
●????????支持用戶、快中斷、中斷、管理、中止、系統和未定義等7種處理器模式,除了用戶模式外,其余的均為特權模式;
●????????處理器芯片上都嵌入了在線仿真ICE-RT邏輯,便于通過JTAG來仿真調試ARM體系結構芯片,可以避免使用昂貴的在線仿真器。另外,在處理器核中還可以嵌入跟蹤宏單元ETM,用于監控內部總線,實時跟蹤指令和數據的執行;
●????????具有片上總線AMBA(Advanced Micro-controller Bus Architecture)。?AMBA定義了3組總線:先進高性能總線AHB(Advanced High performance Bus);先進系統總線ASB(Advanced System Bus);先進外圍總線APB(Advanced Peripheral Bus)。通過AMBA可以方便地擴充各種處理器及I/O,可以把DSP、其他處理器和I/O(如UART、定時器和接口等)都集成在一塊芯片中;
●????????采用存儲器映像I/O的方式,即把I/O端口地址作為特殊的存儲器地址;
●????????具有協處理器接口。ARM允許接16個協處理器,如CP15用于系統控制,CP14用于調試控制器;
●????????采用了降低電源電壓,可工作在3.0V以下;減少門的翻轉次數,當某個功能電路不需要時禁止門翻轉;減少門的數目,即降低芯片的集成度;降低時鐘頻率等一些措施降低功耗;
●????????體積小、低成本、高性能。
?
2、一個典型的ARM體系結構:
包含有32位ALU、31個32位通用寄存器及6位狀態寄存器、32×8位乘法器、32×32位桶形移位寄存器、指令譯碼及控制邏輯、指令流水線和數據/地址寄存器等。
1).ALU
ARM體系結構的ALU與常用的ALU邏輯結構基本相同,由兩個操作數鎖存器、加法器、邏輯功能、結果及零檢測邏輯構成。ALU的最小數據通路周期包含寄存器讀時間、移位器延遲、ALU延遲、寄存器寫建立時間、雙相時鐘間非重疊時間等幾部分。
2).桶形移位寄存器
ARM采用了32×32位桶形移位寄存器,左移/右移n位、環移n位和算術右移n位等都可以一次完成,可以有效的減少移位的延遲時間。在桶形移位寄存器中,所有的輸入端通過交叉開關(Crossbar)與所有的輸出端相連。交叉開關采用NMOS晶體管來實現。
3).高速乘法器
ARM為了提高運算速度,采用兩位乘法的方法,2位乘法可根據乘數的2位來實現“加-移位”運算。ARM的高速乘法器采用32×8位的結構,完成32×2位乘法也只需5個時鐘周期。
4).浮點部件
在ARM體系結構中,浮點部件作為選件可根據需要選用,FPA10浮點加速器以協處理器方式與ARM相連,并通過協處理器指令的解釋來執行。
浮點的Load/Store指令使用頻度要達到67%,故FPA10內部也采用Load/Store結構,有8個80位浮點寄存器組,指令執行也采用流水線結構。
5).控制器
ARM的控制器采用硬接線的可編程邏輯陣列PLA,其輸入端有14根、輸出端有40根,分散控制Load/Store多路、乘法器、協處理器以及地址、寄存器ALU和移位器。
6).寄存器
ARM內含37個寄存器,包括31個通用32位寄存器和6個狀態寄存器。
?
3、ARM7系列微處理器:
包括ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ幾種類型。其中,ARM7TDMI是目前使用最廣泛的32位嵌入式RISC處理器,主頻最高可達130MIPS,采用能夠提供0.9MIPS/MHz的三級流水線結構,內嵌硬件乘法器(Multiplier),支持16為壓縮指令集Thumb,嵌入式ICE,支持片上Debug,支持片上斷點和調試點。指令系統與ARM9系列、ARM9E系列和ARM10E系列兼容,支持Windows CE、Linux、Palm OS等操作系統。典型產品如Samsung公司的S< xmlnamespace prefix ="st1" ns ="urn:schemas-microsoft-com:office:smarttags" />3C4510B。
ARM7TDMI處理器內核:
n???????ARM7TDMI還提供了存儲器接口、MMU接口、協處理器接口和調試接口,以及時鐘與總線等控制信號,如圖2.2.2所示。
n???????存儲器接口包括了32位地址A[31:0]、雙向32位數據總線D[31:0]、單向32位數據總線DIN[31:0]與DOUT[31:0]、以及存儲器訪問請求MREQ、地址順序SEQ、存儲器訪問控制MAS[1:0和數據鎖存控制BL[3:0]等控制信號。
n???????ARM7TDMI處理器內核也可以ARM7TDMI-S軟核(Softcore)形式向用戶提供。同時,提供多種組合選擇,例如可以省去嵌入式ICE單元等。
n???????2.ARM720T/ARM740T處理器內核
n???????ARM720T處理器內核是在ARM7TDMI處理器內核基礎上,增加8KB的數據與指令Cache,支持段式和頁式存儲的MMU(Memory Management Unit)、寫緩沖器及AMBA(Advanced Microcontroller Bus Architecture)接口而構成,如圖2.2.3所示。
n???????ARM740T處理器內核與ARM720T處理器內核相比,結構基本相同,ARM740T處理器核沒有存儲器管理單元MMU,不支持虛擬存儲器尋址,而是用存儲器保護單元來提供基本保護和Cache的控制。合適低價格低功耗的嵌入式應用。
4、ARM9微處理器
ARM9系列微處理器包含ARM920T、ARM922T和ARM940T幾種類型,可以在高性能和低功耗特性方面提供最佳的性能。采用5級整數流水線,指令執行效率更高。提供1.1MIPS/MHz的哈佛結構。支持數據Cache和指令Cache,具有更高的指令和數據處理能力。?支持32位ARM指令集和16位Thumb指令集。支持32位的高速AMBA總線接口。全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統。MPU支持實時操作系統。
ARM920T處理器核在ARM9TDMI處理器內核基礎上,增加了分離式的指令Cache和數據Cache,并帶有相應的存儲器管理單元I-MMU和D-MMU、寫緩沖器及AMBA接口等。
ARM9系列微處理器主要應用于無線通信設備、儀器儀表、安全系統、機頂盒、高端打印機、數字照相機和數字攝像機等。典型產品如Samsung公司的S3C2410A。
?
二、ARM體系結構的五個方面:
ARM的體系結構或處理器結構主要體現在:ARM微處理器的寄存器結構、異常處理、存儲器結構、指令系統、接口等方面。
1、寄存器結構:
ARM處理器共有37個寄存器,被分為若干個組(BANK),這些寄器包括:
●??31個通用寄存器,包括程序計數器(PC指針),均為32位的寄存器。
●??6個狀態寄存器,用以標識CPU的工作狀態及程序的運行狀態,均為32位,目前只使用了其中的一部分。
(1)處理器運行模式:
ARM微處理器支持7種運行模式,分別為:
●??usr(用戶模式):ARM處理器正常程序執行模式。
●??fiq(快速中斷模式):用于高速數據傳輸或通道處理
●??irq(外部中斷模式):用于通用的中斷處理
●??svc(管理模式):操作系統使用的保護模式
●????????abt (數據訪問終止模式):?當數據或指令預取終止時進入該模式,可用于虛擬存儲及存儲保護。
●??sys(系統模式):?運行具有特權的操作系統任務。
●??und(未定義指令中止模式):當未定義的指令執行時進入該模式,可用于支持硬件協處理器的軟件仿真。
ARM微處理器的運行模式可以通過軟件改變,也可以通過外部中斷或異常處理改變。
大多數的應用程序運行在用戶模式下,當處理器運行在用戶模式下時,某些被保護的系統資源是不能被訪問的。
除用戶模式以外,其余的所有6種模式稱之為非用戶模式,或特權模式(Privileged Modes);其中除去用戶模式和系統模式以外的5種又稱為異常模式(Exception Modes),常用于處理中斷或異常,以及需要訪問受保護的系統資源等情況。
ARM處理器在每一種處理器模式下均有一組相應的寄存器與之對應。即在任意一種處理器模式下,可訪問的寄存器包括15個通用寄存器(R0~R14)、一至二個狀態寄存器和程序計數器。在所有的寄存器中,有些是在7種處理器模式下共用的同一個物理寄存器,而有些寄存器則是在不同的處理器模式下有不同的物理寄存器。
(2)處理器工作狀態
ARM處理器有32位ARM和16位Thumb兩種工作狀態。在32位ARM狀態下執行字對齊的ARM指令,在16位Thumb狀態下執行半字對齊的Thumb指令。
在Thumb狀態下,程序計數器PC(Program Counter)使用位[1]選擇另一個半字。
ARM處理器在兩種工作狀態之間可以切換,切換不影響處理器的模式或寄存器的內容。
(1)當操作數寄存器的狀態位(位[0])為1時,執行BX指令進入Thumb狀態。如果處理器在Thumb狀態進入異常,則當異常處理(IRQ、FIQ、Undef、Abort和SWI)返回時,自動轉換到Thumb狀態。
(2)當操作數寄存器的狀態位(位[0])為0時,執行BX指令進入ARM狀態,處理器進行異常處理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此情況下,把PC放入異常模式鏈接寄存器中。從異常向量地址開始執行也可以進入ARM狀態。
?
(3)ARM處理器的寄存器組織
ARM處理器的37個寄存器被安排成部分重疊的組,不能在任何模式都可以使用,寄存器的使用與處理器狀態和工作模式有關。如圖2.3.1所示,每種處理器模式使用不同的寄存器組。其中15個通用寄存器(R0~R14)、1或2個狀態寄存器和程序計數器是通用的。
(1).通用寄存器
通用寄存器(R0~R15)可分成不分組寄存器R0~R7、分組寄存器R8~R14和程序計數器R15?三類。
1)不分組寄存器R0~R7:不分組寄存器R0~R7是真正的通用寄存器,可以工作在所有的處理器模式下,沒有隱含的特殊用途。
2)分組寄存器R8~R14
n???????分組寄存器R8~R14取決于當前的處理器模式,每種模式有專用的分組寄存器用于快速異常處理。寄存器R8~Rl2可分為兩組物理寄存器。一組用于FIQ模式,另一組國用于除FIQ以外的其他模式。第1組訪問R8_fiq~R12_fiq,允許快速中斷處理。第二組訪問R8_usr~R12_usr,寄存器R8~R12沒有任何指定的特殊用途。
n???????寄存器R13~R14可分為6個分組的物理寄存器。1個用于用戶模式和系統模式,而其他5個分別用于svc、abt、und、irq和fiq五種異常模式。訪問時需要指定它們的模式,如:R13_<mode>,R14_<mode>;其中:<mode>可以從usr、svc、abt、und、irq和fiq六種模式中選取一個。
n???????寄存器R13通常用作堆棧指針,稱作SP。每種異常模式都有自己的分組R13。通常R13應當被初始化成指向異常模式分配的堆棧。在入口處,異常處理程序將用到的其他寄存器的值保存到堆棧中;返回時,重新將這些值加載到寄存器。這種異常處理方法保證了異常出現后不會導致執行程序的狀態不可靠。
n???????寄存器R14用作子程序鏈接寄存器,也稱為鏈接寄存器LK?(Link Register)。當執行帶鏈接分支(BL)指令時,得到R15的備份。
n???????在其他情況下,將R14當做通用寄存器。類似地,當中斷或異常出現時,或當中斷或異常程序執行BL指令時,相應的分組寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用來保存R15的返回值。
n???????FIQ模式有7個分組的寄存器R8~R14,映射為R8_fiq~R14_fiq。在ARM狀態下,許多FIQ處理沒必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined模式每一種都包含兩個分組的寄存器R13和R14的映射,允許每種模式都有自己的堆棧和鏈接寄存器。
3)程序計數器R15
n???????寄存器R15用作程序計數器(PC)。在ARM狀態,位[1:0]為0,位[31:2]保存PC。
n???????在Thumb狀態,位[0]為0,位[31:1]保存PC。R15雖然也可用作通用寄存器,但一般不這么使用,因為對R15的使用有一些特殊的限制,當違反了這些限制時,程序的執行結果是未知的。
①?讀程序計數器。指令讀出的R15的值是指令地址加上8字節。由于ARM指令始終是字對齊的,所以讀出結果值的位[1:0]總是0(在Thumb狀態下,情況有所變化)。讀PC主要用于快速地對臨近的指令和數據進行位置無關尋址,包括程序中的位置無關轉移。
②?寫程序計數器。寫R15的通常結果是將寫到R15中的值作為指令地址,并以此地址發生轉移。由于ARM指令要求字對齊,通常希望寫到R15中值的位[1:0]=0b00。
n???????由于ARM體系結構采用了多級流水線技術,對于ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節。
(2).程序狀態寄存器
寄存器R16用作程序狀態寄存器CPSR(Current Program Status Register,當前程序狀態寄存器)。在所有處理器模式下都可以訪問CPSR。CPSR包含條件碼標志、中斷禁止位、當前處理器模式以及其他狀態和控制信息。每種異常模式都有一個程序狀態保存寄存器SPSR(Saved Program Status Register)。當異常出現SPSR用于保留CPSR的狀態。
CPSR和SPSR的格式如下:
1)條件碼標志
n???????N、Z、C、V(Negative、Zero、Carry、oVerflow)均為條件碼標志位(Condition Code Flags),它們的內容可被算術或邏輯運算的結果所改變,并且可以決定某條指令是否被執行。CPSR中的條件碼標志可由大多數指令檢測以決定指令是否執行。在ARM狀態下,絕大多數的指令都是有條件執行的。在Thumb狀態下,僅有分支指令是有條件執行的。
n???????通常條件碼標志通過執行比較指令(CMN、CMP、TEQ、TST)、一些算術運算、邏輯運算和傳送指令進行修改。
n???????條件碼標志的通常含義如下:
N:如果結果是帶符號二進制補碼,那么,若結果為負數,則N=1;若結果為正數或0,則N=0。
Z:若指令的結果為0,則置1(通常表示比較的結果為“相等”),否則置0。
C:可用如下4種方法之一設置:
一-加法(包括比較指令CMN)。若加法產生進位(即無符號溢出),則C置1;否則置0。
一-減法(包括比較指令CMP)。若減法產生借位(即無符號溢出),則C置0;否則置1。
一-對于結合移位操作的非加法/減法指令,C置為移出值的最后1位。
一-對于其他非加法/減法指令,C通常不改變。
V:可用如下兩種方法設置,即
一-對于加法或減法指令,當發生帶符號溢出時,V置1,認為操作數和結果是補碼形式的帶符號整數。
????一-對于非加法/減法指令,V通常不改變。
????2)控制位
?????程序狀態寄存器PSR(Program Status Register)的最低8位I、F、T和M[4:0]用作控制位。當異常出現時改變控制位。處理器在特權模式下時也可由軟件改變。
n???????a.中斷禁止位
??????I:置1,則禁止IRQ中斷;
??????F:置1,則禁止FIQ中斷。
n???????b.T位
??????T=0??指示ARM執行;
??????T=1??指示Thumb執行。
n???????c.模式控制位
????M4、M3、M2、Ml和M0(M[4:0])是模式位,決定處理器的工作模式,如下表所列。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />
??
?
Thumb狀態與ARM狀態的寄存器關系
2、異常處理:
在一個正常的程序流程執行過程中,由內部或外部源產生的一個事件使正常的程序產生暫時的停止時,稱之為異常。異常是由內部或外部源產生并引起處理器處理一個事件,例如一個外部的中斷請求。在處理異常之前,當前處理器的狀態必須保留,當異常處理完成之后,恢復保留的當前處理器狀態,繼續執行當前程序。多個異常同時發生時,處理器將會按固定的優先級進行處理。
ARM體系結構中的異常,與單片機的中斷有相似之處,但異常與中斷的概念并不完全等同,例如外部中斷或試圖執行未定義指令都會引起異常。
(1)ARM體系結構的異常類型
ARM體系結構支持7種類型的異常,異常類型、異常處理模式和優先級如下表所示。異常出現后,強制從異常類型對應的固定存儲器地址開始執行程序。這些固定的地址稱為異常向量(Exception Vectors)。
異常類型及異常處理模式:
| 異常類型 | 異常 | 進入模式 | 地址(異常向量) | 優先級 |
| 復位 | 復位 | 管理模式 | 0x0000,0000 | 1(最高) |
| 未定義指令 | 未定義指令 | 未定義模式 | 0x0000,0004 | 6(最低) |
| 軟件中斷 | 軟件中斷 | 管理模式 | 0x0000,0008 | 6(最低) |
| 指令預取中止 | 中止(預取指令) | 中止模式 | 0x0000,000C | 5 |
| 數據中止 | 中止(數據) | 中止模式 | 0x0000,0010 | 2 |
| IRQ(外部中斷請求) | IRQ | IRQ | 0x0000,0018 | 4 |
| FIQ(快速中斷請求) | FIQ | FIQ | 0x0000,001C | 3 |
?
(2)異常類型的含義
1)復位:
當處理器的復位電平有效時,產生復位異常,ARM處理器立刻停止執行當前指令。復位后,ARM處理器在禁止中斷的管理模式下,程序跳轉到復位異常處理程序處執行(從地址0x00000000或0xFFFF0000開始執行指令)。
2)未定義指令異常
當ARM處理器或協處理器遇到不能處理的指令時,產生未定義指令異常。當ARM處理器執行協處理器指令時,它必須等待任一外部協處理器應答后,才能真正執行這條指令。若協處理器沒有響應,就會出現未定義指令異常。若試圖執行未定義的指令,也會出現未定義指令異常。未定義指令異常可用于在沒有物理協處理器(硬件)的系統上,對協處理器進行軟件仿真,或在軟件仿真時進行指令擴展。
3)軟件中斷異常(SoftWare Interrupt,SWI):
軟件中斷異常由執行SWI指令產生,可使用該異常機制實現系統功能調用,用于用戶模式下的程序調用特權操作指令,以請求特定的管理(操作系統)函數。
4)指令預取中止
若處理器預取指令的地址不存在,或該地址不允許當前指令訪問,存儲器會向處理器發出存儲器中止(Abort)信號,但當預取的指令被執行時,才會產生指令預取中止異常。
5)數據中止(數據訪問存儲器中止)
若處理器數據訪問指令的地址不存在,或該地址不允許當前指令訪問時,產生數據中止異常。存儲器系統發出存儲器中止信號。響應數據訪問(加載或存儲)激活中止,標記數據為無效。在后面的任何指令或異常改變CPU狀態之前,數據中止異常發生。
6)外部中斷請求(IRQ)異常
當處理器的外部中斷請求引腳有效,且CPSR中的I位為0時,產生IRQ異常。系統的外設可通過該異常請求中斷服務。IRQ異常的優先級比FIQ異常的低。當進入FIQ處理時,會屏蔽掉IRQ異常。
7)快速中斷請求(FIQ)異常
當處理器的快速中斷請求引腳有效,且CPSR中的F位為0時,產生FIQ異常。FIQ支持數據傳送和通道處理,并有足夠的私有寄存器。
(3)?異常的響應過程
當一個異常出現以后,ARM微處理器會執行以下幾步操作:
①?將下一條指令的地址存入相應連接寄存器LR,以便程序在處理異常返回時能從正確的位置重新開始執行。若異常是從ARM狀態進入,LR寄存器中保存的是下一條指令的地址(當前PC+4(Thumb)或PC+8(ARM),與異常的類型有關);若異常是從Thumb狀態進入,則在LR寄存器中保存當前PC的偏移量。
②?將CPSR狀態傳送到相應的SPSR中。
③?根據異常類型,強制設置CPSR的運行模式位。
④?強制PC從相關的異常向量地址取下一條指令執行,跳轉到相應的異常處理程序。還可以設置中斷禁止位,以禁止中斷發生。
如果異常發生時,處理器處于Thumb狀態,則當異常向量地址加載入PC時,處理器自動切換到ARM狀態。
異常處理完畢之后,ARM微處理器會執行以下幾步操作從異常返回:
①?將連接寄存器LR的值減去相應的偏移量后送到PC中。
②?將SPSR內容送回CPSR中。
③?若在進入異常處理時設置了中斷禁止位,要在此清除。
可以認為應用程序總是從復位異常處理程序開始執行的,因此復位異常處理程序不需要返回。
(4)?應用程序中的異常處理
在應用程序的設計中,異常處理采用的方式是在異常向量表中的特定位置放置一條跳轉指令,跳轉到異常處理程序。當ARM處理器發生異常時,程序計數器PC會被強制設置為對應的異常向量,從而跳轉到異常處理程序,當異常處理完成以后,返回到主程序繼續執行。
?
3、ARM的存儲器結構
ARM體系結構允許使用現有的存儲器和I/O器件進行各種各樣的存儲器系統設計。
(1).地址空間
ARM體系結構使用232個字節的單一、線性地址空間。將字節地址做為無符號數看待,范圍為0~232-1。
(2).存儲器格式
對于字對齊的地址A,地址空間規則要求如下:
●??地址位于A的字由地址為A、A+1、A+2和A+3的字節組成;
●??地址位于A的半字由地址為A和A+1的字節組成;
●??地址位于A+2的半字由地址為A+2和A+3的字節組成;
●??地址位于A的字由地址為A和A+2的半字組成。
ARM存儲系統可以使用小端存儲或者大端存儲兩種方法,大端存儲和小端存儲格式如下圖所示。
ARM體系結構通常希望所有的存儲器訪問能適當地對齊。特別是用于字訪問的地址通常應當字對齊,用于半字訪問的地址通常應當半字對齊。未按這種方式對齊的存儲器訪問稱作非對齊的存儲器訪問。
?
若在ARM態執行期間,將沒有字對齊的地址寫到R15中,那么結果通常是不可預知或者地址的位[1:0]被忽略。若在Thumb態執行期間,將沒有半字對齊的地址寫到R15中,則地址的位[0]通常忽略。
(3).ARM存儲器結構
ARM處理器有的帶有指令Cache和數據Cache,但不帶有片內RAM和片內ROM。系統所需的RAM和ROM(包括Flash)都通過總線外接。由于系統的地址范圍較大(232=4GB),有的片內還帶有存儲器管理單元MMU(Memory Management Unit)。ARM架構處理器還允許外接PCMCIA。
(4).存儲器映射I/O
ARM系統使用存儲器映射I/O。I/O口使用特定的存儲器地址,當從這些地址加載(用于輸入)或向這些地址存儲(用于輸出)時,完成I/O功能。加載和存儲也可用于執行控制功能,代替或者附加到正常的輸入或輸出功能。然而,存儲器映射I/O位置的行為通常不同于對一個正常存儲器位置所期望的行為。例如,從一個正常存儲器位置兩次連續的加載,每次返回的值相同。而對于存儲器映射I/O位置,第2次加載的返回值可以不同于第1次加載的返回值。
?
4、ARM微處理器指令系統
基本尋址方式:尋址方式是根據指令中給出的地址碼字段來實現尋找真實操作數地址的方式,ARM處理器有9?種基本尋址方式。
1).寄存器尋址
操作數的值在寄存器中,指令中的地址碼字段給出的是寄存器編號,寄存器的內容是操作數,指令執行時直接取出寄存器值操作。
例如指令:
MOV????R1,R2?????????????;R1←R2
2).立即尋址
在立即尋址指令中數據就包含在指令當中,立即尋址指令的操作碼字段后面的地址碼部分就是操作數本身,取出指令也就取出了可以立即使用的操作數(也稱為立即數)。立即數要以“#”為前綴,表示16進制數值時以“0x”表示。
ADD?????R0,R0,#1??????????;R0←R0 + 1
3).寄存器移位尋址
寄存器移位尋址是ARM指令集特有的尋址方式。第2個寄存器操作數在與第1個操作數結合之前,先進行移位操作。
4).寄存器間接尋址
5).變址尋址
變址尋址是將基址寄存器的內容與指令中給出的偏移量相加,形成操作數的有效地址,變址尋址用于訪問基址附近的存儲單元,常用于查表,數組操作,功能部件寄存器訪問等。
6).多寄存器尋址
7).堆棧尋址
堆棧是一種數據結構,堆棧是特定順序進行存取的存儲區,操作順序分為“后進先出”和“先進后出”,堆棧尋址時隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區域(堆棧),指針所指向的存儲單元就是堆棧的棧頂。存儲器生長堆棧可分為兩種:
●??向上生長:向高地址方向生長,稱為遞增堆棧(Ascending Stack)。
●??向下生長:向低地址方向生長,稱為遞減堆棧(Decending Stack)。
8).塊復制尋址
9).相對尋址
ARM?偽指令:ARM?偽指令不是ARM?指令集中的指令,只是為了編程方便編譯器定義的指令,使用時可以像其它ARM?指令一樣使用,但在編譯時這些指令將被等效的ARM?指令代替。ARM偽指令有ADR,ADRL,LDR,NOP四條。
?
5、ARM微處理器的接口
(1)ARM協處理器接口
為了便于片上系統SoC的設計,ARM可以通過協處理器(CP)來支持一個通用指令集的擴充,通過增加協處理器來增加系統的功能。
在邏輯上,ARM可以擴展16個(CP15~CP0)協處理器,其中:CP15作為系統控制,CP14作為調試控制器,CP7~4作為用戶控制器,CP13~8和CP3~0保留。每個協處理器可有16個寄存器。例如MMU和保護單元的系統控制都采用CP15協處理器;JTAG調試中的協處理器為CP14,即調試通信通道DCC(Debug Communication Channel)。
ARM處理器內核與協處理器接口有以下4類。
????①?時鐘和時鐘控制信號:MCLK、nWAIT、nRESET;
????②?流水線跟隨信號:nMREQ、SEQ、nTRANS、nOPC、TBIT;
????③?應答信號:nCPI、CPA、CPB;
????④?數據信號:D[31:0]、DIN[31:0]、DOUT[31:0]。
?
協處理器也采用流水線結構,為了保證與ARM處理器內核中的流水線同步,在每一個協處理器內需有1個流水線跟隨器(Pipeline Follower),用來跟蹤ARM處理器內核流水線中的指令。由于ARM的Thumb指令集無協處理器指令,協處理器還必須監視TBIT信號的狀態,以確保不把Thumb指令誤解為ARM指令。
????協處理器也采用Load/Store結構,用指令來執行寄存器的內部操作,從存儲器取數據至寄存器或把寄存器中的數保存至存儲器中,以及實現與ARM處理器內核中寄存器之間的數據傳送。而這些指令都由協處理器指令來實現。
(2)ARM AMBA接口
n???????ARM處理器內核可以通過先進的微控制器總線架構AMBA(Advanced Microcontroller Bus Architecture)來擴展不同體系架構的宏單元及I/O部件。AMBA已成為事實上的片上總線OCB(On Chip Bus)標準。
n???????AMBA有AHB(Advanced High-performance Bus,先進高性能總線)、ASB(Advanced System Bus,先進系統總線)和APB(Advanced Peripheral Bus,先進外圍總線)等三類總線。
n???????ASB是目前ARM常用的系統總線,用來連接高性能系統模塊,支持突發(Burst)方式數據傳送。
n???????AHB不但支持突發方式的數據傳送,還支持分離式總線事務處理,以進一步提高總線的利用效率。特別在高性能的ARM架構系統中,AHB有逐步取代ASB的趨勢,例如在ARM1020E處理器核中。
n???????APB為外圍宏單元提供了簡單的接口,也可以把APB看作ASB的余部。
n???????AMBA通過測試接口控制器TIC(Test Interface Controller)提供了模塊測試的途徑,允許外部測試者作為ASB總線的主設備來分別測試AMBA上的各個模塊。
n???????AMBA中的宏單元也可以通過JTAG方式進行測試。雖然AMBA的測試方式通用性稍差些,但其通過并行口的測試比JTAG的測試代價也要低些。
?
一個基于AMBA的典型系統
(3)ARM I/O結構
ARM處理器內核一般都沒有I/O的部件和模塊,ARM處理器中的I/O可通過AMBA總線來擴充。
ARM采用了存儲器映像I/O的方式,即把I/O端口地址作為特殊的存儲器地址。一般的I/O,如串行接口,它有若干個寄存器,包括發送數據寄存器(只寫)、數據接收寄存器(只讀)、控制寄存器、狀態寄存器(只讀)和中斷允許寄存器等。這些寄存器都需相應的I/O端口地址。應注意的是存儲器的單元可以重復讀多次,其讀出的值是一致的;而I/O設備的連續2次輸入,其輸入值可能不同。
在許多ARM體系結構中I/O單元對于用戶是不可訪問的,只可以通過系統管理調用或通過C的庫函數來訪問。
ARM架構的處理器一般都沒有DMA(直接存儲器存取)部件,只有一些高檔的ARM架構處理器才具有DMA的功能。
為了能提高I/O的處理能力,對于一些要求I/O處理速率比較高的事件,系統安排了快速中斷FIQ(Fast Interrupt reQuest),而對其余的I/O源仍安排一般中斷IRQ。
為提高中斷響應的速度,在設計中可以采用以下辦法:
????●??提供大量后備寄存器,在中斷響應及返回時,作為保護現場和恢復現場的上下文切換(Context Switching)之用。
????●??采用片內RAM的結構,這樣可以加速異常處理(包括中斷)的進人時間。
????●??快存Cache和地址變換后備緩沖器TLB(Translation Lookaside Buffer)采用鎖住?(Locked down)方式以確保臨界代碼段不受“不命中”的影響。
?
/*********************************** THE END ****************************************/
總結
以上是生活随笔為你收集整理的ARM微处理器的体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 了解DSP的体系结构
- 下一篇: 2440启动文件分析