<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM核流水線(xiàn)——ARM7,ARM9E,ARM11,Cortex-A系列處理器

ARM核流水線(xiàn)——ARM7,ARM9E,ARM11,Cortex-A系列處理器

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
本文主要介紹ARM7,ARM9E,ARM11以及Cortex-A系列處理器流水線(xiàn),從指令讀取fetch,指令解碼decode到指令執行的各個(gè)階段。

參考ARM的網(wǎng)站http://www.arm.com/about/company-profile/index.php,ARM公司成立于1990年,目前已經(jīng)銷(xiāo)售了超過(guò)150億個(gè)芯片,并向超過(guò)200多加公司銷(xiāo)售了超過(guò)600個(gè)處理器的授權,目前全世界有超過(guò)95%的手機以及超過(guò)25%的消費電子產(chǎn)品使用ARM作為處理器核心。

本文引用地址:http://dyxdggzs.com/article/201611/317422.htm

ARM(Advanced RISC Machines)是專(zhuān)注于RISC(Reduced Instruction Set computer)架構的處理器公司,最早的ARM1原型是1985年在英國劍橋的Acorn公司設計,并由VLSI生產(chǎn),早期的ARM1,ARM2,ARM250,ARM3..的處理器都被Acorn這家公司作為計算機處理核心。

目前處理器架構中,主要有1940年代提出的Von Neumann提供的記憶體架構,讓程序和數據共用總線(xiàn),之后的Harvard架構則讓程序和數據使用不同的架構,好處是可以讓程序和數據同事從存儲器內操作。早期的ARM7跟8051一般是采用Von Neumann架構,一塊cache供指令與數據存取,而目前新的微處理器架構(例如:ARM11 or Cortex A)通常都采用Harvard架構,也就是處理器會(huì )支持I-Cache與D-Cache,區分指令和數據的總線(xiàn)操作,提高處理器效率。(參考文章:http://en.wikipedia.org/wiki/ARM7andhttp://en.wikipedia.org/wiki/Harvard_architecture).有關(guān)ARM處理器的馮諾依曼和哈佛架構可以參考網(wǎng)頁(yè)http://stenlyho.blogspot.com/2008/08/armcpu.html,如下所示

Processor Family

#of pipeline stages

Memory Organization

Clock Rate

MIPS/MHz

ARM6

3

Von Neumann

25MHz

ARM7

3

Von Neumann

66MHz

0.9

ARM8

5

Von Neumann

72MHz

1.2

ARM9

5

Harvard

200MHz

1.1

ARM10

6

Harvard

400MHz

1.25

StrongARM

5

Harvard

233MHz

1.15

ARM11

8

Von Neumann/Harvard

550MHz

1.2

ARM是采用RISC精簡(jiǎn)指令集(Reduced Instruction Set Computing)架構的處理器,RISC架構主要選擇使用頻率較高的簡(jiǎn)單指令,避免復雜指令,使用固定長(cháng)度的指令編碼(支持32bits,16bits或16/32bits混合),單周期指令,便于Pipeline的操作執行,并通過(guò)大量暫存器,讓邏輯處理指令只對暫存器進(jìn)行操作,只有特定載入/儲存的指令可以存取存儲器內容.相比CISC架構,會(huì )隨著(zhù)需求,不斷的加入新的指令集,使得架構越來(lái)越復雜,實(shí)際應用中,也并非所有的指令都是常被使用的,如下以CSIC架構的x86指令集為例,指令集呈現不固定長(cháng)度的方式,如下例子有1,2,7與11 bytes的例子

(1bytes)0×48 = dec eax

(2bytes)0×89 F9= mov ecx,edi

(7bytes)0x8B BC 24 A4 01 00 00 = mov edi,dword ptr [esp+000001A4h]

(11bytes)0×81 BC 24 14 01 00 00 FF 00 00 00 = cmp dword ptr [esp+00000114h],0FFh

ARM通過(guò)Pipeline的方式加速指令集的處理,在Pipeline執行階段,如果發(fā)生中斷,也會(huì )把Pipeline中的指令執行完畢才進(jìn)入中斷,如下所示ARM7支持如下的3級Pipeline

Fetch → Decode → Execute

其中

Fetch

進(jìn)行指令的讀取動(dòng)作

Decode

Thumb->ARM指令Decompress,ARM指令解碼,暫存器選擇

Execute

進(jìn)行暫存器/存儲器讀取,算術(shù)邏輯運算與暫存器/存儲器回寫(xiě)動(dòng)作

每一個(gè)CPU周期,處理器都可以同時(shí)處理Fetch,Decode,Execute這三個(gè)動(dòng)作,而非把一個(gè)指令從Fetch開(kāi)始到執行完后,才處理下一個(gè)指令周期,如下圖所示

Time

Fetch

Decode

Execute

Cycle#1

Instruction#1

Cycle#2

Instruction#2

Instruction#1

Cycle#3

Instruction#3

Instruction#2

Instruction#1

Cycle#4

Instruction#4

Instruction#3

Instruction#2

Cycle#5

Instruction#5

Instruction#4

Instruction#3

Cycle#6

Instruction#6

Instruction#5

Instruction#4

為了避免在非載入存儲器階段,讓運算指令進(jìn)行存儲器的存取,而導致Pipeline可重疊執行的能力被破壞,ARM只允許特定載入儲存指令讀寫(xiě)存儲器的資料.早期的ARM6,ARM7有3級的Pipeline,到了ARM8、ARM9時(shí)為5級的Pipeline;之后的ARM11則為8級的Pipeline;不過(guò)Pipeline過(guò)深不一定就能帶來(lái)更高的效益,如果程序流程中遇到分支(例如Branch到另一個(gè)程序塊),就會(huì )導致Pipeline中的資料失效而要重新進(jìn)行指令Fetch的動(dòng)作.

簡(jiǎn)單來(lái)說(shuō),Pipeline就是把指令的處理分成幾個(gè)不同的步驟,例如

ARM9支持如下的5級Pipeline

Fetch → Decode → Execute→ Memory→ Write Back

其中

Fetch

進(jìn)行指令的讀取(Fetch)動(dòng)作

Decode

進(jìn)行ARM/Thumb指令解碼與暫存器的讀取

Execute

進(jìn)行邏輯運算與存儲器存取位址計算動(dòng)作

Memory

讀取或寫(xiě)回存儲器資料

Write Back

將運算或是Load結果回寫(xiě)暫存器中

ARM10之后有支持Branch Prediction以減少在Pipeline執行期間因為Branch動(dòng)作導致Pipeline失效Flush的機會(huì ),支持如下的6級Pipeline

Fetch→ Issue → Decode → Execute→ Memory→ Write Back

其中

Fetch

進(jìn)行Branch Predictor指令分支預測,指令位址計算,與指令的讀取(Fetch)動(dòng)作

Issue

ARM/Thumb指令解碼,若非ARM/Thumb有效指令,就通過(guò)Coprocessor Signal判斷是否為Coprocessor指令

Decode

暫存器的讀取,Result Forward,ScoreBoard

Execute

進(jìn)行算術(shù)邏輯運算與Branch/Data存取存儲器位址計算,乘法運算

Memory

讀取或寫(xiě)回存儲器資料,Coprocessor資料存取,乘法相加處理

Write Back

將運算或是Load結果回寫(xiě)暫存器中

ARM11采用Scalar架構的Pipeline,并在Issue階段支持ALU(arithmetic logic unit),MAC(multiply/accumulate)與Load/Store分成Pipeline的流水線(xiàn),可以在一個(gè)Cycle分發(fā)一個(gè)對應的處理器動(dòng)作到一個(gè)Pipeline,如下所示的8級Scalar Pipeline (ARM1156T2-S支持9級的Pipeline,其中Fetch Pipeline擴充為3級,可以參考網(wǎng)頁(yè)

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0338g/I1002919.html)

Fetch#1→ Fetch#2→ Decode→ISS (ALU Pipeline)→ Shifter→ALU→ SAT→ Write Back

______________________________(MAC Pipeline) → MAC1→MAC2→ MAC3→ Write Back

______________________________(Load/Store Pipeline)→ LS Add→DC1→ DC2→ Write Back

跟之前版本相比ARM11用了兩個(gè)Fetch Pipeline階段去支持兩種指令分支預測(Branch Prediction)的機制,第一個(gè)Fetch Pipeline階段會(huì )根據歷史記錄進(jìn)行動(dòng)態(tài)的指令分支預測(Dynamic Branch Prediction),總共記錄64次,4種狀態(tài)(Strongly taken,Weakly taken,Weakly not-taken and Strongly non-taken)的分支((Branch)目標存儲器位址快取(BTAC,Branch-Target Address Cache)記錄近期指令分支的情況.第二個(gè)Fetch Pipeline階段進(jìn)行靜態(tài)的指令分支預測(Static Branch Prediction),會(huì )處理不在第一階段范圍中的分支預測存儲器位址,命中率高的指令分支預測(Branch Prediction)可以避免Pipeline失效重置的問(wèn)題,讓處理器的運作效率更高。根據參考的資料ARM11的Dynamic與Static Branch Prediction在一般執行情況下可以有85%的命中率,大多數的情況可以介于80%-95%之間(取決于程序的大小)。

簡(jiǎn)介如下,

#1

Fetch#1

進(jìn)行Dynamic Branch Prediction,指令位址計算,與指令的讀取(Fetch)動(dòng)作

#2

Fetch#2

進(jìn)行Static Branch Prediction

#3

Decode

ARM/Thumb指令解碼,若非ARM/Thumb有效指令,就通過(guò)Coprocessor Signal判斷是否為Coprocessor指令

Static BPR Stack

#4

ISS
(Instruction Issue)

暫存器的讀取,與指令執行路徑分派,有三條路徑邏輯運算ALU Pipeline,乘法累加MAC Pipeline,與資料存取Load/Store Pipeline.

ALU Pipeline

MAC Pipeline

Load/Store Pipeline

#5

Shifter

對邏輯運算指令操作單元(operand)進(jìn)行Shift

MAC1

第1階段乘法累加操作

LS Add

計算產(chǎn)生Load/Store操作的存儲器位址

#6

ALU

進(jìn)行整數算術(shù)邏輯運算

MAC2

第2階段乘法累加操作

DC1

第1階段Data Cache存取

#7

SAT

儲存運算結果

MAC3

第3階段乘法累加操作

DC2

第2階段Data Cache存取

#8

Write Back

將運算或是Load結果回寫(xiě)暫存器中

ARM Cortext A系列的架構,在這架構下ARM導入了Superscalar架構的Pipeline,讓處理器可以在一個(gè)周期平行處理一個(gè)以上的指令集。以Cortex A8為例,支持13級的整數Pipeline與10級的NEON多媒體指令集Pipeline,以整數處理的指令集為例,Cortex A8支持Dual-Issue,In-Order Pipeline,不同于之前的ARM核心一次只能處理一個(gè)整數處理指令集,Cortex A8可以同時(shí)Issue兩個(gè)整數處理指令集,并在一個(gè)周期中通過(guò)兩個(gè)整數算術(shù)邏輯單元Pipeline平行處理這兩個(gè)指令集.

13-Stage Integer Pipeline

10-Stage NEON Pipeline

F#0

F#1

F#2

D#0

D#1

D#2

D#3

D#4

E#0

E#1

E#2

E#3

E#4

E#5

M#0

M#1

M#2

M#3

N#1

N#2

N#3

N#4

N#5

N#6

Instruction Fetch

Instruction Decode

withDual-Issues

Architectural

Register

File

ALU/MUL Pipeline 0

NEON
Instruction

Queue

NEON
Instruction

Decode

NEON
Register

File

Integer ALU Pipe

ALU Pipeline 1

Integer MUL Pipe

Load/Store Pipeline 0 or 1

Integer Shift Pipe

None-IEEE FP Add Pipe

None-IEEE FP Mul Pipe

IEEE FP Engine

Load/Store Permute Pipe

在Cortex A8架構下,有兩個(gè)ALU Pipeline,ALU 0與ALU1是對稱(chēng)的,可以同時(shí)處理兩個(gè)邏輯運算,由于Pipeline的特性在使用上,乘法需求的指令會(huì )跟ALU 0成對(也就是說(shuō)在這條Pipeline 0連續處理有關(guān)整數邏輯運算與乘法相關(guān)的指令),而Load/Store的指令則適合跟ALU 0或1兩者任一一起成對操作。

其中

13-Stage Integer Pipeline

0-Stage

F#0

用來(lái)產(chǎn)生要Fetch指令的位址,在文件中這個(gè)階段并不納入13級的Pipeline中. (AGC,Address Generator Unit)

1-Stage

F#1

RAM+TLB ,

支持兩個(gè)層級的全域歷史指令分支預測(Global History Branch Preditor)分別為

1,BTB(Branch Target Buffer)

能用來(lái)判斷目前所要Fetch的位址是否為分支(Branch)指令,以及所要調到的目標存儲器位址,目前總共可以記錄512筆資料,若BTB命中,接下來(lái)就會(huì )進(jìn)行GHB的動(dòng)作.

2,GHB(Global History Buffer)

包含4096個(gè)2bits計數器,用來(lái)編碼分支預測的強度與方向。GHB會(huì )以10bits長(cháng)度定址最近十次分支的位址,與4bits的PC(Program Counter)值.

此外,Return Stack(RS)會(huì )記錄8次32bits Link Register的值,當發(fā)現有關(guān)于函式返回(Return)相對指令時(shí),Return Stack中所記錄的最近8次Link Register資料就可以幫助Dynamic Branch Predictor預測可能的分支結果.

2-Stage

F#2

提供12次Fetch Queue

3-Stage

D#0

Decode.

4-Stage

D#1

5-Stage

D#2

6-Stage

D#3

7-Stage

D#4

8-Stage

E#0

Architectural Register File

ALU/MUL Pipeline 0

ALU Pipeline 1

Load/Store Pipeline 0 or 1

9-Stage

E#1

Execution.

10-Stage

E#2

11-Stage

E#3

12-Stage

E#4

BP Update(to F#0)

BP Update(to F#0)

BP Update(to F#0)

13-Stage

E#5

10-Stage NEON Pipeline

Instruction Decode

Load and Store with Alignment

1-Stage

M#0

16-entry NEON Instruction Queue/Instruction Decode

Mux L1/MCR

2-Stage

M#1

Decode Queue and Read/Write Check

8-entry Load Queue

3-Stage

M#2

Score-Board and Issue-Logic

Load Align

4-Stage

M#3

NEON Register Read and M3 fwding muxes

Mux with NRF

Integer ALU Pipe

Integer MUL Pipe

Integer Shift Pipe

None-IEEE FP Add Pipe

None-IEEE FP Mul Pipe

IEEE Single/Double precision VFP

Load/Store and Permute Pipe

5-Stage

N#1

FMT

DUP

SHIFT#1

FFMT

FDUP

VFP

PERM#1

6-Stage

N#2

ALU

MUL#1

SHIFT#2

FADD#1

FMUL#1

Write Back

PERM#2

7-Stage

N#3

ABS

MUL#2

SHIFT#3

FADD#2

FMUL#2

Store Align

8-Stage

N#4

ACC#1

FADD#3

FMUL#3

8-entry Store Queue

9-Stage

N#5

ACC#2

FADD#4

FMUL#4

10-Stage

N#6

Write Back (Update to ARM/NEON Register File)



關(guān)鍵詞: ARM核流水線(xiàn)處理

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>