一、ARM流水线技术基础知识

流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器的效率和吞吐率。ARM7是冯·诺依曼结构,采用了典型的三级流水线,而ARM9则是哈佛结构,采用五级流水线技术,而ARM11则更是使用了7级流水线。通过增加流水线级数,简化了流水线的各级逻辑,进一步提高了处理器的性能。
        在ARM7中,执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器的读写操作、ALU操作和相关器件之间的数据传输,因此占用了多个时钟周期。ARM9增加了两个功能部件,分别访问存储器并写回结果,同时,ARM9将读寄存器的操作转移到译码部件上,使得流水线各部件的功能更平衡。

以三级流水线分析:
      pc代表程序计数器,流水线使用三个阶段,因此指令分为三个阶段执行:
           1.取指(从存储器装载一条指令);
           2.译码(识别将要被执行的指令);
                  而r15(pc)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执
行的指令作为参考点”,称之为当前第一条指令,因此pc总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以pc始终指向该指
令地址加8字节的地址,即:pc值=当前程序执行位置+8;
          3.执行(处理指令并将结果写回寄存器)。

二、流水线几种情况总结(以三级流水线+冯·诺依曼结构分析)

Step1:单周期指令——一步到位

1)三级流水线

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

(1)使用条件:三级流水线在处理简单的寄存器操作指令时(不包括存储器访问指令和跳转指令)

(2)上图中的MOV、ADD、SUB等指令为单周期指令,并且都是简单的寄存器指令

(3)从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

三级流水线在处理简单的寄存器操作指令时,吞吐率为平均每个时钟周期一条指令;但是在存在存储器访问指令、跳转指令的情况下会出现流水线阻断情况,导致流水线的性能下降。图1给出了流水线的最佳运行情况,图中的MOV、ADD、SUB指令为单周期指令。从T1开始,用3个时钟周期执行了3条指令,指令平均周期数(CPI)等于1个时钟周期。

Step2:分步指令——有先有后:

2)带有存储器访问指令的流水线LDR和STR

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

ARM指令LDR(装载)

eg. ldr r0,#0x11223344 (将数据0x11223344装载到soc内的寄存器r0中)

(1)将数据移进片内(soc)导致了指令/数据总线(冯诺依曼就一根线)被占用,LDR指令移进内存(Memory)中。

(2)因此随后紧跟了内部的写周期(writeback)以完成将数据写回寄存器。

工作流程:

(1)LDR和STR指令,存储器访问指令

(2)一条指令执行有两个先后动作

(3)LDR指令

step1:访问内存——取数据——冯诺依曼一根线被占用——AND指令被延时(stall)

step2:数据写回寄存器——写数据——冯诺依曼一根线被占用——其他指令被延时

(4)由于冯诺依曼结构,仅有一个线作为数据和地址传输,所以执行LDR/STR指令时,线被占用,等待LDR指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程

说明:S ——stall——表示三级流水线部分被拖延了

对存储器的访问指令LDR就是非单周期指令,如图2所示。这类指令在执行阶段,首先要进行存储器的地址计算,占用控制信号线,而译码的过程同样需要占用控制信号线,所以下一条指令(第一个SUB)的译码被阻断,并且由于LDR访问存储器和回写寄存器的过程中需要继续占用执行单元,所以下一条(第一个 SUB)的执行也被阻断。由于采用冯·诺伊曼体系结构,不能够同时访问数据存储器和指令存储器,当LDR处于访存周期的过程中时,MOV指令的取指被阻断。因此处理器用8个时钟周期执行了6条指令,指令平均周期数(CPI)=1.3个时钟周期。

3)分支流水线——跳转指令

分析跳转指令的动作 = B(跳转=调整程序指针) + L(写连接寄存器)

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

ARM跳转指令BL

eg.BL 9X8FEC

step1:先Link到目的地址(L)

step2:连接到地址后,修改程序指针进行跳转(B)

工作流程:(三级流水线)

(1)一条指令执行有两个先后动作

(2)BL指令

step1:找地址(Link)——连接相关地址——冯诺依曼一根线被占用

step2:跳转(B)——跳转到相关位置——冯诺依曼一根线被占用

step3:执行完上面两个步骤后,BL指令才执行结束,此时跳到被连接的指令,如上图SUB和ORR指令被抛弃

(3)由于冯诺依曼结构,仅有一个线作为数据和地址传输,所以执行BL(分步执行)指令时,线被占用,等待BL指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程

当指令序列中含有具有分支功能的指令(如BL等)时,流水线也会被阻断。分支指令在执行时,其后第1条指令被译码,其后第2条指令进行取指,但是这两步操作的指令并不被执行。因为分支指令执行完毕后,程序应该转到跳转的目标地址处执行,因此在流水线上需要丢弃这两条指令,同时程序计数器就会转移到新的位置接着进行取指、译码和执行。此外还有一些特殊的转移指令需要在跳转完成的同时进行写链接寄存器、程序计数寄存器,如BL执行过程中包括两个附加操作——写链接寄存器和调整程序指针。这两个操作仍然占用执行单元,这时处于译码和取指的流水线被阻断了。

Step3:中断(进入异常模式)——随时来

4)中断流水线(IRQ 外部中断为例)

3级流水线--->>ARM7--->>>冯诺依曼结构--->>>一条线传输数据和地址

中断发生后,当前指令和中断哪个优先处理,怎么工作的?

step1:中断发生后,不打断当前正在执行的指令,即等待当前指令执行结束

step2:执行完当前指令在取处理中断

ARM发生外部中断,进入中断处理模式IRQ

发生异常后,CPU进入异常模式,硬件执行四大步三小步

按照上面硬件处理异常的四大步三小步来的

step1:当前指令执行阶段:当有中断发生时,当前指令在执行

step2:中断处理入口:当前指令执行结束后,处理中断——上图蓝色框

step3:解码阶段:DI——中断使能,设置相应标志位——进入ARM态——异常向量表的跳转start.S

step4:中断处理:EI——中断处理——void do_irq

step5:连接(LR寄存器)地址——跳转回ARM指令程序中——LR

step6:修正返回地址——pc = lr -4

ARM中流水线分析——以三级流水线进行分析相关推荐

  1. 经典ARM7三级流水线的分析

    3级流水线如上图所示(PC为程序计数器),流水线使用3个阶段,因此指令分3个阶段执行. ⑴ 取指从存储器装载一条指令 ⑵ 译码识别将要被执行的指令 ⑶ 执行处理指令并将结果写会寄存器 对于ARM7来说 ...

  2. ARM base instruction -- 简单三级流水线

    /*  * 简单三级流水线  */     IF        Instruction fetch                                            取指      ...

  3. 【流水线】FPGA中流水线的原因和方法

    目录 写在前面 什么是流水线? 无流水线设计 流水线设计 流水线的后果 结论 写在前面 对 FPGA(现场可编程门阵列)进行编程是一个定制其资源以实现确定逻辑功能的过程.这涉及使用FPGA的基本构建模 ...

  4. arm linux head.s,arm-linux head.S 源代码分析

    arm-linux head.S 源代码分析 arm-linux head.S 源代码分析 这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器.其作用就是解压Linux内核,并 ...

  5. 计算机三级网络技术分值占比,大一能考计算机三级吗?计算机三级考试题型分析...

    原标题:大一能考计算机三级吗?计算机三级考试题型分析 计算机等级考试,很多学生在刚刚进入大学时,就想把计算机三级证书拿到手.那么,大一能考计算机三级吗?计算机三级考试题型有哪些?下面,上学吧君就为大家 ...

  6. dataearth可视域分析_谁不知道前期分析要用ARCGIS?我就是不会用啊

    Q 你有没有遇到这样的情况? 身边的同事或同学经常说什么高程图.坡向图.坡度图.生态水文图.热力密度图.大数据算法,而自己却一无所知,心里感到特别的慌啊. 文末附ArcGIS最新版及超强数据神器 很多 ...

  7. 操作系统笔记——Linux系统实例分析、Windows系统实例分析

    文章目录 传送门 Linux进程管理 Linux进程组成 Linux进程链表 Linux进程控制 用户进程创建与撤销 0,1,2号进程 Linux进程切换 Linux进程调度 内核同步 Linux储存 ...

  8. 【linux驱动分析】之dm9000驱动分析

    [linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动分析(一):dm9000原理及硬件分析 [linux驱动分析]之dm9000驱动 ...

  9. 5W1H分析法 什么是5W1H分析法?

    5W1H分析法也叫六何分析法,是一种思考方法,也可以说是一种创造技法.是对选定的项目.工序或操作,都要从原因(何因).对象(何事).地点(何地).时间(何时).人员(何人).方法(何法)等六个方面提出 ...

最新文章

  1. 用Python分析了1w场吃鸡数据,原来吃鸡要这么玩!
  2. [BUUCTF-pwn]——qctf2018_stack2
  3. 编写python程序_如何进行Python程序的编写
  4. 监控 DNS 流量,预防安全隐患五大招!
  5. usaco-sprime-superprime-pass
  6. sklearn 绘制roc曲线_如何用Tensorflow和scikit-learn绘制ROC曲线?
  7. python_标识符_帮助系统的使用_命名规则---python工作笔记018
  8. 【狂神说Redis】2Redis入门 2-4 Redis基础知识
  9. 优化问题 - 内点法
  10. 学习java哪个网课最好_学习Java的最佳方法
  11. 算法和数据结构(b站尚硅谷韩老师教程学习笔记)
  12. CentOS系统FastDFS 配置和问题解决
  13. 手机做证件照的方法是什么
  14. svg图片如何引入vue
  15. 上海落户计算机水平毕业研究生,2021应届生落户上海打分标准,部分毕业生可直接落户上海...
  16. 公示系统php,企业信用查询公示系统
  17. [转载]ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难...
  18. 安卓APP注册登录+Tomcat服务器搭建+MySQL数据库建立+加密传输+servlet后端内容编写及部署到Tomcat服务器
  19. ts中的never类型
  20. Harbor docker login x509 certificate signed by unknown authority

热门文章

  1. 学习笔记 查分约束系统
  2. 反馈仅与输入量有关及深度负反馈的理解
  3. 初识linux网络编程
  4. Android广告平台收益,Android移动广告收入首超iOS
  5. 图解通信原理与案例分析-26: 5G NR是如何支持海量机器类通信mMTC的?移动通信对物联网的支持
  6. 将数据库中的数据转换成json格式
  7. 2022年阿里全球数学竞赛中的集福活动(附代码解答)
  8. oracle添加序列
  9. 用django开发一个报修系统
  10. 基于Echarts实现可视化数据大屏销售大数据分析系统