ARM编程模型-指令流水线
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。
1. 3级流水线
到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。
(1)取指令 从寄存器装载一条指令。
(2)译码(decode) 识别被执行的指令,并为下一个周期准备数据通路的控制信号。在这一级,指令占有译码逻辑,不占用数据通路。
(3)执行 处理指令并将结果写回寄存器。

当处理器执行简单的数据处理指令时,流水线使得平均每个时钟周期能完成1条指令。但一条指令需要3个时钟周期来完成,因此有3个时钟周期的延时,但吞吐率是每个周期一条指令。
对于3级流水线,PC寄存器里的值并不是正在执行的指令的地址,而是预取指令的地址,这个知识点很重要,后面我们会详细的举例来证明。
处理器要满足高性能的要求,为了满足这个要求,需要重新考虑处理器的组织结构。提高性能的方法主要有两种方法:
1.提高时钟频率。时钟频率的提高,必然引起指令执行周期的缩短,所以要求简化流水线每一级的逻辑,流水线的级数都要增加。
2.减少每条指令的平均指令周期数CPI。这就要求重新考虑3级流水线ARM中多余1个流水线周期的实现方法,以便使其占有较少的周期,或者减少因指令相关造成的流水线停顿,也可以将两者结合起来。
较高性能的ARM核使用了5级流水线,而且具有分开的指令和数据存储器。在Cortex-A8中有一条13级的流水线,但是ARM公司没有对其中的技术公开任何相关的细节。
从经典ARM系列到现在Cortex系列,ARM处理器的结构在向复杂的阶段发展,但没改变的是CPU的取址指令和地址关系,「不管是几级流水线,都可以按照最初的3级流水线的操作特性来判断其当前的PC位置」。
2. 流水线举例
为方便理解,下面我们以3级流水线为例,
1)最佳流水线

这是一个理想的实例,所有的指令都在寄存器中执行,且处理器完全不必离开芯片本身。每个周期,都有一条指令被执行,流水线的容量得到了充分的发挥。指令周期数 (CPI) = 1。
2)LDR流水线

该例中,用6周期执行了4条指令 指令周期数 (CPI) = 1.5
与最佳流水线不同,装载(LDR) 操作将数据移进片内导致了指令/数据总线被占用,因此随后紧跟了内部的写周期( writeback)以完成将数据写回寄存器。
1.数据总线在周期1, 2, 3 被使用,周期6是取指,周期4用于数据装载,而周期5是一个内部周期用来完成载入的数据写回到寄存器中。
2.周期3为执行周期:产生地址
3.周器4为数据周期:从存储器中取数据(数据只有在周期4的末尾出现在内核中)
4.周期5写回周期:通过数据通道中的B总线和ALU将数据写回到寄存器bank 中
5.周期6的执行被推迟了,直到周期5写回完成(使用ALU )。同样内部周期是不需要等待状体的,但读写存储器时可能需要。
3)分支流水线
BL指令用于实现指令流的跳转,并存储返回地址到寄存器R14(LR)中。

1.分支指令在其第一周期计算分支的目的地,同时在现行PC处完成一次指令预取,流水线被阻断。这种预取在任何情况下都要做的,因为当判决地址产生时已来不及停止预取。
2.第二个周期在分支的目标地址完成取指,而返回地址则存于R14如果link位已设置。
3.第三周期完成目标地址+4的取指,重新填满流水线,并且如果跳转是带链接的还要修改R14(减去4)以便简单地返回。
4.分支需要三个时钟周期来执行BL,随后会涉及调整阶段。
4)中断流水线

「IRQ 中断的反应时间最小=7周期」
1.周期1: 内核被告知有中断 IRQ在现行指令执行完之前不会被响应( MUL and LDM/STM 指令会有长的延迟) 解码阶段:中断被解码(中断已使能,设置了相应标志位… )。如果中断被使能和服务,正常的指令将不会被解码。
2.周期 2: 此时总是进入ARM状态. 执行中断 ( 获取IR向量的地址), 保存 CPSR 于 SPSR, 改变CPSR模式为 IRQ 模式并禁止进一步的 IRQ 中断输入。
3.周期 3: 保存 PC (0x800C) 于 r14_irq, 从IRQ异常处理向量处取指
4.周期 4: 解码向量表中的指令; 调整r14irq 为0x8008
5.周期 4和 5: 无有用的指令取指, 由于周期 6的跳转
6.周期 6: 取异常处理子程序的第一条指令; 从子程序返回: SUBS pc,lr,#4
这将恢复工作模式并从响应中断前的下一条指令处取指,如果有多个中断,需堆栈保存返回地址。注意最大的FIQ响应延迟为 29个周期(而非Thumb状态的28周期!)。
相关文章:
ARM编程模型-指令流水线
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。 1. 3级流水线 到ARM7为止的ARM处理器使用简单的3级流水线,它包括下列流水线级。 (1࿰…...
邮件营销:高效的节日宣传方式
每个国家都有当地的传统节日,像是我国刚过去的端午节,即将迎来的中秋节、国庆节。我们除了会进行一些传统习俗外,各路商家还会趁这个机会开启促销活动。 对于公司来讲,抓住每一次营销活动都可能会带来更高的营销额,或…...
Leetcode109. 有序链表转换二叉搜索树
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定一个单链表的头节点 head ,其中的元素 按升序排序 ,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度…...
基于Googlenet深度学习网络的人脸身份识别matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... % 定义修改的范围 …...
vue2 生命周期,工程化开发入门
一、今日目标 1.生命周期 生命周期介绍生命周期的四个阶段生命周期钩子声明周期案例 2.工程化开发入门 工程化开发和脚手架项目运行流程组件化组件注册 二、Vue生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好)什么…...
Elasticsearch 分布式搜索——聚合
1.聚合的种类 聚合常见的有三类: **桶(Bucket)**聚合:用来对文档做分组 TermAggregation:按照文档字段值分组,例如按照品牌值分组、按照国家分组Date Histogram:按照日期阶梯分组,例…...
苹果将在iPhone16系列中引入微透镜阵列技术,亮度更高、功耗更低
根据韩国媒体The Elec的报道,苹果公司正与其主要供应商三星和LG展开合作,以评估并衡量是否有必要在明年的iPhone 16系列中引入微透镜(micro-lens)技术来升级屏幕。 这项方案集中在OLED屏幕架构上,计划采用微透镜阵列&…...
Window10 安装 Lua
1、下载地址:https://luabinaries.sourceforge.net/download.html 2、下载 3、解压后共有4个文件,这里我把这几个文件放到如下目录 D:\Program Files\lua-5.4.2\bin 4、定义环境变量 5、打开 powershell,运行 lua54 -v PS C:\Windows\syste…...
Centos替代方案分析(Ubuntu篇)
最受欢迎Linux操作系统 在上百个Linux版本中,Ubuntu和CentOS是最受欢迎的开源操作系统,以其稳定性、高性能和广泛的社区支持而闻名。Ubuntu以友好的用户界面和多样的应用程序生态系统吸引着广大用户,适用于桌面和服务器。而CentOS则因其与RH…...
关于计数以及Index返回订单号升级版可以控制年月日累计(不重复)(sqlite)
1数据库创建: RAGMA foreign_keys false;-- ---------------------------- -- Table structure for OrderSIndex -- ---------------------------- DROP TABLE IF EXISTS "OrderSIndex"; CREATE TABLE "OrderSIndex" ("Id" INTEGER…...
前端实现在线预览文件
一、实现word、xls、ppt文件的在线预览功能 1、通过调用微软的在线预览功能, word、ppt、xls文件实现在线预览的方式比较简单可以直接通过调用微软的在线预览功能实现(预览前提:资源必须是公共可访问的) <iframe srchttps://…...
海外有哪些流行的支付方式?
大家好,我是老三,很久没写支付相关的文章了,这期给大家讲一讲,海外都在用哪些支付方式。 简介 我们先来看下两个主流电商产品的美国站的支付方式: 在国内,想必大家都习惯了支付宝和微信支付二分天下&…...
服务器数据恢复-重组RAID导致RAID6数据丢失的数据恢复案例
服务器数据恢复环境: 一台存储设备中有一组由12块硬盘组建的RAID6磁盘阵列,上层采用EXT3文件系统,共划分3个LUN。 服务器故障&分析: 存储设备在运行过程中RAID6阵列突然不可用,管理员对故障存储进行了重新分配RAI…...
Redis数据库持久化---RDB(Redis DataBase)概念与实操
一、概念 1redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。 RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存…...
分部署存储Ceph
文章目录 Ceph一.deploy-ceph部署1.系统环境初始化1.1 修改主机名,DNS解析1.2 时间同步1.3 配置apt基础源与ceph源1.4关闭selinux与防火墙1.5 创建 ceph 集群部署用户cephadmin1.6分发密钥 2. ceph部署2.1 安装ceph 部署工具2.2 初始化 mon 节点2.3 安装ceph-mon服务…...
项目:点餐系统3mysql知识回顾MySQL客户端
连接数据库 mysql -uroot -p 密码:空 一、第三方库:MySQL 数据库-存储并管理数据的仓库,是一个C/S架构 MySQL客户端通过sql来告诉MySQL服务器,自己需要做什么操作 1.sql语句 sql:structure query language结构化查询…...
docker命令学习
docker vscode插件出现的问题 docker命令 docker images (查看所有的镜像) docker ps -a (查看所有的容器) docker ps (查看运行的容器) docker run imageID docker run --gpus all --shm-size8g -it imag…...
【STM32教程】第二章 通用输入输出口GPIO
资料下载链接: 链接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj 提取码:jauj 1. GPIO的基本结构 1.1 概述 GPIO(General Purpose Input Output)意思是通用输入输出口可配置为8种输入输出模式&a…...
2023.9 - java - ArrayList
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。 ArrayList 继承了 AbstractList ,并实现了 List 接口。 ArrayList 类位于 java.util 包中,使用前需要引入它&…...
记1次前端性能优化之CPU使用率
碰到这样的一个问题,用户反馈页面的图表一直加载不出来,页面还卡死 打开链接页面,打开控制台 Network 看到有个请求一直pending,结合用户描述,页面一直loading,似乎验证了我的怀疑:后端迟迟没有相应。 但是…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换
目录 关键点 技术实现1 技术实现2 摘要: 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式(自动驾驶、人工驾驶、远程驾驶、主动安全),并通过实时消息推送更新车…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
