一文深入搞懂ARM處理器架構
1、嵌入式處理器基礎
典型的微處理器由控制單元、程序計數(shù)器(PC)、指令寄存器(IR)、數(shù)據(jù)通道、存儲器等組成 。
指令執(zhí)行過程一般分為:

取指:
從存儲器中獲得下一條執(zhí)行的指令讀入指令寄存器;
PC: 程序計數(shù)器, 總是指向下一條將要執(zhí)行的指令;
IR: 指令寄存器,用于保持已取得指令;如圖:

譯碼:
解釋指令,決定指令的執(zhí)行意義;如圖:

執(zhí)行:
從存儲器向數(shù)據(jù)通道寄存器移動數(shù)據(jù);
通過算術邏輯單元ALU進行數(shù)據(jù)操作;如圖:

存儲:
從寄存器向存儲器寫數(shù)據(jù)。如圖:

在一些微處理器上,如ARM系列處理器、DSP等,指令實現(xiàn)流水線作業(yè),指令過程按流水線的數(shù)目來進行劃分。如5級流水線的處理器將指令分5個階段執(zhí)行。?
(1)按存儲結構分:馮·諾依曼體系結構和哈佛體系結構?
馮·諾伊曼結構也稱普林斯頓結構,是一種將程序指令存儲器和數(shù)據(jù)存儲器合并在一起的存儲器結構。
處理器,經(jīng)由同一個總線傳輸來訪問程序和數(shù)據(jù)存儲器,程序指令和數(shù)據(jù)的寬度相同。如X86系列、ARM7等,如圖:

哈佛結構是一種將程序指令存儲和數(shù)據(jù)存儲分開的存儲器結構,目的是為了減輕程序運行時的訪存瓶頸。哈佛結構的微處理器通常具有較高的執(zhí)行效率。
Microchip公司的PIC系列芯片,摩托羅拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和ARM公司的ARM9、ARM10和ARM11
等。如圖:

按指令類型可分為:復雜指令集(CISC)處理器和精簡指令集(RISC)處理器 。
CISC:復雜指令集(Complex Instru
ction Set Computer);
具有大量的指令和尋址方式,那么就需要更多的解釋器。
8/2原則:80%的程序只使用20%的指令;
大多數(shù)程序只使用少量的指令就能夠運行。
CISC具有如下顯著特點:
(1) 指令格式不固定,指令長度不一致,操作數(shù)可多可少;
(2) 尋址方式復雜多樣,以利于程序的編寫;
(3) 采用微程序結構,執(zhí)行每條指令均需完成一個微指令序列;
(4) 每條指令需要若干個機器周期才能完成,指令越復雜,花費的機器周期越多。
RISC:精簡指令集(Reduced Instruction Set Computer):指令數(shù)目少,在通道中只包含最有用的指令;執(zhí)行時間短,確保數(shù)據(jù)通道快速執(zhí)行每一條指令;使CPU硬件結構設計變得更為簡單;每條指令都采用標準字長。

【文章福利】小編推薦自己的Linux內核技術交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ??


零聲白金VIP體驗卡(含基礎架構/高性能存儲/golang/QT/音視頻/Linux內核)課程:

2、ARM處理器體系架構
ARM即Advanced RISC Machines的縮寫。
1985年4月26日,第一個ARM原型在英國劍橋的Acorn計算機有限公司誕生。
20世紀80年代后期,ARM很快開發(fā)成Acorn的臺式機產品,形成英國的計算機教育基礎。
1990年成立了Advanced ?RISC Machines Limited。
20世紀90年代,ARM32位嵌人式RISC(Reduced Instruction Set Computer)處理器擴展到世界范圍,占據(jù)了低功耗、低成本和高性能的嵌入式系統(tǒng)應用領域的領先地位。
目前己經(jīng)占有75%以上的32位嵌入式產品市場。
32位RISC處理器受到青睞,領先的是ARM嵌入式微處理器系列。
ARM公司雖然只成立20多年,但在1999年因移動電話火爆市場,其32位RISC處理器占市場份額超過了50%,2001年初,ARM公司的32位RISC處理器市場占有率超過了75%。ARM公司是知識產權供應商,是設計公司。由合作伙伴公司來生產各具特色的芯片。
ARM處理器特點:
(1)ARM指令是32位定長的(除AArch64架構部分增加指令為64位外)
(2)寄存器數(shù)量豐富(37個寄存器)
(3)普通的Load/Store指令
(4)多寄存器的Load/Store指令
(5)指令的條件執(zhí)行
(6)單時鐘周期中的單條指令完成數(shù)據(jù)移位操作和ALU操作
(7)通過變種和協(xié)處理器來擴展ARM處理器的功能
(8)擴展了16位的Thumb指令來提高代碼密度
ARM的命名規(guī)則, 大致分成兩類類:
基于ARM Architecture版本的“處理器系列”命名規(guī)則;
基于ARM Architecture版本的“處理器型號”命名規(guī)則。



ARMv6 架構,引進了包括單指令多數(shù)據(jù)(SIMD)運算在內的一系列新功能。
ARMv6-M 架構,為低成本、高性能設備而設計,向以前由8位設備占主導地位的市場提供32位功能強大的解決方案。如Cortex?-M0和Cortex-M1。
ARMv7架構,所有ARMv7架構處理器都實現(xiàn)了Thumb-2 技術(一個經(jīng)過優(yōu)化的16/32位混合指令集),此架構分為3類處理器:Cortex-A -應用處理器、Cortex-R - 實時處理器、Cortex-M - 微控制器。
ARMv8架構,ARMv8-A將64位體系結構支持引入ARM體系結構中,其中包括:64位通用寄存器、SP(堆棧指針)和 PC(程序計數(shù)器),64位數(shù)據(jù)處理和擴展的虛擬尋址,兼容32位處理。
ARMv9架構,最重大的升級在于AI和安全,在兼容ARMv8的基礎上,提升了安全性,增加了矢量計算、機器學習和數(shù)據(jù)信號處理等多方面能力,性能表現(xiàn)也將得到極大幅度的提升。
1)ARM數(shù)據(jù)類型
(1)雙字節(jié)(Double-Word):64位
(2)字(Word):在ARM體系結構中,字的長度為32位。
(3)半字(Half-Word):在ARM體系結構中,半字的長度為16位。
(4)字節(jié)(Byte):在ARM體系結構中,字節(jié)的長度為8位。
2)ARM處理器存儲格式
作為32位的微處理器,ARM體系結構所支持的最大尋址空間為4GB。
ARM體系結構可以用兩種方法存儲字數(shù)據(jù),分別為大端模式和小端模式。
大端模式(高地高低):字的高字節(jié)存儲在低地址字節(jié)單元中,字的低字節(jié)存儲在高地址字節(jié)單元中。

3)ARM處理器工作狀態(tài)
從編程的角度來看,ARM微處理器的工作狀態(tài)一般ARM和Thumb有兩種,并可在兩種狀態(tài)之間切換。
(1)ARM狀態(tài):此時處理器執(zhí)行32位的字對齊ARM指令,絕大部分工作在此狀態(tài)。
(2)Thumb狀態(tài):此時處理器執(zhí)行16位的半字對齊的Thumb指令。
THUMB指令的特點:
THUMB代碼所需空間為ARM代碼的70%;
THUMB代碼所使用的指令數(shù)比ARM代碼多40%;
用32位存儲器,ARM代碼比THUMB代碼快40%;
用16位存儲器,THUMB代碼比ARM代碼快45%;
使用THUMB代碼,外部存儲器功耗比ARM代碼少30%
4)ARM處理器工作模式

5)ARM Cortex-A處理器工作模式

6) Cortex-A寄存器組
34個通用寄存器,包括各種模式下的R0-R14和共用的R15程序計數(shù)器(PC),這些寄存器都是32位的。8個狀態(tài)寄存器,Hyp模式獨有一個ELR_Hyp寄存器。

7)程序狀態(tài)寄存器CPSR和SPSR
和其他處理器一樣,ARM有程序狀態(tài)存儲器來配置處理器工作模式和顯示工作狀態(tài)。ARM處理器有兩個程序狀態(tài)寄存器CPSR (Current Program Status Register,當前程序狀態(tài)寄存器)和SPSR (Saved Program Status Register,備份的程序狀態(tài)寄存器)。
CPSR可在任何運行模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位以及其他一些相關的控制和狀態(tài)位。
每一種運行模式下都有一個專用的物理狀態(tài)寄存器,稱為SPSR為狀態(tài)寄存器。

(1)N(Negative):當用兩個補碼表示的帶符號數(shù)進行運算時,N=1表示結果為負,N=0表示結果為正數(shù)或零
(2)Z(Zero):Z=1表示運算結果為0,Z=0表示運算結果非零
(3)C(Carry):有4種方法可以設置C的值:
1)加法指令(包括比較指令CMP)
2)當運算產生進位時(無符號數(shù)溢出),C=1,否則C=0
3)減法運算(包括比較指令CMP)
4)當運算產生了借位(無符號數(shù)溢出),C=0,否則C=1
對于包含移位操作的非加/減運算指令,C為移出值的最后一位。對于其他的非加/減運算指令,C的值通常不變。
(4)V(Overflow):有2種方法設置V的值:
1)對于加/減法運算指令,當操作數(shù)和運算結果為二進制的補碼表示的帶符號數(shù)時,V=1表示符號位溢出。
2)對于其他的非加減法運算指令,V的值通常不變。
(5)I(Interrupt Request):I=1表示禁止響應irq,I=0表示允許響應
(6)F(Fast Interrupt Request):F=1表示禁止響應fiq,F(xiàn)=0表示允許響應
(7)T(Thumb):T=0表示當前狀態(tài)位ARM狀態(tài),T=1表示為Thumb狀態(tài)
(8)M4-M0:表示當前處理器的工作模式

8)工作模式的切換條件
(1)執(zhí)行軟中斷(SWI)或復位命令(Reset)指令。如果在用戶模式下執(zhí)行SWI指令,CPU就進入管理(Supervisor)模式。
(2)有外部中斷發(fā)生。如果發(fā)生了外部中斷,CPU就會進入IRQ或FIQ模式。
(3)CPU執(zhí)行過程中產生異常。最典型的異常是由于MMU保護所引起的內存訪問異常,此時CPU會切換到Abort模式。如果是無效指令,則會進入Undefined模式。
(4)有一種模式是CPU無法自動進入的,這種模式就是System模式,要進入System模式必須由程序員編寫指令來實現(xiàn)。要進入System模式只需改變CPSR的模式位為System模式對應的模式位即可。
(5)在任何特權模式下,都可以通過修改CPSR的MODE域來進入其他模式。不過需要注意的是由于修改的CPSR是該模式下的影子CPSR,即SPSR,因此并不是實際的CPSR,所以一般的做法是修改影子CPSR,然后執(zhí)行一個MOVS指令來恢復執(zhí)行某個斷點并切換到新模式。
3、ARM處理器內存管理
1)什么是內存映射
內存映射指的是在ARM存儲系統(tǒng)中,使用內存管理單元(MMU)實現(xiàn)虛擬地址到實際物理地址的映射,如圖所示。

2)為什么要內存映射
A32架構的ARM的地址總線為32位,故CPU可尋址范圍為0x00000000~0xffffffff尋址空間為4GB,所有的內部和外部存儲或者外設單元都需要通過對應的地址來操作,不同芯片外設的種類數(shù)量尋址空間都不一樣,為了能讓內核更方便的管理不同的芯片設計,ARM內核會先給出預定義的存儲映射。
芯片設計公司需要根據(jù)內核提供的預定義的存儲器映射來定義芯片內部外設和外部的保留接口,這樣做的好處是極大地減少了同一內核不同芯片間地址轉化的麻煩(CPU操作統(tǒng)一的虛擬地址,實際物理地址交由MMU管理)。

3)位帶操作
(1)什么是位帶操作
舉個簡單的例子,在使用51單片機操作P1.0為低電平時我們知道這背后實際上就是往某個寄存器某個比特位中寫1或0的過程,但在CPU操作的過程中每一個地址所對應的都是一個8位字節(jié),怎么實現(xiàn)對其中某一位的直接操作,這就需要位帶操作的幫助。
(2)哪些地址可以進行位帶操作
上圖中有兩個區(qū)中實現(xiàn)了位帶。其中一個是 SRAM 區(qū)的最低 1MB 范圍(Bit band region),第二個則是片內外設區(qū)的最低 1MB 范圍。
4)寄存器的地址計算
在ARM中所有的外設地址基本都是掛載在AHB或者APBx總線上,因此我們往往采用基地址+偏移地址+結構體的方式,來快速明了計算某一外設具體寄存器的地址,如圖所示。

5)集成外設寄存器訪問方法

原文作者:面包板社區(qū)
