您的位置 首页 5G

ARM核流水线——ARM7,ARM9E,ARM11,Cortex-A系列处理器

本文主要介绍ARM7,ARM9E,ARM11以及Cortex-A系列处理器的流水线,从指令读取fetch,指令解码decode到指令执行的各个阶段。参考ARM的网站ht…

本文首要介绍ARM7,ARM9E,ARM11以及Cortex-A系列处理器流水线,从指令读取fetch,指令解码decode到指令履行的各个阶段。

参阅ARM的网站http://www.arm.com/about/company-profile/index.php,ARM公司成立于1990年,现在现已出售了超越150亿个芯片,并向超越200多加公司出售了超越600个处理器的授权,现在全世界有超越95%的手机以及超越25%的消费电子产品运用ARM作为处理器中心。

ARM(Advanced RISC Machines)是专心于RISC(Reduced Instruction Set computer)架构的处理器公司,最早的ARM1原型是1985年在英国剑桥的Acorn公司规划,并由VLSI出产,前期的ARM1,ARM2,ARM250,ARM3..的处理器都被Acorn这家公司作为核算机处理中心。

现在处理器架构中,首要有1940年代提出的Von Neumann供给的记忆体架构,让程序和数据共用总线,之后的Harvard架构则让程序和数据运用不同的架构,优点是能够让程序和数据搭档从存储器内操作。前期的ARM7跟8051一般是选用Von Neumann架构,一块cache供指令与数据存取,而现在新的微处理器架构(例如:ARM11 or Cortex A)一般都选用Harvard架构,也便是处理器会支撑I-Cache与D-Cache,区别指令和数据的总线操作,进步处理器功率。(参阅文章:http://en.wikipedia.org/wiki/ARM7andhttp://en.wikipedia.org/wiki/Harvard_architecture).有关ARM处理器的冯诺依曼和哈佛架构能够参阅网页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精简指令集(Reduced Instruction Set Computing)架构的处理器,RISC架构首要挑选运用频率较高的简略指令,防止杂乱指令,运用固定长度的指令编码(支撑32bits,16bits或16/32bits混合),单周期指令,便于Pipeline的操作履行,并经过很多暂存器,让逻辑处理指令只对暂存器进行操作,只要特定载入/贮存的指令能够存取存储器內容.比较CISC架构,会跟着需求,不断的参加新的指令集,使得架构越来越杂乱,实践运用中,也并非一切的指令都是常被运用的,如下以CSIC架构的x86指令集为例,指令集出现不固定长度的方法,如下比如有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经过Pipeline的方法加快指令集的处理,在Pipeline履行阶段,假如发生中止,也会把Pipeline中的指令履行完畢才进入中止,如下所示ARM7支撑如下的3级Pipeline

Fetch → Decode → Execute

其间

Fetch

进行指令的读取动作

Decode

Thumb->ARM指令Decompress,ARM指令解码,暂存器挑选

Execute

进行暂存器/存储器读取,算术逻辑运算与暂存器/存储器回写动作

每一个CPU周期,处理器都能够一同处理Fetch,Decode,Execute這三个动作,而非把一个指令从Fetch开端到履行完后,才处理下一个指令周期,如下图所示

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

为了防止在非载入存储器阶段,让运算指令进行存储器的存取,而导致Pipeline可堆叠履行的才能被损坏,ARM只允许特定载入贮存指令读写存储器的材料.前期的ARM6,ARM7有3级的Pipeline,到了ARM8、ARM9时为5级的Pipeline;之后的ARM11则为8级的Pipeline;不过Pipeline过深不一定就能帶来更高的效益,假如程序流程中遇到分支(例如Branch到另一个程序块),就会导致Pipeline中的材料失效而要从头进行指令Fetch的动作.

简略来说,Pipeline便是把指令的处理分红几个不同的步驟,例如

ARM9支撑如下的5级Pipeline

Fetch → Decode → Execute→ Memory→ Write Back

其间

Fetch

进行指令的读取(Fetch)动作

Decode

进行ARM/Thumb指令解码与暂存器的读取

Execute

进行逻辑运算与存储器存取位址核算动作

Memory

读取或写回存储器材料

Write Back

將运算或是Load成果回写暂存器中

ARM10之后有支撑Branch Prediction以削减在Pipeline履行期间因为Branch动作导致Pipeline失效Flush的时机,支撑如下的6级Pipeline

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

其间

Fetch

进行Branch Predictor指令分支猜测,指令位址核算,与指令的读取(Fetch)动作

Issue

ARM/Thumb指令解码,若非ARM/Thumb有用指令,就经过Coprocessor Signal判别是否为Coprocessor指令

Decode

暂存器的读取,Result Forward,ScoreBoard

Execute

进行算术逻辑运算与Branch/Data存取存储器位址核算,乘法运算

Memory

读取或写回存储器材料,Coprocessor材料存取,乘法相加处理

Write Back

将运算或是Load成果回写暂存器中

ARM11选用Scalar架构的Pipeline,并在Issue阶段支撑ALU(arithmetic logic unit),MAC(multiply/accumulate)与Load/Store分红Pipeline的流水线,能够在一个Cycle分发一个对应的处理器动作到一个Pipeline,如下所示的8级Scalar Pipeline (ARM1156T2-S支撑9级的Pipeline,其间Fetch Pipeline扩大为3级,能够参阅网页

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用了两个Fetch Pipeline阶段去支撑两种指令分支猜测(Branch Prediction)的机制,第一个Fetch Pipeline阶段会依据前史记载进行动态的指令分支猜测(Dynamic Branch Prediction),一共记载64次,4种状况(Strongly taken,Weakly taken,Weakly not-taken and Strongly non-taken)的分支((Branch)方针存储器位址快取(BTAC,Branch-Target Address Cache)记载近期指令分支的情況.第二个Fetch Pipeline阶段进行静态的指令分支猜测(Static Branch Prediction),会处理不在第一阶段规模中的分支猜测存储器位址,射中率高的指令分支猜测(Branch Prediction)能够防止Pipeline失效重置的问題,让处理器的运作功率更高。依据参阅的材料ARM11的Dynamic与Static Branch Prediction在一般履行情況下能够有85%的射中率,大多數的情況能够介于80%-95%之间(取決于程序的巨细)。

简介如下,

#1

Fetch#1

进行Dynamic Branch Prediction,指令位址核算,与指令的读取(Fetch)动作

#2

Fetch#2

进行Static Branch Prediction

#3

Decode

ARM/Thumb指令解码,若非ARM/Thumb有用指令,就经过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)进行Shift

MAC1

第1阶段乘法累加操作

LS Add

核算发生Load/Store操作的存储器位址

#6

ALU

进行整數算术逻辑运算

MAC2

第2阶段乘法累加操作

DC1

第1阶段Data Cache存取

#7

SAT

贮存运算成果

MAC3

第3阶段乘法累加操作

DC2

第2阶段Data Cache存取

#8

Write Back

将运算或是Load成果回写暂存器中

ARM Cortext A系列的架构,在這架构下ARM导入了Superscalar架构的Pipeline,让处理器能够在一个周期平行处理一个以上的指令集。以Cortex A8为例,支撑13级的整數Pipeline与10级的NEON多媒体指令集Pipeline,以整數处理的指令集为例,Cortex A8支撑Dual-Issue,In-Order Pipeline,不同于之前的ARM核心一次只能处理一个整数处理指令集,Cortex A8能够一同Issue两个整数处理指令集,并在一个周期中经过两个整数算术逻辑单元Pipeline平行处理这两个指令集.

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架构下,有两个ALU Pipeline,ALU 0与ALU1是对称的,能够一同处理两个逻辑运算,因为Pipeline的特性在运用上,乘法需求的指令会跟ALU 0成对(也便是说在这条Pipeline 0接连处理有关整数逻辑运算与乘法相关的指令),而Load/Store的指令则合适跟ALU 0或1两者任一一同成对操作。

其间

13-Stage Integer Pipeline

0-Stage

F#0

用来发生要Fetch指令的位址,在文件中这个阶段并不归入13级的Pipeline中. (AGC,Address Generator Unit)

1-Stage

F#1

RAM+TLB ,

支撑两个层级的全域前史指令分支猜测(Global History Branch Preditor)分別为

1,BTB(Branch Target Buffer)

能用来判别现在所要Fetch的位址是否为分支(Branch)指令,以及所要调到的方针存储器位址,现在一共能够记载512笔材料,若BTB射中,接下来就会进行GHB的动作.

2,GHB(Global History Buffer)

包括4096个2bits计数器,用来编码分支猜测的強度与方向。GHB会以10bits长度定址最近十次分支的位址,与4bits的PC(Program Counter)值.

此外,Return Stack(RS)会记载8次32bits Link Register的值,当发现有关于函式回来(Return)相对指令时,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)

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/276091.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部