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

原文地址:http://houh-1984.blog.163.com/blog/static/311278342011111083852771/

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

参考ARM的网站http://www.arm.com/about/company-profile/index.phpARM公司成立于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架构则让程序和数据使用不同的架构,好处是可以让程序和数据同事从存储器内操作。早期的ARM78051一般是采用Von Neumann架构,一块cache供指令与数据存取,而目前新的微处理器架构 (例如:ARM11 or Cortex A)通常都采用Harvard架构,也就是处理器会支持I-CacheD-Cache,区分指令和数据的总线操作,提高处理器效率。(参考文章:http://en.wikipedia.org/wiki/ARM7 and http://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,16bits16/32bits混合),单周期指令,便于Pipeline的操作执行,并通过大量暂存器,让逻辑处理指令只对暂存器进行操作,只有特定载入/储存的指令可以存取存储器內容.相比CISC架构,会随着需求,不断的加入新的指令集,使得架构越来越复杂,实际应用中,也并非所有的指令都是常被使用的,如下以CSIC架构的x86 指令集为例,指令集呈现不固定长度的方式,如下例子有1,2,711 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支持如下的3Pipeline

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,ARM73级的Pipeline,到了ARM8ARM9时为5级的Pipeline;之后的ARM11则为8级的Pipeline;不过Pipeline过深不一定就能帶来更高的效益,如果程序流程中遇到分支(例如Branch到另一个程序块),就会导致Pipeline中的资料失效而要重新进行指令Fetch的动作.

简单来说,Pipeline就是把指令的处理分成几个不同的步驟,例如

ARM9支持如下的5Pipeline

Fetch → Decode → Execute→ Memory→ Write Back

其中

Fetch

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

Decode

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

Execute

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

Memory

读取或写回存储器资料

Write Back

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

ARM10之后有支持Branch Prediction以减少在Pipeline执行期间因为Branch动作导致Pipeline失效 Flush的机会,支持如下的6Pipeline

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,如下所示的8Scalar 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失效重置的问題,让处理器的运作效率更高。根据参考的资料ARM11DynamicStatic 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级的整數Pipeline10级的NEON多媒体指令集Pipeline,以整數处理的指令集为例,Cortex A8支持Dual-IssueIn-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

with Dual-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 PipelineALU 0ALU1是对称的,可以同时处理两个逻辑运算,由于Pipeline的特性在使用上,乘法需求的指令会跟ALU 0成对 (也就是说在这条Pipeline 0连续处理有关整数逻辑运算与乘法相关的指令),而Load/Store 的指令则适合跟ALU 01两者任一一起成对操作。

其中

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)

包含40962bits计数器,用来编码分支预测的強度与方向。GHB会以10bits长度定址最近十次分支的位址,与4bitsPC(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) 

Reference:

http://loda.hala01.com/2011/02/arm%E8%88%87cortex%E7%AD%86%E8%A8%98/

http://houh-1984.blog.163.com/

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


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值