0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARMv7-A架构学习笔记:通用寄存器与流水线

嵌入式那些事 来源:嵌入式那些事 2023-10-16 16:33 次阅读

世界上有很多种体系结构的处理器,比较知名的处理器体系结构有:ARM、x86、RISC-V、mips、LoongArch、PowerPC等。不论是哪一种架构的处理器,其处理器核心都会自带一定数量的寄存器,这些寄存器在处理器核心的运行过程中发挥着基础而又重要的作用。

ARM体系结构是一种基于指令加载和存储的体系结构。在这种体系结构下,所有的数据处理都需要在通用寄存器中完成,而不能直接在内存中完成。因此,这种体系结构的处理器核心处理数据的过程为:首先把待处理数据从内存加载到通用寄存器,然后进行处理,最后把结果写入内存中。

通用寄存器

ARM架构提供了16个32位通用寄存器(R0-R15)用于软件使用。其中R0-R12是普通寄存器,R13、R14和R15在程序的运行过程中通常用作固定的用途。

R13:又叫堆栈指针寄存器(Stack pointer)SP,SP通常用于保存堆栈地址,在使用入栈和出栈指令时,SP中的堆栈地址会自动的更新。堆栈主要用于保存局部变量,保存函数间调用的关键寄存器。对于根本不需要进行堆栈操作的程序,SP可以当做普通寄存器来存储数据。

R14:又叫链接寄存器(Link register)LR,LR主要用于存放函数的返回地址,即当函数返回时,知道自己该回到哪儿去继续运行。通常链接寄存器是和BL/BLX/CALL指令搭配使用,这几个指令被调用后,默认会自动将当前调用指令的下一条指令地址保存到LR寄存器当中。

R15:又叫程序计数器(Program Counter)PC,PC主要用于存放CPU取指的地址。ARMv7架构同时支持ARM指令集和Thumb指令集。在ARM指令集中,当CPU正在执行A指令时,PC的值为当前指令A地址+8;在Thumb指令集中,由于Thumb指令集为16位,当CPU正在执行A指令时,PC的值为当前指令A地址+4。但是当手动向PC赋值时,CPU就会跳转到赋值所代表的地址处去运行。记住PC存放的是取指地址,不是当前CPU运行地址。

备注:在ARM状态下,PC指向的地址bit[1:0]总是为0,因此PC指向的地址都是4字节对齐。ARMv7架构的处理器支持混合编码即同时支持ARM指令集和Thumb指令集,因此为了区分Thumb指令集和ARM指令集,ARM将PC指向地址的bit[0]位作为标志位。如果PC指向的地址bit[0]位为1,表示当前是Thumb指令集;如果PC指向的地址bit[0]位为0,表示当前是ARM指令集。

三级流水线

为了增加处理器指令流的速度,ARM使用了多级流水线技术。多级流水线技术是一种将指令的执行分解成多个步骤,并让不同指令的各步骤重叠的一种准并行处理实现技术。经典的三级流水线结构将指令的执行分成取指,译码和执行这三个阶段。

可以将指令的执行过程看成工厂加工产品的过程,当没有采用流水线时只有一个工人A,工人A先对指令取指,然后对指令译码,最后执行指令,然后再次对指令取指周而复始。工人A在同一个时间只能干一件事,指令的执行也就只有等工人A对指令完成取指和译码之后才能进行。工厂老板一看,这产品的生产效率太低,就又请了工人B和工人C,现在工人A只负责取指,工人B只负责译码,工人C只负责执行,这样三条流水线同时工作,每时每刻都有指令在被取指,译码和执行,产品的生产效率大大的提高了。三级流水线示意图如下图所示:

02ec848a-6bfb-11ee-939d-92fbcf53809c.png

ARMv7-A架构学习_3级流水线

上图是ARM指令集的三级流水线结构,每条指令的地址间隔为4字节,当CPU在t3时间段开始执行add r0,r1,#3指令时,PC的值为0x00000008,即PC此时指向cmp r0,#9指令处。记住PC存放的是取指地址,不是当前CPU运行地址。结合上图对于Thumb指令集的PC值分析也是比较简单的。

采用多级流水线技术后,并没有加速单条指令的执行,每条指令的步骤并没有减少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    67

    文章

    16742

    浏览量

    219957
  • arm
    arm
    +关注

    关注

    131

    文章

    8103

    浏览量

    359002
  • 寄存器
    +关注

    关注

    30

    文章

    4517

    浏览量

    116189
  • 流水线
    +关注

    关注

    0

    文章

    105

    浏览量

    23597
  • RISC-V
    +关注

    关注

    38

    文章

    1556

    浏览量

    44201
收藏 人收藏

    评论

    相关推荐

    如何将软件应用程序从ARMv5迁移到ARMv7-A/R

    笔记还假设您具有ARMv5的软件开发经验。 假设主目标平台是围绕
    发表于 08-29 06:51

    基于FPGA的移位寄存器流水线结构FFT处理

    寄存器流水线结构FFT处理
    发表于 08-18 00:04

    【梦翼师兄今日分享】 流水线设计讲解

    流水线。本节,梦翼师兄和大家一起初步地学习流水线流水线基本概念流水线的设计,就是指对延时较大的组合逻辑插入寄存器,把较大的组合逻辑拆分成几个时钟周期来完成,以提高系统的最大时钟频率。但是这样做,会
    发表于 12-05 11:53

    FPGA中的流水线设计

    流水线,除非下一步操作依赖读结果,否则使用流水线是自然而然的事情。4)组合逻辑太长,比如(a+b)*c,那么在加法和乘法之间插入
    发表于 10-26 14:38

    流水线寄存器问题

    流水线寄存器的最佳放置位置?求问大神解答这个题
    发表于 11-20 11:02

    ARM架构系列中的流水线设计

    7 的两倍。核心频率高于ARM 9。流水线的阶段数量可能会根据每个周期处理的指令集增加或减少(在大多数情况下,阶段倾向于增加以提高效率)。基本ARM微架构图5某
    发表于 04-11 17:23

    浅析ARMv7-A体系架构下的MMU的基本原理

    ARMv7-A 架构的虚拟内存系统架构,与 VMSA 对应的还有 PMSA,这个是 ARMv7-R 系列的处理支持的内存保护系统架构,这里不做研究,仅仅初探 ARMv7-A 系列相关的内容。1. 简介
    发表于 05-24 16:54

    ARM模式、寄存器流水线等基础知识学习

    寄存器Cortex A系列ARM处理共有40个32位寄存器,其中33个为通用寄存器,7个为状态寄存器。usr模式
    发表于 08-17 15:39

    基于ROB重命名的方法的RISC-V超标量处理中写回/提交流水线寄存器应该写些什么信息?

    流水线寄存器感觉没什么必要。一些提交用到的信息(目的寄存器的写信号,内存的写信号,要写的数据,写的地址等等)都在ROB中了;提交的时候是通过写指针来访问ROB的,对于存指针的寄存器只需要保证
    发表于 04-06 10:47

    ARM体系结构参考手册ARMv7-AARMv7-R版本

    如何运行的模式和状态,包括当前的执行特权和安全性。 ·例外模式。 ·内存模型,定义内存排序和内存管理: -
    发表于 08-12 07:46

    关于ARM流水线的资料和分析

    流水线设计就是将组合逻辑系统地分割,并在各个部分(分级)之间插入寄存器,并暂存中间数据的方法。目的是提高数据吞吐率(提高处理速度)。
    发表于 07-08 14:41 5次下载
    关于ARM<b>流水线</b>的资料和分析

    什么是流水线技术

    流水线技术
    发表于 02-04 10:21 3490次阅读

    使用流水线寄存器实现最佳时序性能方案

    流水线寄存器来实现最佳时序性能的方法
    的头像 发表于 07-26 16:01 5588次阅读
    使用<b>流水线</b><b>寄存器</b>实现最佳时序性能方案

    各种流水线特点及常见流水线设计方式

    流水线的输送方式大体可以分为:皮带流水装配线、板链线、倍速链、插件线、网带线、悬挂线及滚筒流水线这七类流水线
    的头像 发表于 07-05 11:12 5455次阅读
    各种<b>流水线</b>特点及常见<b>流水线</b>设计方式

    什么是流水线 Jenkins的流水线详解

    流水线分为声明式流水线与脚本化流水线,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线
    发表于 05-17 16:57 314次阅读