首页 理论教育 ARMCortex-M3处理器的三级流水线及指令执行特点

ARMCortex-M3处理器的三级流水线及指令执行特点

时间:2023-11-23 理论教育 版权反馈
【摘要】:图3.26Cortex-M3的三级流水线有些人会提出质疑,认为其实是4级,这是由总线接口在访问内存时的行为决定的。但是这一级是在处理器的外部,故而处理器自身还是只有3级流水线。有些指令的执行需要多个周期,在这期间流水线会暂停。由于流水线的存在,以及出于对Thumb代码兼容的考虑,读取PC会返回当前指令地址+4的值。

ARMCortex-M3处理器的三级流水线及指令执行特点

Cortex-M3处理器使用一个三级流水线。流水线的三级分别是取指、解码和执行,如图3.26所示。

图3.26 Cortex-M3的三级流水线

有些人会提出质疑,认为其实是4级,这是由总线接口在访问内存时的行为决定的。但是这一级是在处理器的外部,故而处理器自身还是只有3级流水线。

当运行的指令大多数都是16位时,处理器会每隔一个周期做一次取指。这是因为Cortex-M3有时可以一次取两条指令(32位),所以取第一条指令时,也顺带着取了第二条指令。此时总线接口就可以在下次再取指。如果缓冲区是满的,总线接口就空闲了。有些指令的执行需要多个周期,在这期间流水线会暂停。

当执行到跳转指令时,需要清空流水线,处理器会不得不从跳转目的地重新取指。为了改善这种情况,Cortex-M3支持一定数量的V7M新指令,可以避免很多短程跳转,如使用IFTHEN语句块。(www.xing528.com)

由于流水线的存在,以及出于对Thumb代码兼容的考虑,读取PC会返回当前指令地址+4的值。这个偏移量总是4,不管是执行16位指令还是32位指令,这就保证了在Thumb和Thumb2之间的一致性。

在处理器内核的预取单元中也有一个指令缓冲区,它允许后续的指令在执行前先在里面排队,也能在执行未对齐的32位指令时,避免流水线“断流”。不过该缓冲区并不会在流水线中添加额外级数,因此不会恶化跳转导致的性能下降,如图3.27所示。

图3.27 取指单元使用缓冲区对32位指令处理的性能提升

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈