?
眾所周知,ARM是一家設(shè)計并授權(quán)處理器和相應(yīng)IP(比如互連總線,中斷處理器,圖像處理器等等)的公司,目前其處理器產(chǎn)品分為三類:
Cortex-A系列:這個系列主要是應(yīng)用(Application)處理器,這類處理器的特點是高性能,一般支持高速緩存,亂序執(zhí)行,分支預(yù)測,指令多發(fā)射等等技術(shù)。
Cortex-R系列:這個系列主要是實時(Real-time)處理器,這類處理器的特點是對于外部事件的響應(yīng)時間在可控范圍,這里的實時并不是說處理器的速度快,而是對外部事件的響應(yīng)時間可預(yù)測。
Cortex-M系列:這個系列主要是微控制(Micro-controller)處理器,這類處理器一般設(shè)計相對簡單,芯片規(guī)模小,功耗值低,一般作為低成本芯片的控制器使用。
這三個系列的代表字母加起來剛好是ARM,所以這應(yīng)該是ARM公司故意為之的。其實ARM公司的處理器產(chǎn)品在很早的時候并不是這么命名的,比如很早之前的ARM9,ARM11。現(xiàn)在ARM的處理器產(chǎn)品又增加了Neoverse系列,與A系列的處理器區(qū)分開來,不過這都是后話,暫時不用管它,還是認(rèn)為是三個系列好了。
再返回來說Armv8.x-A,前綴Arm不用解釋了;v表示的是版本(version);8表示的是大版本號;x表示的是擴(kuò)展版本號,也稱為小版本號,比如8.4就是大版本是8,擴(kuò)展版本是4,Armv8-A的基礎(chǔ)版本是Armv8.0-A;最后的A表示的是A系列,所以一定還有R和M對不?不過本人對于R和M了解很少,就不介紹了,后面的內(nèi)容都是以A為基礎(chǔ)。
Armv8-A的執(zhí)行狀態(tài)有兩種,AArch64和AArch32。相應(yīng)的Armv8-A支持兩種指令集:AArch64(A64)和AArch32,其中AArch32又分為A32和T32。A64是固定長度指令集,指令編碼32-bit;A32同樣是固定長度指令集,32-bit指令編碼;T32是變長指令集,16-bit和32-bit指令編碼。由于A32和T32主要是為了向前兼容,在Armv8-A中實際應(yīng)用較少,后面內(nèi)容基本都是介紹AArch64的相關(guān)內(nèi)容。
AArch64中擴(kuò)展了一些寄存器,包括以下:31個通用的64位寄存器 (X0-X30),處理器狀態(tài)寄存器PSTATE及相關(guān)的若干寄存器,堆棧寄存器SP等等。以后會找時間專門分析一下這些寄存器。
Armv8-A中定義了四種異常等級(Exception Level),這在前面的文章中重復(fù)過很多次了。
Armv8-A支持GICv3,GICv4,SMMU3。
對于其處理器具體實現(xiàn)的指令集,ARM有一個約定,比如某個處理器實現(xiàn)了Armv8.1-A,那么該處理器:
必須實現(xiàn)Armv8.0-A和Armv8.1-A強(qiáng)制要求的功能
可以實現(xiàn)某些Armv8.2-A中擴(kuò)展的功能
不允許實現(xiàn)Armv8.3-A和更高版本擴(kuò)展的功能
對于Armv8.0-A要求的功能,以后有機(jī)會慢慢分析。這不是一朝一夕能完成的,畢竟單其架構(gòu)文檔已經(jīng)上萬頁了。今天先簡單列一下Armv8.0-A以后的版本所擴(kuò)展的功能,后面我們再慢慢分析Armv8.0-A的基礎(chǔ)功能和這些擴(kuò)展功能。
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公司最新的架構(gòu),但是目前還沒有完全公開。
最后提一句,現(xiàn)在基于ARM處理器的多核服務(wù)器芯片設(shè)計正火,國內(nèi)外玩家越來越多。ARM公司推出了Server Base SystemArchitecture(SBSA)規(guī)范,提出了服務(wù)器的硬件要求。下表總結(jié)了與Armv8.x-A相關(guān)的SBSA要求。
SBSA文檔是公開的,感興趣的朋友可以去官網(wǎng)下載。目前我看到的SBSA文檔版本是7.0,在2021年1月發(fā)布。
其實SBSA中就是規(guī)定了一些規(guī)則(rule),對于不同等級有不同的要求。下圖是SBSA的不同等級對處理器,SMMU和GIC的要求,可以與上一張圖結(jié)合看。
審核編輯:湯梓紅
?
評論
查看更多