IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> [003] [ARM-Cortex-M3/4] 指令流水线 -> 正文阅读

[嵌入式][003] [ARM-Cortex-M3/4] 指令流水线

ARM
Cortex-M3/4
RISC与CISC``
RISC`
CISC`
流水线

1 RISC与CISC

1.1 RISC

ARM芯片属于精简指令集CPU(RISC: Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点:

  • 对内存只有读/写指令
  • 对于数据的运算在CPU内部实现
  • 使用RISC指令减少复杂度

执行a = a * b,RISC使用4条汇编指令:
在这里插入图片描述

  1. 内存a,将数据放到处理器的寄存器中
  2. 内存b,将数据放到处理器的寄存器中
  3. 计算a * b
  4. 将结果回内存

1.2 CISC

x86属于复杂指令集计算机(CISC: Complex Instruction Set Computing),它所用的指令比较复杂,比如某些复杂的指令,它是通过"微程序"来实现的。比如执行乘法指令时,实际上会去执行一个“微程序”,如执行a = a * b,“微程序”内部一样执行上述四个操作,但对于程序员来说是看不见的,好像一条指令即完成。

2 流水线

Cortex-M3/4处理器使用一个3级流水线。流水线的3个级分别是:

  • 取指:从存储器装载一条指令
  • 解码(译码):识别将要被执行的指令
  • 执行:执行处理指令并将结果写回寄存器组

取指,解码,执行是同时进行的。

当第N条指令正在执行时,第N+2条指令正在取指,而PC总是指向正在取指的指令,即指向第三条指令。

每次取指令都是32位的,而多数指令则是16位的,因此一次可以取两条指令,基于此可以得出以下结论(PC的LSB置1表示Thumb状态,反之为ARM状态):
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOpcguNJ-1646574150750)(img/image-20220306210532847.png)]

  • 处理器处于ARM状态时,每条指令为4个字节,PC为当前执行的指令地址+8字节
  • 处理器处于Thumb状态时,每条指令为2字节,PC为当前执行的指令地址+4字节。(Thumb-2指令兼有16位和32位指令,可提供几乎与ARM指令集完全一样的功能)

为了保证Thumb-2Thumb的一致性,对于CM3/4,不管执行16位或32位指令,PC偏移量4

当运行的指令大多为16位时,处理器会每隔一个周期做一次取指,因为此时CM3/4一次可取两条指令(一次能取32位),总线接口就可先“休息”一个周期再取指,若有些指令执行需要多个周期,在这期间流水线会暂停。

当执行到跳转指令时,需要清洗流水线,处理器会不得不从跳转目的地重新取指。因此,尽量地少使用跳转指令可以提高程序的执行效率。

此外,在处理器内核的预取单元中有一个指令缓冲区

  • 允许后续的指令在执行前先在里面排队
  • 执行未对齐的32位指令时,避免流水线“断流

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H21wXc4Q-1646574150751)(img/image-20220306213724039.png)]

上图即为未对齐32位Thumb-2指令:

  • N:执行A1

  • N+4:解码B1,在指令缓冲区中执行A2

  • N+8:在指令缓冲区中解码B2,避免流水线“断流

  • N+C:执行D,在指令缓冲区中执行C2

若缓冲区满,总线接口则处于空闲状态。

END

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:42:39  更:2022-03-08 22:43:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:55:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码