1. 前言
本文主要概括的介紹ARMV8體系結構定義了哪些內容,概括的說:
- ARM體系結構定義了PE的行為,不會定義具體的實現
- ARM體系結構也定義了debug體系結構和trace體系結構
- ARM體系結構采用RISC指令集
(1)長度一致的寄存器;
(2)load/store架構,數據處理操作只能對寄存器內容進行處理,不會直接對內存的內容進行處理;
(3)簡單尋址方式,load/store地址來源於寄存器或指令域(如立即數)
- ARM體系結構定義了PE與存儲系統的交互
- ARMV8體系結構向后兼容,支持AArch64和AArch32,兩種運行狀態均支持SIMD和浮點指令
(1) AArch32
SIMD指令,用來操作32 bit 通用寄存器;
Advanced SIMD指令操作SIMD&FP寄存器;
FP指令操作SIMD&FP寄存器
(2) AArch64
Advanced SIMD指令操作SIMD&FP寄存器;
FP指令操作SIMD&FP寄存器
2. ARMV8按屬性分類
| 屬性 |
說明 |
| A(Application profile) |
基於MMU(內存管理單元)支持VMSA(虛擬內存系統架構); 支持A64/A32/T32指令集 |
| R(Real-time profile) |
基於MPU(內存保護單元)支持PMSA(受保護的內存系統架構); 支持A32/T32指令集; |
| M(Microcontroller profile) |
實現了低延遲中斷處理,硬件寄存器棧,支持高級語言寫中斷處理; 實現了PMSA的變種; 實現了T32指令集的變種 |
| 注:debug體系結構完全與ARM體系結構集成在一起,沒有獨立的版本,當前只實現了A-profile |
|
表 ARMV8分類
3. ARMV8體系結構概念
- Execution State
包括AArch64和AArch32兩種運行狀態;
兩種運行狀態的區別:
支持的寄存器寬度不同;
支持的指令集不同;
異常級別;
VMSA;
編程模型
- 指令集
AArch64只支持A64指令集,固定長度為32bit;
AArch32支持A32和T32兩種指令集,A32使用固定長度為32bit,T32使用可變16bit和32bit.
- 系統寄存器
(1)控制處理器狀態,並顯示處理器狀態;
(2)使用標准的命名格式<register_name>.<bit_field_name>來操作寄存器的某一位,也可以<register_name>[x:y]的格式描述;
(3)大部分寄存器有后綴來表示所能訪問的最低異常級別:<register_name>_ELx, where x is 0, 1, 2, or 3.
(4)系統寄存器包括:
• General system control registers.
• Debug registers.
• Generic Timer registers.
• Optionally, Performance Monitor registers.
• Optionally, Trace registers.
• Optionally, Generic Interrupt Controller (GIC) CPU interface registers.
- DEBUG
(1) Self-hosted debug
In this model, the PE generates debug exceptions. Debug exceptions are part of the ARMv8 Exception model.一般應用於應用開發
(2) External debug
In this model, debug events cause the PE to enter Debug state. In Debug state the PE is controlled by an external debugger.
一般用於硬件實現和OS系統
4. 支持的數據類型
| 數據類型 |
詳細分類 |
長度 |
| 整形數據類型 |
Byte |
8 bits. |
| Halfword. |
16 bits |
|
| Word |
32 bits. |
|
| Doubleword |
64 bits. |
|
| Quadword |
128 bits. |
|
| 浮點數據類型 |
Half-precison |
|
| Single-precision |
|
|
| Double-precision |
|
|
| 其他 |
Fixed-point interpretation of words and doublewords |
|
| Vectors |
|
表 ARMV8支持的數據類型
ARMV8支持的數據類型和寄存器寬度具有如下表所示的關系:
| excute state |
寄存器寬度 |
說明 |
| AArch32 |
32bit通用功能寄存器 |
兩個32bit寄存器可以支持doubleword,支持vector數據類型 |
| 64bit SIMD&FP寄存器
|
兩個64bit寄存器可以用作128bit寄存器使用不支持quardword integer或浮點數據類型 |
|
| AArch64 |
64bit通用功能寄存器 |
很多指令可以訪問64bit寄存器的32bit或64bit |
| 128bit SIMD&FP寄存器 |
Quardword integer只能使用SIMD&FP寄存器; 浮點數據類型只能使用SIMD&FP寄存器; 根據A64指令編碼不同,可以使用64bits或128bits長度 |
表 ARMV8支持的數據類型與寄存器寬度的關系
5. 浮點和Advanced SIMD支持
TODO
6. 加密擴展
TODO
7.ARM存儲模型
- ARM存儲模型支持的特性
(1)非對齊的內存地址訪問會產生異常
(2)限制Application訪問特定的內存區域
(3)通過指令將虛擬地址轉換為物理地址
(4)對多字節數據進行大小端轉換
(5)控制訪問內存的順序
(6)控制caches和地址轉換結構???
(7)同步多個PE訪問的共享內存
- 虛擬地址支持的特性
(1)AArch64
支持64bit虛擬地址,Translation Control Register決定支持的VA范圍.
EL0和EL1支持兩種獨立的虛擬地址范圍,有各自獨立的轉換控制邏輯
(2)AArch32
支持32bit虛擬地址,Translation Control Register決定支持的VA范圍.
EL0和EL1,系統軟件可以將VA分割成兩個獨立的子范圍???,有各自獨立的轉換控制邏輯
(3)無論是AArch32還是AArch64,VMSA都可以將VA轉換為物理地址空間的block或page
8. 參考文檔
[1] DDI0487A_k_armv8_arm_iss10775.pdf
