首页 > 其他分享 >嵌入式:ARM的流水线技术

嵌入式:ARM的流水线技术

时间:2022-12-12 16:36:50浏览次数:31  
标签:操作数 存储器 嵌入式 指令 寄存器 流水线 ARM

三级流水线ARM的组织

ARM的3级流水线介绍

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

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

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

ARM3级流水线下PC的行为

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

嵌入式:ARM的流水线技术_操作数_02

程序执行时间计算公式

嵌入式:ARM的流水线技术_操作数_03

  • 嵌入式:ARM的流水线技术_时钟周期_04

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

  • : 时钟频率。

减少Tprog的方法:

  1. 减少CPI: 将程序和数据分开
  2. 提高
  3. 嵌入式:ARM的流水线技术_时钟周期_06

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

五级流水线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.

标签:操作数,存储器,嵌入式,指令,寄存器,流水线,ARM
From: https://blog.51cto.com/u_15736437/5930796

相关文章

  • 【FAQ】HarmonyOS JavaUI中使用terminate()后重新打开AbilitySlice页面存在缓存
    【前言】同一个Ability下的两个不同的AbilitySlice,官方给的JavaUI中是通过present跳转AbilitySlice,使用AbilitySlice.terminate方法关闭Slice,具体可以参考官方给的示例代码......
  • 嵌入式C++(三)
    文章目录​​一构造函数​​​​1.1构造函数的重载和调用​​​​1.2拷贝构造函数​​​​<1>概念​​​​<2>拷贝构造函数的调用时机​​​​1>用一个对象去初始化另......
  • 嵌入式C++(七)
    文章目录​​一智能指针​​​​1.1手动初始化​​​​1.1.1make_shared​​​​1.2常规操作​​​​1.2.1use_count()​​​​1.2.3reset​​​​1.2.4解引用​​​......
  • 嵌入式c++(九)
    文章目录一类型推导1.1意义1.2boost安装1.3反例1.4类型推导的使用场景二可调用对象2.1通过函数调用符操作的对象称之为可调用对象2.2可调用对象2.3函数对象(仿函数)......
  • pycharm链接数据库(MySQL)
    pycharm可以充当很多数据库的客户端点击MySQL后,如果是第一次使用pycharm中的MySQL,那么需要点击download下载对应驱动如果提示下载失败的话,可以点击Driver,选择MySQLfo......
  • pycharm的调试功能介绍
    ......
  • Pycharm2022配置本地anaconda3环境
    PyCharm2022版本配置本地anaconda3环境,可能Pycharm更新了,是网上的教程都不太行.....安装anaconda3正常安装即可教程https://blog.csdn.net/MSDCP/article/details/12......
  • OpenHarmony社区运营报告(2022年11月)
     本月快讯•11月24日,第二十届中日韩三国IT局长OSS会议暨东北亚开源软件推进论坛以在线形式成功召开。经审核评选认定,OpenAtomOpenHarmony(以下简称“OpenHarmony”)开......
  • 使用 VSCode 远程 图形化 GDB 调试 嵌入式linux
     目录标题引言环境步骤vscoderemotessh配置Linux编译机配置设备板端配置vscodelaunch设置调试引言之前说了,通过coredump找程序bug,但是有些时候......
  • 当pycharm连接不上mysql时候,如何解决?
    当发现pycharm一直连接不上mysql时候,要考虑几个问题?一、端口是否被占用当我再win10中输入netstat -aon|findstr3306   再去任务管理里面发现,还有有两个mysql......