?
眾所周知,ARM是一家設計并授權處理器和相應IP(比如互連總線,中斷處理器,圖像處理器等等)的公司,目前其處理器產品分為三類:
Cortex-A系列:這個系列主要是應用(Application)處理器,這類處理器的特點是高性能,一般支持高速緩存,亂序執行,分支預測,指令多發射等等技術。
Cortex-R系列:這個系列主要是實時(Real-time)處理器,這類處理器的特點是對于外部事件的響應時間在可控范圍,這里的實時并不是說處理器的速度快,而是對外部事件的響應時間可預測。
Cortex-M系列:這個系列主要是微控制(Micro-controller)處理器,這類處理器一般設計相對簡單,芯片規模小,功耗值低,一般作為低成本芯片的控制器使用。
這三個系列的代表字母加起來剛好是ARM,所以這應該是ARM公司故意為之的。其實ARM公司的處理器產品在很早的時候并不是這么命名的,比如很早之前的ARM9,ARM11。現在ARM的處理器產品又增加了Neoverse系列,與A系列的處理器區分開來,不過這都是后話,暫時不用管它,還是認為是三個系列好了。
再返回來說Armv8.x-A,前綴Arm不用解釋了;v表示的是版本(version);8表示的是大版本號;x表示的是擴展版本號,也稱為小版本號,比如8.4就是大版本是8,擴展版本是4,Armv8-A的基礎版本是Armv8.0-A;最后的A表示的是A系列,所以一定還有R和M對不?不過本人對于R和M了解很少,就不介紹了,后面的內容都是以A為基礎。
Armv8-A的執行狀態有兩種,AArch64和AArch32。相應的Armv8-A支持兩種指令集:AArch64(A64)和AArch32,其中AArch32又分為A32和T32。A64是固定長度指令集,指令編碼32-bit;A32同樣是固定長度指令集,32-bit指令編碼;T32是變長指令集,16-bit和32-bit指令編碼。由于A32和T32主要是為了向前兼容,在Armv8-A中實際應用較少,后面內容基本都是介紹AArch64的相關內容。
AArch64中擴展了一些寄存器,包括以下:31個通用的64位寄存器 (X0-X30),處理器狀態寄存器PSTATE及相關的若干寄存器,堆棧寄存器SP等等。以后會找時間專門分析一下這些寄存器。
Armv8-A中定義了四種異常等級(Exception Level),這在前面的文章中重復過很多次了。
Armv8-A支持GICv3,GICv4,SMMU3。
對于其處理器具體實現的指令集,ARM有一個約定,比如某個處理器實現了Armv8.1-A,那么該處理器:
必須實現Armv8.0-A和Armv8.1-A強制要求的功能
可以實現某些Armv8.2-A中擴展的功能
不允許實現Armv8.3-A和更高版本擴展的功能
對于Armv8.0-A要求的功能,以后有機會慢慢分析。這不是一朝一夕能完成的,畢竟單其架構文檔已經上萬頁了。今天先簡單列一下Armv8.0-A以后的版本所擴展的功能,后面我們再慢慢分析Armv8.0-A的基礎功能和這些擴展功能。
1. Armv8.1-A
Atomic memory access instructions (AArch64)
Limited Order regions (AArch64)
Increased Virtual Machine Identifier (VMID) size, and VirtualizationHost Extensions (AArch64)
Privileged Access Never (PAN) (AArch32 and AArch64)
2. Armv8.2-A
Support for 52-bit addresses (AArch64)
The ability for PEs to share Translation Lookaside Buffer (TLB)entries (AArch32 and AArch64)
FP16 data processing instructions (AArch32 and AArch64)
Statistical profiling (AArch64)
Reliability Availability Serviceability (RAS) support becomesmandatory (AArch32 and AArch64)
3. Armv8.3-A
Pointer authentication (AArch64)
Nested virtualization (AArch64)
Advanced Single Instruction Multiple Data (SIMD) complex numbersupport (AArch32 and AArch64)
Improved JavaScript data type conversion support (AArch32 andAArch64)
A change to the memory consistency model (AArch64)
ID mechanism support for larger system-visible caches (AArch32 andAArch64)
4. Armv8.4-A
Secure virtualization (AArch64)
Nested virtualization enhancements (AArch64)
Small translation table support (AArch64)
Relaxed alignment restrictions (AArch32 and AArch64)
Memory Partitioning and Monitoring (MPAM) (AArch32 and AArch64)
Additional crypto support (AArch32 and AArch64)
Generic counter scaling (AArch32 and AArch64)
Instructions to accelerate SHA
5. Armv8.5-A and Armv9.0-A
Memory Tagging (AArch64)
Branch Target Identification (AArch64)
Random Number Generator instructions (AArch64)
Cache Clean to Point of Deep Persistence (AArch64)
6. Armv8.6-A and Armv9.1-A
General Matrix Multiply (GEMM) instructions (AArch64)
Fine grained traps for virtualization (AArch64)
High precision Generic Timer
Data Gathering Hint (AArch64)
7. Armv8.7-A and Armv9.2-A
Enhanced support for PCIe hot plug (AArch64)
Atomic 64-byte load and stores to accelerators (AArch64)
Wait For Instruction (WFI) and Wait For Event (WFE) with timeout(AArch64)
Branch-Record recording (Armv9.2 only)
5.8 Armv8.8-A and Armv9.3-A
Non-maskable interrupts (AArch64)
Instructions to optimize memcpy() and memset() style operations(AArch64)
Enhancements to PAC (AArch64)
Hinted conditional branches
Armv9-A是ARM公司最新的架構,但是目前還沒有完全公開。
最后提一句,現在基于ARM處理器的多核服務器芯片設計正火,國內外玩家越來越多。ARM公司推出了Server Base SystemArchitecture(SBSA)規范,提出了服務器的硬件要求。下表總結了與Armv8.x-A相關的SBSA要求。
SBSA文檔是公開的,感興趣的朋友可以去官網下載。目前我看到的SBSA文檔版本是7.0,在2021年1月發布。
其實SBSA中就是規定了一些規則(rule),對于不同等級有不同的要求。下圖是SBSA的不同等級對處理器,SMMU和GIC的要求,可以與上一張圖結合看。
審核編輯:湯梓紅
?
評論
查看更多