ARM體系結構定義了抽象機器的行為,稱為處理元素(processing element) ,通常縮寫為PE。與ARM體系結構兼容的實現必須符合處理元素所描述的行為。
ARM架構是一個精簡指令集計算機(RISC)架構,具有以下RISC架構特徵:
· 一個大的統一寄存器文件。
· 一種加載/存儲架構,其中數據處理操作只對寄存器內容進行操作,而不是直接對內存內容進行操作。
· 簡單的尋址模式,所有的加載/存儲地址僅由寄存器內容和指令字段決定。
ARMv8體系結構的一個重要特性是向後兼容,並且可以在各種標準和更專門的用例中自由地進行優化實現。ARMv8架構支持:
· A 64-bit Execution state, AArch64.
· A 32-bit Execution state, AArch32, 這與以前版本的ARM架構兼容
通用名AArch64和AArch32描述64位和32位執行狀態:
· AArch64是64位執行狀態,這意味著地址保存在64位寄存器中,基本指令集中的指令可以使用64位寄存器進行處理。AArch64狀態支持A64指令集。
· AArch32 是32位執行狀態,這意味著地址保存在32位寄存器中,基本指令集中的指令使用32位寄存器進行處理。AArch32狀態支持T32和A32指令集。
ARM定義了三個架構概要:
· A:Application架構,支持基於內存管理的虛擬內存系統體系結構(VMSA),支持A64、A32和T32指令集
· R:Real-time架構,支持基於內存保護的受保護內存系統架構(PMSA),支持A32和T32指令集。
· M:Microcontroller架構,支持T32指令集的變體
ARMv8引入了對ARM架構的主要更改,同時與以前版本的架構保持了高度的一致性。下面的小節描述了關鍵的ARMv8架構概念。
Execution state
執行狀態定義PE執行環境,包括:
· 支持的寄存器寬度。
· 支持的指令集。
· 異常模型
· 虛擬內存系統架構(VMSA)。
· 編程模型。
AArch64,64位執行狀態:
· 提供31個64位通用寄存器,其中X30用作過程鏈接寄存器。
· 提供64位程序計數器(PC)、堆棧指針(SPs)和異常鏈接寄存器(ELRs)。
· 為SIMD向量和標量浮點支持提供32個128位寄存器。
· 提供單個指令集A64
· 定義了ARMv8異常模型,有四個異常級別,EL0 - EL3,提供了一個執行特權層次結構,
· 提供對64位虛擬尋址的支持。
· 定義許多包含PE狀態的進程狀態(PSTATE)元素。A64指令集包括直接操作各種PSTATE元素的指令
· 使用表示可以訪問寄存器的最低異常級別的後綴來命名每個系統寄存器。
AArch32,32位執行狀態:
· 提供13個32位通用寄存器,以及一個32位PC、SP和link寄存器(LR)。LR同時用作ELR和過程鏈接寄存器。其中一些寄存器具有多個存儲實例,用於不同的PE模式。
· 為從Hyp模式返回的異常提供一個ELR。
· 為高級SIMD向量和標量浮點支持提供32個64位寄存器。
· 提供兩個指令集,A32和T32。
· 支持基於PE模式的ARMv7-A異常模型,並將其映射到基於異常級別的ARMv8異常模型。
· 提供對32位虛擬尋址的支持。
· 定義許多包含PE狀態的進程狀態(PSTATE)元素。A32和T32指令集包括直接操作各種PSTATE元素的指令,以及使用應用程序狀態寄存器(APSR)或當前程序狀態寄存器(CPSR)訪問PSTATE的指令。
在AArch64和AArch32執行狀態之間轉移控制稱為互處理(interprocessing)。PE只能在異常級別發生變化時在執行狀態之間移動,並且必須遵守文中給出的規則。這意味著不同的軟件層,例如應用程序、操作系統內核和管理程序,在不同的異常級別執行,可以在不同的執行狀態中執行。
在ARMv8中,可能的指令集取決於執行狀態:
· AArch64狀態只支持一個名為A64的指令集。這是一個使用32位指令編碼的固定長度指令集。
· AArch32狀態支持以下指令集:
· A32,這是一個使用32位指令編碼的固定長度指令集。
· T32,這是一個可變長度的指令集,同時使用16位和32位指令編碼。在以前的文檔中,這些指令集被稱為ARM和Thumb指令集。ARMv8擴展了這些指令集。在AArch32狀態中,指令集狀態決定PE執行的指令集。
System registers
系統寄存器提供了體系結構特性的控制和狀態信息。
系統寄存器使用標準的命名格式:<register>.
位也可以通過<register>[x:y]或通用形式位[x:y]中的數字位置來描述。/<register>
此外,在AArch64狀態下,大多數寄存器名都包含最低的異常級別,可以將寄存器作為寄存器名的後綴訪問:<register>_ELx, where x is 0, 1, 2, or 3./<register>
The System registers 包含:
· General system control registers.
· Debug registers.
· Generic Timer registers.
· Optionally, Performance Monitor registers.
· Optionally, the Activity Monitors registers.
· 可選地,在其他ARM架構規範中定義的一組或多組寄存器:
· 跟蹤系統寄存器,如嵌入式跟蹤宏單元體系結構規範中定義的,ETMv4。
· 可伸縮向量擴展系統寄存器(Scalable Vector Extension System registers),定義在ARM®架構參考手冊補充,可伸縮向量擴展(SVE),用於ARMv8-A。
· 統計分析擴展系統寄存器,定義在ARM®架構參考手冊的補充,統計分析的擴展,為ARMv8-A。
· 通用中斷控制器(GIC)系統寄存器,
· RAS擴展系統寄存器,在ARM®可靠性(Reliability)、可用性(Availability)和可服務性(Serviceability)(RAS)中定義ARMv8規範,用於ARMv8- a架構配置文件。RAS擴展是對ARMv8.2體系結構的強制擴展,也是對ARMv8.0和ARMv8.1體系結構的可選擴展。
The ARM Generic Interrupt Controller System registers
從ARM通用中斷控制器體系結構GICv3的版本3開始,GIC體系結構規範定義了一個系統註冊接口來實現它的一些功能。
ARMv8 Debug
ARMv8支持以下功能:
· Self-hosted debug,在這個模型中,PE生成調試異常。調試異常是ARMv8的一部分異常模式。
· External debug,在這個模型中,調試事件導致PE進入調試狀態。在調試狀態下,PE由外部調試器控制。
所有的ARMv8實現都支持這兩個模型。特定用戶選擇的模型取決於產品設計和開發生命週期的不同階段的調試需求。例如,外部調試可能在硬件實現調試和操作系統啟動期間使用,而自託管調試可能在應用程序開發期間使用。
Supported data types
ARMv8架構支持以下整數數據類型:
· Byte 8 bits.
· Halfword 16 bits.
· Word 32 bits.
· Doubleword 64 bits.
· Quadword 128 bits.
該架構還支持以下浮點數據類型:
· Half-precision
· Single-precision
· Double-precision
它還支持:
· 定點解釋的詞和雙關詞
· 向量,其中一個寄存器包含多個元素,每個元素具有相同的數據類型。
ARMv8架構提供了兩個register文件:
· A general-purpose register file.
· A SIMD&FP register file.
在每種情況下,可能的寄存器寬度取決於執行狀態。
In AArch64 state:
· 通用寄存器文件包含64位寄存器:
· 許多指令可以以64位寄存器或32位寄存器的形式訪問這些寄存器,只使用底層的32位。
· 一個SIMD&FP寄存器文件包含128位寄存器:
· 四字整數數據類型只適用於SIMD&FP寄存器文件。
· 浮點數據類型只適用於SIMD&FP寄存器文件。
· 雖然AArch64向量寄存器支持128位向量,但根據使用的A64指令編碼,有效向量長度可以是64位或128位
In AArch32 state:
· 通用寄存器文件包含32位寄存器:
· 兩個32位寄存器可以支持一個雙字。
· 支持矢量格式
· 一個SIMD&FP寄存器文件包含64位寄存器:
· AArch32狀態不支持四字整數或浮點數據類型。
Vector formats
在包含對SIMD&FP寄存器文件進行操作的SIMD指令的實現中,寄存器可以容納一個或多個壓縮元素,所有元素的大小和類型都相同。寄存器和數據類型的組合描述了元素的向量。向量被認為是指令中指定的數據類型元素的數組。向量中的元素數量由數據元素的大小和寄存器的大小來表示。向量索引的範圍是0到(元素數量- 1)。索引為0表示向量的最小有效端。
Vector formats in AArch64 state
在AArch64狀態下,SIMD&FP寄存器可以稱為Vn,其中n是0到31之間的值。SIMD&FP寄存器支持加載、存儲和數據處理操作的三種數據格式:
· 寄存器中最小有效位的單個標量元素。
· 字節、半字或字元素的64位向量。
· 由字節、半字、字或雙字元素組成的128位向量。
元素大小定義在表中,向量格式描述如下:
· For a 128-bit vector: Vn{.2D, .4S, .8H, .16B}.
· For a 64-bit vector: Vn{.1D, .2S, .4H, .8B}.
ector formats in AArch32 state
每個指令描述都指定了指令支持的數據類型。
A
vanced SIMD and floating-point support
ARMv8可以支持以下高級SIMD和浮點指令的支持級別:
· 完全SIMD和浮點支持,沒有異常捕獲。
· 完整的SIMD和浮點支持與異常捕獲。
· 沒有浮點或SIMD支持。此選項僅授權用於針對特定市場的實現。
ARMv8支持單精度(32位)和雙精度(64位)浮點數據類型和IEEE 754浮點標準定義的算術。它還支持用於數據存儲的半精度(16位)浮點數據類型,支持單精度和半精度數據類型、雙精度和半精度數據類型之間的轉換。在實現ARMv8.2-FP16時,它還支持用於數據處理操作的半精度浮點數據類型。
SIMD指令提供打包的單指令多數據(SIMD)和單元素標量操作,並支持:
· AArch64狀態下的單精度和雙精度算法。
· 單精度算法僅在AArch32狀態下有效。
· 當ARMv8.2-FP16實現時,在AArch64和AArch32狀態下支持半精度算法。
The ARM memory model
ARM內存模型支持:
· 在未對齊的內存訪問上生成異常。
· 限制應用程序對指定內存區域的訪問。
· 將執行指令提供的虛擬地址(VA)轉換為物理地址(PA)。
· 在big-endian和little-endian之間改變對多字節數據的解釋。
· 控制訪問內存的順序。
· 控制緩存和地址轉換結構。
· 通過多個PEs同步訪問共享內存。
· 控制和阻止對內存的投機性訪問的屏障。
VA支持取決於執行狀態,具體如下:
AArch64 state
支持64位虛擬尋址,翻譯控制寄存器決定支持VA的範圍。在EL1和EL0上執行支持兩個獨立的VA範圍,每個範圍都有自己的翻譯控制。
AArch32 state
支持32位虛擬尋址,翻譯控制寄存器決定支持VA的範圍。為了在EL1和EL0上執行,系統軟件可以將VA範圍分成兩個子範圍,每個子範圍都有自己的翻譯控制。
所支持的PA空間是由實現定義的,可以由系統軟件發現。無論執行狀態如何,虛擬內存系統體系結構(VMSA)都可以將VAs轉換為PA空間中任何位置的內存塊或內存頁。
ARMv8 architecture extensions
最初的ARMv8-A架構稱為ARMv8.0。總結了ARMv8.0允許的擴展:
· ARMv8加密擴展
· 可靠性、可用性和可服務性(RAS)擴展
· 事件監視器
· IVIPT擴展
· 基於PC示例的概要分析擴展。
ARMv8.1架構擴展:
ARMv8.1體系結構擴展同時添加了以下兩個部分:
· 建築功能。有些是強制性的,有些是選擇性的。一些特性必須一起實現。
· 建築的要求。這些都是強制性的。
一個實現是ARMv8.1兼容時,所有下列應用:
· 它包含了所有必需的ARMv8.1架構特性。
· 它包含了所有的ARMv8.1架構需求。
ARMv8.2架構擴展
ARMv8.2體系結構擴展是對ARMv8.1的擴展。
ARMv8.3架構擴展
ARMv8.3體系結構擴展是對ARMv8.2的擴展。它添加了架構特性。有些是強制性的,有些是選擇性的。一些特性必須一起實現。
ARMv8.4架構擴展
ARMv8.4體系結構擴展是對ARMv8.3的擴展。它添加了架構特性。有些是強制性的,有些是選擇性的。一些特性必須一起實現。一個實現是ARMv8.4兼容的
統計分析擴展(SPE)
SPE是ARMv8.2的一個可選擴展。也就是說,SPE需要實現ARMv8.2。
可伸縮向量擴展(SVE)
SVE是ARMv8.2的可選擴展。也就是說,SVE需要實現ARMv8.2。
活動監視器擴展(AMU)
AMU是ARMv8.4的可選擴展。也就是說,AMU需要實施ARMv8.4。
內存分區和監視擴展(MPAM)
MPAM是ARMv8.2的一個可選擴展。也就是說,MPAM需要實現ARMv8.2。
ARMv8加密擴展
RMv8加密擴展提供了加速加密和解密的指令,幷包括以下特性:
· 包括AESD和AESE指令的ARMv8.0-AES。
· 包括SHA1*和SHA256*指令。
實現中的密碼擴展的存在受出口許可證控制的約束。密碼擴展是SIMD支持的擴展,對向量寄存器文件進行操作。
密碼擴展還提供了操作長多項式的乘法指令。
加密擴展在AArch64狀態和AArch32狀態中提供此功能,並且同時支持AArch64狀態和AArch32狀態的實現在這兩種狀態中提供相同的加密擴展功能。
對加密擴展的ARMv8.2擴展
在ARMv8.2中,ARMv8.0加密擴展的實現可以包括以下任何一個或兩個:
· AES功能,包括支持64位多項式的乘法。ID_AA64ISAR0_EL1.AES字段表示是否支持此功能。
· SHA1和SHA2-256的功能。ID_AA64ISAR0_EL1.{SHA2, SHA1}字段表示是否支持此功能。
此外,ARMv8.2向ARMv8加密擴展添加了兩個可選的擴展,它們僅在AArch64狀態下提供加密功能。這兩個可選的功能是:
ARMv8.2-SHA, SHA2-512 and SHA3 functionality
僅在A64指令集中,ARMv8.2-SHA添加了支持以下高級SIMD指令:
· SHA2-512 (SHA512).
· SHA3.
ARMv8.2-SM, SM3 and SM4 functionality
僅在A64指令集中,ARMv8.2-SM添加了支持中國密碼算法SM3和SM4的高級SIMD指令。ARMv8.2-SM的實現獨立於任何SHA功能的實現。ID_AA64ISAR0_EL1。{SM3, SM4}字段識別ARMv8.2-SM的存在。
閱讀更多 嵌入式ing 的文章