STM32学习-嵌入式微处理器指令集架构

yaneng 2020-04-17

指令集架构

  1. 指令和指令系统

    • 指令:微处理器依靠指令来进行计算和控制系统,指令是微处理器能够直接识别的底层机器编码。
    • 指令系统:微处理器在设计时规定了一系列与其硬件电路相配合的指令系统,称之为“指令集”或“指令集架构”(简称ISA)
  2. 指令集架构:

    • 计算机体系结构中与程序设计相关的一部分,包含了一系列的机器指令,基本数据类型,寄存器,寻址模式,存储体系,终端和异常处理等。

    • 是计算机软硬件之间的接口,整个计算机系统建立在指令集架构之上。

    • 每个指令集架构都有各自的开发生态圈(ECO-System),包括芯片设计公司、软件开发环境提供商、嵌入式操作系统提供商、中间件提供商、高校研究人员还有开源社区等

    • 可以分成复杂指令集(CISC)、精简指令集(RISC)、超长指令字指令集(VLIW)等

      • VLIW:将多条指令放入一个指令字中来实现指令级并行处理,从而提高运算效率。
      • CISC:通过设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改成用硬件的指令系统来实现,以此来提高计算机的执行速度。特点:(1)指令数目多且复杂,每条指令的长度不相等;(2)处理效率高但通用性和运行速度低
      • RISC:简化计算机指令功能,使指令的平均执行周期减少,从而提高计算机的工作主频。特点:(1)指令数目少,指令采用相同的字节长度;(2)寻址方式简化,大部分采用寄存器寻址;(3)主要采用寄存器间的数据操作;(4)简化处理器结构;(5)使用处理器并行技术,适合于流水线、超级流水线和超标量技术
    • 随着最近几年的发展,CISC和RISC指令集架构也在相互融合

  3. 几种常见的指令集架构:

    • X86:Intel公司主导,目前个人计算机等通用计算机系统的主流CISC架构,
    • ARM:ARM公司主导,嵌入式市场的主流RSIC架构,全球使用最多的32位嵌入式RISC处理器架构。
    • MIPS:”无内部互锁流水线的微处理器“,是一种精简指令集架构。在路由器、网关、机顶盒和游戏机中应用较多。
    • Power ISA:精简指令集架构。在汽车电子领域、网络通信、游戏平台和部分FPGA芯片中应用。
    • 8051:8位CISC架构
    • AVR:RISC架构
  4. Intel公司推出的Atom系统芯片是面向嵌入式应用市场,是采用x86 IA-32intel-64可变指令长度的复杂指令集架构的微控制器。

ARM

STM32学习-嵌入式微处理器指令集架构
  1. ARMv1架构:诞生于1985年,该版架构只在原型机ARM1出现过,只有26位的寻址空间(64MB),没有用于商业产品。

    ARMv2架构:诞生于1986年,首颗量产的ARM处理器ARM2就是基于该架构,包含了对32位乘法指令和协处理器指令的支持,但同样仍为26位寻址空间。其后还出现了变种ARMv2a,ARM3即采用了ARMv2a,是第一片采用片上Cache的ARM处理器。

    ARMv3架构:诞生于1990年,第一个采用ARMv3架构的微处理器是ARM6(610)以及ARM7,其具有片上高速缓存、MMU和写缓冲,寻址空间增大到32位(4GB)。

  2. ARMv4架构:诞生于1993年,ARM7(7TDMI)、ARM8、ARM9(9TDMI)和StrongARM采用了该架构。ARM在这个系列中引入了T变种指令集,即处理器可工作在Thumb状态。

    Thumb是一种16位的指令集模式。在Thumb模式下,其较短的操作码能提供更好的编码密度,从而能有效地使用有限的存储器带宽。ARM后来的架构都采用了Thumb技术。

  3. 从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:

    • ARM状态:此时处理器执行32位的字对齐的ARM指令;
    • Thumb状态:此时处理器执行16位的、半字对齐的Thumb指令。
  4. ARMv5架构:诞生于1998年,ARM7(EJ)、ARM9(E)、ARM10(E)和Xscale采用了该架构,这版架构改进了ARM/Thumb状态之间的切换效率。此外还引入了DSP指令和支持JAVA。

    • Jazelle技术通过硬件加速运行Java Bytecode。
    • VFP(矢量浮点)协处理器,提供单精度和多精度浮点运算能力,并完全兼容于ANSI/IEEE的二进制浮点算术标准。VFP提供了大多数适用于浮点运算的应用,如语音压缩与解压,3D图像以及数字音效等等。
  5. ARMv6架构:诞生于2001年,ARM11采用的是该架构,这版架构强化了图形处理性能。通过追加有效进行多媒体处理的SIMD将语音及图像的处理功能大大提高。此外ARM在这个系列中引入了混合16位/32位的Thumb-2指令集。

    • SIMD:单指令多数据。
    • Thumb-2 Mixed ISA:Thumb-2混合长度指令集。Thumb-2扩充了16位Thumb指令集,增加了额外的32位Thumb指令,微处理器无需在和Thumb状态之间来回切换。
    • TrustZone:专用的安全内核,提供硬件的存储控制来防止机密信息泄露。
  6. ARMv7架构:诞生于2004年,从这个时候开始ARM以Cortex来重新命名处理器,Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9/5/7/15/17都是基于该架构。该架构包括NEON技术扩展,可将DSP和媒体处理吞吐量提升高达400%,并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要。

    • “A”系列:面向尖端的基于虚拟内存的操作系统和用户应用;
    • “R”系列:针对实时系统;
    • “M”系列:针对微控制器;
    • NEON技术:高级的SIMD扩展指令集,结合64位和128位的单指令多数据指令集,主要针对多媒体和信号处理,具有标准的加速功能;
    • Virtualization:虚拟化的扩展,从而实现虚拟机处理所需要的硬件加速功能,可以同时满足客户端和服务器设备对虚拟机中的复杂软件环境进行分区和管理的需求,并提供高效的软件虚拟机监控程序。
  7. ARMv6-M架构:2007年,为了实现超低功耗的嵌入式处理器,ARM公司基于ARMv6的Thumb指令集和ARMv7-M的异常和调试特性开发出了ARMv6-M架构。Cortex-M0/1/0+采用的该架构。

  8. ARMv8架构

    STM32学习-嵌入式微处理器指令集架构

    ARMv8-A 4+64位架构支持引入到ARM指令集架构中,其中包括64位的通用寄存器,堆栈指针寄存器和程序计数器以及64位数据处理和扩展的虚拟寻址,主要有两种执行态,AArch64执行态和AArch32执行态,AArch64针对64位处理技术引入了一个全新的指令集A64,而AArch32执行状态支持现有的ARM指令集,ARMv7全部特性都在ARMv8中得以保留

  9. AArch64 / AArch32支持三个指令集:

    • A32(或ARM):32位固定长度指令集
    • T32(Thumb):16位固定长度指令集,以及随后的Thumb-2 16位和32位混合长度指令集
    • 新增A64指令集:32位固定长度指令集,可执行64位的数据处理和计算

Cortex-M3/4微处理器

  1. Cortex-M处理器采用的是ARMv6-M和ARMv7-M架构,采用较为简单的编程模式,专门为微控制器市场所设置,Cortex-M3/4内核基于ARMv7-M指令集架构。

  2. Cortex-M4可以看作是Cortex-M3的升级版本,两者都是基于32位RISC指令集架构,采用32位寄存器和32位内部数据总线,和其他系列ARM处理器内核不同的是采用的是Thumb-2指令集架构并且不支持传统的ARM指令集。Cortex-M4处理器还支持DSP指令操作和单精度浮点指令,在DSP应用方面具有较高的精度和性能

  3. Cortex-M3/4微处理器内核采用三级流水线设计,分别是指令获取,解码和执行,并且采用哈佛总线架构,即支持指令和数据的同时存取。微处理器采用32位编址,支持4G bit的统一内存地址空间。

  4. 微处理器架构:指令集架构(指令集,编程模型和调试方法等)+微架构(设计实现的技术细节包括接口信号,指令执行时序,流水线设计等)

  5. Cortex-M3/4微处理器除了处理器内核之外,还包括嵌套向量中断控制器NVIC

    NVIC:寄存器可访问,因此是可编程的。NVIC主要负责异常和中断处理的配置,支持中断优先级和多达240个中断请求源,NVIC依照优先级的顺序处理所有支持的异常和中断,所有的中断和大多数异常可以配置成不同的优先级。当中断发生时,NVIC将比较新中断与当前中断的优先级,如果新中断优先级高,则立即处理新中断,当前正在执行的任务会被暂停,这个过程叫做”抢占“或”中断嵌套“。当异常或中断发生时,Cortex-M处理器会从中断向量表中自动定位异常处理的入口,无需软件进行操作,从而降低从异常发生到处理之间的延时。

  6. 基于ARM微处理器的微控制器一般采用AMBA片上总线架构。AMBA高级微控制器总线架构( Advanced Microcontroller Bus Architecture)是用于ARM架构下系统芯片设计中的总线架构。

    一个基于AMBA的微控制器内部总线结构包括一个高性能的快速总线AHB或者ASB,为所连接的微处理器、DMA控制器和片上RAM和片外内存之间提供足够的系统带宽,AHB或ASB通过一个总线桥(BRIDGE)外设总线APB连接,APB总线主要提供外部设备接口电路之间的互联,所提供的系统带宽一般比较低。

  7. 微处理器内部还有一个可选的嵌入式跟踪宏单元ETM,ETM宏单元为ARM微处理器提供实时指令跟踪和数据跟踪,跟踪软件工具使用ETM生产的信息可以重现全部或者部分程序执行情况。

    ETM:解决系统实时调试问题,程序执行时,ETM通过产生对处理器地址、数据及控制总线活动的追踪来获得处理器的全速操作情况。