ARM体系结构(二)——流水线

一.流水线的概念与原理

处理器按照一系列步骤来执行每一条指令,典型的步骤如下:

①  从存储器读取指令(fetch);

②  译码(以鉴别它属于哪一种指令)(dec);

③  从指令中提取指令的操作数(这些操作数往往存在于寄存器中)(reg);

④  如将操作数进行组合以得到结果或存储器地址(ALU);

⑤  如果需要,则访问存储器以存储数据(mem);

⑥  将结果写回到寄存器堆(res)。

并不是所有指令 都需要上面所有的步骤,但是多数指令需要其中多个步骤。在执行每一步指令时,只有少量的硬件处于工作状态,这种资源的浪费是不可容忍的。有一种方法可以明显改善硬件资源利用情况,这就是当前一条指令结束之前就开始执行下一条指令,即我们常说的流水线。可以把上面的六个步骤想象成是汽车工厂流水线上的六个工人,每个人负责汽车生产的一个步骤,在第一个工人完成自己的工作之后无需等待整个汽车生产完毕再开始下一辆车的工作,每个工人至始至终都在做自己分内的工作,这样有效的提高了工作效率。类比回来,硬件使用的效率和处理器的吞吐量大大提高。有一点需要注意:从原理上说,上述流水线可将工作效率提高到六倍,但是由于硬件本身的一些限制,实际情况会少一些。

二. 流水线的分类

1.      三级流水线ARM组织

ARM体系结构(二)——流水线_第1张图片

2.      五级流水线ARM组织

ARM体系结构(二)——流水线_第2张图片

3.      六级流水线ARM组织

取址——发射——译码——执行——存储——回写

三. 影响流水线性能的因素

1.      互锁

在典型的程序处理过程中,经常会遇到这样的情形,即一条指令的结果被用作下一条指令的操作数。

【例】

LDR   r0,[R0,#0]

ADD  r0,r0,r1

该程序会在流水线上产生互锁,流水线的操作产生中断,因为第一条指令的结果在第二条指令取数时还没有产生。第二条指令必须停止,知道r0产生结果为止。

2.      跳转指令

跳转指令也会破坏流水线的行为,因为后续指令的取址步骤收到跳转目标计算的影响,因而必须推迟。但是,当跳转指令被译码时,在它被确认时跳转指令之前,后续的操作已经发生。这样一来已经被预取进流水线的指令不得不被丢弃。

尽管有些技术可以减少这些流水线问题的影响,但是不能完全消除这些困难。流水线级数越多,问题就越严重。对于相对简单的处理器,使用三到五级的流水线效果最好。

你可能感兴趣的:(嵌入式开发,嵌入式,嵌入式开发,arm,arm处理器)