簡介
Cortex-A7 MPCore 處理器支援1~4核,通常是和Cortex-A15組成 big.LITTLE架構。
在此架構中,Cortex-A15 作為大核負責高性能運算,而Cortex-A7負責普通應用(相對來說較為省電)
官方性能說明:
在 28nm 工藝下, Cortex-A7 可以運作在 1.2~1.6GHz,并且單核面積不大于 0.45mm2(含
有浮點單元、 NEON 和 32KB 的 L1 緩存),在典型場景下功耗小于 100mW, 這使得它非常适
合對功耗要求嚴格的移動裝置,這意味着 Cortex-A7 在獲得與 Cortex-A9 相似性能的情況下,
其功耗更低
Cortex-A7 MPCore 多核配置如下:
Cortex-A7 MPCore 的 L1 可選擇 8KB、 16KB、 32KB、 64KB, L2 Cache 可以不配,也可以選擇 128KB、 256KB、 512KB、 1024KB。
ARMv7-A架構,主要特性:
- SIMDv2 擴充整形和浮點向量操作。
- 提供了與 ARM VFPv4 體系結構相容的高性能的單雙精度浮點指令,支援全功能的IEEE754。
- 支援大實體擴充(LPAE),最高可以通路 40 位存儲位址,也就是最高可以支援 1TB 的記憶體。
- 支援硬體虛拟化。
- 支援 Generic Interrupt Controller(GIC)V2.0。
- 支援 NEON,可以加速多媒體和信号處理算法
運作模型
一共有9種處理模式。
模式 | 描述 |
---|---|
User(USR) | 使用者模式,非特權模式,大部分程式運作的時候就處于此模式。 |
FIQ | 快速中斷模式,進入 FIQ 中斷異常 |
IRQ | 一般中斷模式。 |
Supervisor(SVC) | 超級管理者模式,特權模式,供作業系統使用。 |
Monitor(MON) | 監視模式,這個模式用于安全擴充模式。 |
Abort(ABT) | 資料通路終止模式,用于虛拟存儲以及存儲保護。 |
Hyp(HYP) | 超級監視模式,用于虛拟化擴充 |
Undef(UND) | 未定義指令終止模式。 |
System(SYS) | 系統模式,用于運作特權級的作業系統任務 |
除User使用者模式外,其餘8種模式都是特權模。
大多數程式都運作在使用者模式,使用者模式下有些資源是受限制,使用者模式不能直接進行切換,使用者模式需要借助異常來完成模式的切換。
寄存器組
ARM架構提供了16個32位得通用寄存器(R0R15)供軟體使用,前15個(R0R14)可以用作通用得資料存儲,R15是程式計數器PC,用來儲存将要執行得指令。ARM還提供了一個目前程式章台寄存器CPSR和一個備份程式狀态寄存器SPSR,SPSR寄存器就是CPSR寄存器得備份。
Cortex-A7 有9種運作模式,每一種運作模式都有一組與之對應的寄存器組。每一種模式可見的寄存器包括 15 個通用寄存器(R0~R14)、一兩個程式狀态寄存器和一個程式計數器 PC。
有些是所有模式所共用的同一個實體寄存器,有些是各模式獨立擁有。如下圖:
圖中,淺色的為與User模式所共有的寄存器,藍綠色的是各個模式所讀有的寄存器
總結:Cortex-A核心寄存器共有43個寄存器,分别為:
- 34個通用寄存器(32位),包括R15程式計數器(PC)
- 8個狀态寄存器,包括CPSR和SPSR
- 1個ELR_Hyp寄存器(Hyp模式下)
通用寄存器
R0~R15為通用寄存器,分為以下三類:
- 未備份寄存器,R0~R7
- 備份寄存器,R8~R14
- 程式計數器PC,R15
未備份寄存器
在所有的處理模式下,這8個寄存器都是同一個實體寄存器。切換模式,資料就會被破壞掉
備份寄存器
備份寄存器中的R8~R12這5個寄存器有兩種實體寄存器,在快速中斷模式下(FIQ)它們對應着 Rx_irq(x=8~12)實體寄存器,其他模式下對應着 Rx(8~12)實體寄存器。 FIQ 是快速中斷模式。 FIQ模式下中斷處理程式可以使用 R8~R12寄存器,因為FIQ模式下的 R8~R12是獨立的,是以中斷處理程式可以不用執行儲存和恢複中斷現場的指令,進而加速中斷的執行過程。
備份寄存器R13一共有8個實體寄存器,其中一個是使用者模式(User)和系統模式(Sys)共用的,剩下的7個分别對應7種不同的模式。R13也叫做SP,用來做為棧指針。基本上每種模式都有一個自己的 R13實體寄存器,應用程式會初始化R13,使其指向該模式專用的棧位址,這就是常說的初始化SP指針。
備份寄存器R14一共有7個實體寄存器,其中一個是使用者模式(User)、系統模式(Sys)和超級監視模式(Hyp)所共有的,剩下的6個分别對應6種不同的模式。
R14也稱為連接配接寄存器(LR),主要有以下兩種用途:
- 每種處理器模式使用 R14(LR)來存放目前子程式的傳回位址,如果使用 BL 或者 BLX來調用子函數的話, R14(LR)被設定成該子函數的傳回位址,在子函數中,将 R14(LR)中的值賦給 R15(PC)即可完成子函數傳回。
-
當異常發生以後,該異常模式對應的 R14 寄存器被設定成該異常模式将要傳回的位址,
R14 也可以當作普通寄存器使用。
程式計數器R15
程式計數器R15也叫做PC,R15儲存着目前執行的指令位址值加8個位元組,這是因為ARM的流水線機制導緻的。
ARM處理器3級流水線:
- 取值
- 義馬
-
執行
這三個過程循環執行。比如目前正在執行第一條指令的同時也對第二條指令進行譯碼,第三條指令也同時被取出存放在 R15(PC)中。我們喜歡以目前正在執行的指令作為參考點,也就是以第一條指令為參考點,那麼R15(PC)中存放的就是三條指令,換句話說就是 R15(PC)總是指向目前正在執行的指令位址再加上 2 條指令的位址。對于 32 位的 ARM 處理器,每條指令是 4 個位元組,是以:
R15(PC)值 = 目前執行的程式位置 + 8個位元組
程式狀态寄存器
所有的模式都共用一個CPSR實體寄存器,CPSR可以在任何模式下被通路。
該寄存器包括: 條件标志位、中斷禁止位、目前處理器模式标志等一些狀态位以及一些控制位。
除了 User 和 Sys 這兩個模式以外,其他7個模式每個都配備了一個專用的實體狀态寄存器,叫做SPSR(備份程式狀态寄存器),當特定的異常中斷發生時, SPSR寄存器用來儲存目前程式狀态寄存器(CPSR)的值,當異常退出以後可以用 SPSR 中儲存的值來恢複 CPSR。
- N(bit31):當兩個補碼表示的 有符号整數運算的時候, N=1 表示運算對的結果為負數, N=0表示結果為正數。
- Z(bit30): Z=1 表示運算結果為零,Z=0表示運算結果不為零,對于CMP指令,Z=1表示進行比較的兩個數大小相等
- C(bit29):在加法指令中,當結果産生了進位,則C=1,表示無符号數運算發生上溢,其它情況下C=0。在減法指令中,當運算中發生借位,則 C=0,表示無符号數運算發生下溢,其它情況下C=1。對于包含移位操作的非加/減法運算指令, C 中包含最後一次溢出的位的數值,對于其它非加/減運算指令, C 位的值通常不受影響。
- V(bit28): 對于加/減法運算指令,當操作數和運算結果表示為二進制的補碼表示的帶符号數時,V=1表示符号位溢出,通常其他位不影響 V 位。
- Q(bit27): 僅 ARM v5TE_J 架構支援,表示飽和狀态, Q=1 表示累積飽和, Q=0 表示累積不飽和。
- IT1:0: 和 IT7:2一起組成 IT[7:0],作為 IF-THEN 指令執行狀态。
- J(bit24): 僅 ARM_v5TE-J架構支援,J=1表示處于Jazelle狀态,此位通常和T(bit5)位一起表示目前所使用的指令集。
J | T | 描述 |
---|---|---|
1 | ARM | |
1 | Thumb | |
1 | 1 | ThumbEE |
1 | Jazelle |
- GE3:0: SIMD 指令有效,大于或等于。
- IT7:2: 參考 IT[1:0]。
- E(bit9): 大小端控制位, E=1 表示大端模式, E=0 表示小端模式。
- A(bit8): 禁止異步中斷位, A=1 表示禁止異步中斷。
- I(bit7): I=1 禁止 IRQ, I=0 使能 IRQ。
- F(bit6): F=1 禁止 FIQ, F=0 使能 FIQ。
- T(bit5): 控制指令執行狀态,表明本指令是 ARM 指令還是Thumb 指令,通常和J(bit24)一起表明指令類型,參考 J(bit24)位。
- M[4:0]: 處理器模式控制位,如下表所示:
M[4:0] | 處理器模式 |
---|---|
10000 | User 模式 |
10001 | FIQ 模式 |
10010 | IRQ 模式 |
10011 | Supervisor(SVC)模式 |
10110 | Monitor(MON)模式 |
10111 | Abort(ABT)模式 |
11010 | Hyp(HYP)模式 |
11011 | Undef(UND)模式 |
11111 | System(SYS)模式 |