主板——核心板+擴展電路+接口
核心板——cpu+外圍電路+接口
arm體系結構知識點:
核心(內核)編程方法
接口(外圍模塊)技術
芯片價格:摩爾定律,十八個月翻一倍。十八個月之后價格降一半。
現在芯片電路:用硬件描述語言設計。
芯片生產商:買的arm公司的芯片的硬件描述語言的程序設計的內核,加一些外圍模塊。
內核是統一的,外圍是各自為戰。
arm:Advanced RISC Machines
arm公司網址:http://www.arm.com
arm不僅是一家公司還是一類微處理器的統稱,基于arm內核的芯片統稱為arm芯片。
------------------------------------------------------------------------------------------------------------------
arm體系結構
------------------------------------------------------
arm體系結構特點:
arm指令都是32位定長的;
大量的寄存器(37個寄存器);
Load/Store體系結構;
多寄存器的Load/Store指令;
指令的條件執行;
在單時鐘周期執行的單條指令中完成數據移位操作和ALU操作;
通過變種和協處理來擴展ARM處理器的功能;
擴展了16位的Thumb指令來提高代碼密度。
-------------------------------------------------------
arm系列的命名:
ARM1系列:
架構:ARMv1(內核ARM1)
ARM2系列:
架構:ARMv2(內核ARM2)
ARMv2a系列:
架構:ARM250
ARM3系列:
架構:ARMv2a(內核ARM2a)
ARM6系列:
架構:ARMv3(內核ARM610)
----------------
ARM7TDMI系列:三級流水
架構:ARMv4T
ARM9TDMI系列:五級流水
架構:ARMv4T
-------------------
ARM9E系列:
架構:ARMv5
ARM10E系列:六級流水
架構:ARMv5
XScale系列:
架構:ARMv5TE
------------------
ARM11系列:八級流水
架構:ARMv6(內核:ARM1136J(F)-S);
架構:ARMv6T2(內核:ARM1156T2(F)-S);
架構:ARMv6KZ(內核:ARM1176JZ(F)-S);
架構:ARMv6K(內核:ARM11MPCore);
------------------
Cortex系列:13級流水
架構:ARMv7-A(Application)(內核:Cortex-A8):面向使用復雜操作系統及用戶應用的應用處理器。
架構:ARMv7-R(Real-time)(內核:Cortex-R4(F)):適用于實時系統的嵌入式處理器。
架構:ARMv7-M(Microcontroller)(內核:Cortex-M3):為對成本和功耗敏感的嵌入式應用而設計的,目標是以8位單片機的價格實現32位的高性能。
arm體系結構的變種:
Thumb指令集(T變種):指令長度16位。
長乘法指令(M變種):
增強型DSP指令(E變種):
Java加速器Jazelle(J變種):
arm處理器命名格式:
ARM x y z T D M I E J F -S
x:序列
y:2:帶MMU, 4帶MPU,6沒有
z:0:標準cache,2:減小的cache, 6可變的cache
T:處理器支持Thumb指令集
D:支持JTAG調試器
M:支持長乘法指令
I:有嵌入式跟蹤宏單元
E:支持增強指令(基于TDMI)
J:支持JAVA硬件加速(Jazelle)
F:支持向量浮點單元
S:可綜合版本
-------------------------------------------------------
arm指令流水:
取指Fetch:微處理器取指單元從存儲器中取得要執行的指令,存儲到指令寄存器中。
譯碼Decode:對指令寄存器中的指令進行分析,確定要進行什么操作。
執行Execute:執行指令規定的操作,并按指令的要求保存操作結果。
馮諾依曼結構:指令存儲器地址和數據存儲器地址指向同一個存儲器的不同物理位置。因此指令和數據使用同一條數據總線,同一時刻只能取指或取數據。
哈佛結構:指令總線和數據總線分開,可以同時訪問,其寬度可也可以不同。
三級流水:fetch decode execute
五級流水:fetch decode execute memory write
五級流水的流水線級:
取指(fetch)
譯碼(decode)
執行(excute)
緩沖/數據(buffer/data):如果需要則訪問數據存儲器,否則ALU只是簡單的緩沖一個時鐘周期,以便使所有的指令具有同樣的流水線流程。
回寫(write-back):將指令的結果回寫到寄存器堆,包括任何從寄存器讀出的數據。
------------------------------------------------------------
arm存儲系統
arm存儲有兩種方式:大端,小端。
大端格式:字的最低有效字節存放在存儲器的高地址。
小端字節:字的最低有效字節存放在存儲器的低地址。
arm默認小端模式。
注意:數據和代碼在存儲器中的存儲格式要和處理器采用的格式一致。
arm存儲器層次:
寄存器組;
片上ram;
片上cache;
主存儲器。
arm體系結構中可以使用的存儲管理策略包括:
多類型存儲單元;
cache;
寫緩存;
虛擬內存地址。
實現存儲系統管理的方法:
使能cache,加快存儲器的訪問速度;
啟動虛擬地址到物理地址的映射;
使用“域管理”策略,對存儲單元的訪問進行保護;
對i/o映射地址空間的訪問加以限制;
協處理器cp15。
arm微處理器有37個32位的寄存器。
------------------------------------------------------------------
arm芯片選型
芯片自身性能與集成度方面的因素:
有無MMU;
芯片效率;
內部存儲器容量;
USB接口;
GPIO數量;
中斷控制器;
IIS(Integrate Interface of Sound);
nWAIT信號;
RTC(Real Time Clock);
LCD控制器;
PWM輸出;
ADC/DAC;
擴展總線;
UART和IrDA;
多核考慮(ARM+DSP)(ARM+ARM);
內置FPGA;
時鐘計數器和看門狗;
電源管理;
DMA控制器;
芯片穩定性;
芯片供應商的技術支持能力;
芯片的供貨的穩定性和采購的方便性;
---------------------------------------------------------------------------------------------------------------------
arm編程模型(內核編程)
----------------------------------------------------------
arm的數據類型:
arm支持以下三種數據類型:
字節:8位
半字:16位
字 :32位
-------------------------------------------------------
arm的工作模式:
arm有七種工作模式:
兩個正常模式:
用戶模式(User):普通程序執行模式,大部分程序執行在這種模式下。
系統模式(System):使用和User模式相同寄存器集的特權模式。
五個異常模式:
快速中斷模式(FIQ):當一個高優先級(fast)中斷產生時將會進入這種模式。
外部中斷模式(IRQ):當一個低優先級(normal)中斷產生時將會進入這種模式。
管理模式(Supervisor):當復位或軟中斷(SWI)指令執行時進入這種模式。
數據訪問終止模式(Abort):當存取異常時將會進入這種模式,用于虛擬存儲或存儲保護。
未定義模式(Undef):當執行未定義指令時進入這種模式,有時用于通過軟件仿真協處理器硬件的工作模式。
一個非特權模式:
用戶模式(User)
六個特權模式:
系統模式(System)
快速中斷模式(FIQ)
外部中斷模式(IRQ)
管理模式(Supervisor)
數據訪問終止模式(Abort)
未定義模式(Undef)
------------------------------------------------------
arm運行狀態
arm處理器有兩種工作狀態:
ARM狀態:arm狀態執行arm指令,pc值字對齊(32位)。
Thumb狀態:thumb狀態下執行thumb指令,pc值半字對齊(16位)。
工作狀態的切換:
使用指令切換
BX Rm
Rm[0] = 0 ARM狀態
Rm[0] = 1 Thumb狀態
處理器自動切換
處理器進行異常處理,若在Thumb狀態,則進入ARM狀態,異常處理返回后進入Thumb狀態。
--------------------------------------------------------------
arm寄存器
ARM處理器有37個32位長的寄存器;
31個通用寄存器(16個公共+15個私有);
6個狀態寄存器;
不同模式下能訪問的寄存器是不一樣的。
----------------
通用寄存器:參與運算或保存運算的結果。
以下有16個公共寄存器:
usr/system:R0——R12,R13,R14,R15.(在用戶模式和系統模式下有16個公用寄存器)。
有特殊用途的通用寄存器(除了做通用寄存器,還有以下功能):
R13:堆棧指針寄存器SP。
R14:鏈接寄存器LR。一般用來表示程序的出口。
R15:程序計數器PC,永遠指向取指的指令地址。一般用來表示程序的入口。
以下有15個私有寄存器:
irq:R0......R12,R15.(外部中斷模式有兩個私有的寄存器)
R13_irq
R14_irq
svc:R0......R12,R15.(管理模式有兩個私有的寄存器)
R13_svc
R14_svc
abt:R0......R12,R15.(數據訪問終止模式有兩個私有的寄存器)
R13_abt
R14_abt
und:R0......R12,R15.(未定義模式有兩個私有的寄存器)
R13_und
R14_und
fiq:R0-R7,R15.(快速中斷模式有七個私有的寄存器)
R8_fiq
R9_fiq
R10_fiq
R11_fiq
R12_fiq
R13_fiq
R14_fiq
---------------------
狀態寄存器psr:
一個:
cpsr:當前程序狀態寄存器。(七種模式都能訪問)。
五個:
spsr:保存程序狀態寄存器。(只有對應模式才能訪問)。
spsr_irq
spsr_svc
spsr_fiq
spsr_abt
spsr_und
cpsr/spsr寄存器格式:
條件代碼標識
31 30 29 28 7 6 5 4-0
N Z C V I F T mode
高四位:
N=1:負數或小于(negtive)
Z=1:等于零(zero)
C=1:有進位或借位擴展
V=1:有溢出
后八位:
I=1:IRQ禁止interrupt
F=1:FIQ禁止fast
T=1/0:Thumb/Arm狀態位
mode后五位表示七種模式:
0b10000:用戶模式
0b10001:fiq模式
0b10010:irq模式
0b10011:管理模式
0b10111:中止模式
0b11011:未定義模式
0b11111:系統模式
------------------------------------------------------------------
arm異常處理
arm微處理器通過異常來響應程序正常執行過程中發生的意外事件。
arm微處理器有七種類型的異常:
復位異常(Reset)
未定義異常(Undefined)
軟件中斷(SWI)
預取異常(Prefetch Abort)
數據異常(Data Abort)
外部中斷異常(IRQ)
快速中斷異常(FIQ)
當異常發生時,arm微處理器會把pc設置為一個特定的存儲器地址,然后從這個地址取指令并執行。這個特定的地址稱為異常向量,所有的異常向量地址構成了異常向量表。
按優先級從高到低:
復位異常:1,管理模式(SVC),當處理器的復位引腳被加上有效服務信號時,產生復位異常。
數據異常:2,數據訪問中止模式(Abort),處理器數據訪問時,如果目標地址不存在或相應的地址空間沒有訪問權限則產生數據訪問中止異常。
快速中斷異常:3,快速中斷模式(FIQ),處理器外部快速中斷清求引腳有效且CPSR寄存器的F位為0,處理器產生快速中斷請求。
正常中斷異常:4,正常中斷模式(IRQ),處理器外部正常中斷請求引腳有效且CPSR寄存器的I位為0時,處理器產生正常中斷請求。
預取異常:5,數據訪問中止模式(Abort),當一個指令被從內存中預取時,由于某種原因而失敗,如果它能到達執行狀態這個異常才會產生。
未定義指令異常:6,未定義指令中止模式(Udef),當arm處理器或協處理器執行未定義的指令碼時,產生未定義指令異常。
軟中斷異常:6,管理模式(SVC),當arm處理器或協處理器執行未定義的指令碼時,產生未定義指令異常。
arm異常相應過程:
將當前程序狀態寄存器CPSR的值保存到將要執行的異常對應的處理器工作模式的SPSR寄存器。
修改當前程序狀態寄存器CPSR的相應位。
把將要執行的異常所對應的工作模式的LR寄存器設置成異常返回地址。
將程序寄存器PC的值設置成該異常的向量地址,并從該地址取指令執行。