3

嵌入式:ARM的流水线技术

 1 year ago
source link: https://blog.51cto.com/u_15736437/5930796
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

三级流水线ARM的组织

ARM的3级流水线介绍

到ARM7为止的ARM处理器使用的简单3级流水线分别为

  • 取指级 :读取指令。
  • 译码级 :对指令进行译码。占有“译码逻辑”,不占有“数据路径”。
  • 执行级 :指令占有“数据路径”,寄存器堆栈被读取,操作数在桶式移位器中被移位,ALU产生相应的运算结果,并写回目的寄存器中。并根据需求更改状态寄存器的条件位。
嵌入式:ARM的流水线技术_操作数

ARM3级流水线下PC的行为

在3级流水线的执行过程中,当通过R15寄存器直接访问PC时,必须考虑到此时流水线的执行过程的真实情况

嵌入式:ARM的流水线技术_ARM_02

程序执行时间计算公式

嵌入式:ARM的流水线技术_ARM_03

  • 嵌入式:ARM的流水线技术_寄存器_04

  • :指令数 (固定)。
  • CPI : 每条指令的平均时钟周期数。
  • 嵌入式:ARM的流水线技术_寄存器_05

  • : 时钟频率。

减少Tprog的方法:

  1. 减少CPI: 将程序和数据分开

嵌入式:ARM的流水线技术_流水线_06

: 增加流水数,简化每一级的逻辑。

五级流水线ARM的组织

使用5级流水线的ARM处理器包含下面5个流水线级:

  • 取指:取指令。
  • 译码 :读取寄存器操作数,寄存器堆中有3个操作数读端口,大多数ARM指令能在一个周期内读取其操作数。
  • 执行 :把一个操作数移位,并产生ALU结果,如果是Load/Store指令,在ALU中计算存储器地址。
  • 缓冲\数据 :如果需要,则访问数据存储器,否则ALU的结果只是简单地缓冲一个时钟周期,以便使得所有指令都有相同的流水线流程。
  • 回写 :将指令产生的结果写回到寄存器堆,包括任何从存储器读取的数据。
嵌入式:ARM的流水线技术_时钟周期_07

进一步减少CPI

要改进CPI,必须增加指令存储器的带宽,ARM10TDMI采用64位存储器结构来解决存储器的瓶颈问题。

  1. 采用转移预测逻辑。可以把时钟频率提高,达到每一时钟周期取2条指令。转移预测单元在流水线的发射阶段之前(在流水线的取指阶段),能识别转移指令,并把它从指令流中移去,从而,尽可能地把转移所引起的周期损失降至零。
  2. 采用非阻塞(Non-blocking)存取执行。一般的存储器存储加载指令,不能在单一存储器周期中完成。采用非阻塞存取措施,就不会在流水线的执行阶段产生停顿。
  3. 采用64位数据存储器。这样,允许在每个时钟周期传送2个寄存器的指令存取。ARM10TDMI的寄存器组具有4个读端口和3个写端口。

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK