Cortex-M3整体风景概览

Cortex-M3整体风景

Cortex-M3 处理器流水线

Cortex-M3 处理器使用一个 3 级流水线(Pipeline)来提高指令执行的效率。流水线的 3 级分别是:取指(Fetch)、解码(Decode)和执行(Execute)。这三个阶段可以同时进行,从而实现指令的并行处理。

在这里插入图片描述

名词解释

取指(Fetch)
  • 功能:从内存中读取指令。
  • 操作:处理器从程序计数器(PC)指向的内存地址读取指令。
  • 输出:将读取的指令传递给下一级流水线。
解码(Decode)
  • 功能:解析指令并准备执行。
  • 操作:处理器解析从取指阶段传递过来的指令,确定指令的操作码(Opcode)和操作数(Operands)。
  • 输出:将解析后的指令和操作数传递给下一级流水线。
执行(Execute)
  • 功能:执行指令。
  • 操作:处理器根据解码阶段传递过来的指令和操作数,执行相应的操作。这可能涉及算术运算、逻辑运算、数据传输等。
  • 输出:执行结果(如果有)被写回到寄存器或内存中。

流水线的并行处理

在理想情况下,Cortex-M3 处理器的流水线可以同时处理多条指令的不同阶段。具体来说:

  1. 取指阶段
    • 处理器从内存中读取第一条指令。
    • 同时,处理器可以开始读取第二条指令。
  2. 解码阶段
    • 处理器解析第一条指令。
    • 同时,处理器可以开始解析第二条指令。
  3. 执行阶段
    • 处理器执行第一条指令。
    • 同时,处理器可以开始执行第二条指令

流水线的优势

流水线技术通过将指令执行过程划分为多个阶段,并使这些阶段并行工作,从而提高了处理器的吞吐量。具体优势包括:

  • 提高效率:通过并行处理不同指令的不同阶段,减少了每个指令的平均执行时间。
  • 减少等待时间:在执行当前指令的同时,可以预取和解码下一条指令,减少了指令执行的等待时间。
  • 提高吞吐量:流水线允许在同一时间处理多条指令的不同阶段,从而提高了处理器的整体性能。

流水线的挑战

尽管流水线技术提高了处理器的效率,但也带来了一些挑战:

  • 数据依赖:如果当前指令的执行依赖于前一条指令的结果,可能会导致流水线停顿(Pipeline Stall)。
  • 控制依赖:分支指令(如 BBL)会导致流水线冲刷(Pipeline Flush),因为需要重新计算 PC 并重新取指。
  • 资源冲突:多个指令同时需要访问相同的资源(如寄存器或内存)时,可能会导致资源冲突。

流水线的细节

取指阶段的优化

Cortex-M3 处理器在取指阶段进行了优化,特别是在处理 16 位指令时。处理器有时可以一次取两条指令(32 位),因此在第一条指令取来时,也顺带着把第二条指令取来了。这样可以减少总线接口的访问频率,提高取指效率。

跳转指令的处理

当执行到跳转指令时,需要清洗流水线,处理器会不得不从跳转目的地重新取指。为了改善这种情况,Cortex-M3 支持一定数量的 v7M 新指令,可以避免很多短程跳转。

在处理器内核的预取单元中有一个指令缓冲区,它允许后续的指令在执行前先在里面排队。这可以在执行未对齐的 32 位指令时,避免流水线“断流”。不过该缓冲区并不会在流水线中添加额外的级数,因此不会恶化跳转导致的性能下降(penalty)。

示例

假设有一段简单的指令序列:

ADD R0, R1, R2  ; R0 = R1 + R2
SUB R3, R4, R5  ; R3 = R4 - R5

在流水线中的执行过程如下:

  1. 取指阶段
    • 读取 ADD R0, R1, R2 指令。
  2. 解码阶段
    • 解析 ADD R0, R1, R2 指令,确定操作码和操作数。
  3. 执行阶段
    • 执行 ADD R0, R1, R2 指令,计算 R0 = R1 + R2
  4. 取指阶段
    • 读取 SUB R3, R4, R5 指令。
  5. 解码阶段
    • 解析 SUB R3, R4, R5 指令,确定操作码和操作数。
  6. 执行阶段
    • 执行 SUB R3, R4, R5 指令,计算 R3 = R4 - R5

详细的框图

在这里插入图片描述

Cortex-M3 处理器子系统组件

缩写全称功能特点
NVIC嵌套向量中断控制器管理中断和异常支持中断嵌套,采用向量中断机制,自动取出中断服务例程入口地址,缩短中断延时
SysTick Timer系统滴答定时器提供周期性中断,用于操作系统时基即使在睡眠模式下也能工作,简化操作系统移植
MPU存储器保护单元将存储器分成多个区域,并分别予以保护可选组件,支持用户级只读区域,防止用户程序破坏关键数据
CM3BusMatrix内部的 AHB 互连数据在不同总线之间并行传送提供写缓冲和位带操作逻辑
AHB to APBAHB 到 APB 的总线桥连接 APB 设备到 CM3 处理器的私有外设总线允许芯片厂商添加附加的 APB 设备
SW-DP/SWJ-DP串行线/串行线 JTAG 调试端口通过串行线调试协议或 JTAG 协议连接调试接口支持 both 串行线协议和 JTAG 协议
AHB-APAHB 访问端口提供对全部 CM3 存储器的访问机能通过 SW-DP/SWJ-DP 控制,产生所需的 AHB 数据传送
ETM嵌入式跟踪宏单元实现实时指令跟踪可选组件,控制寄存器映射到主地址空间
DWT数据观察点及跟踪单元设置数据观察点,匹配命中事件产生观察点事件,激活调试器或联动 ETM
ITM指令跟踪宏单元多种用法,如 printf 风格的调试软件控制,消息送给 TPIU,数据跟踪包输出
TPIU跟踪端口的接口单元与外部跟踪硬件交互格式化跟踪信息,供外部设备捕捉
FPBFlash 地址重载及断点单元提供 flash 地址重载和断点功能匹配地址重映射到 SRAM,触发断点事件
ROM 表查找表提供存储器映射信息定位调试组件,检测可用调试组件类型

Cortex-M3 的总线接口

Cortex-M3 处理器的总线接口基于 AHB-Lite 和 APB 协议,提供了高效的数据传输和访问机制。以下是各总线接口的详细介绍:

I-Code 总线

  • 功能:负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作。
  • 特点:基于 AHB-Lite 总线协议的 32 位总线,取指以字的长度执行,即使是 16 位指令也如此。
  • 应用:CPU 内核可以一次取出两条 16 位 Thumb 指令。

D-Code 总线

  • 功能:负责在 0x0000_0000 – 0x1FFF_FFFF 之间的数据访问操作。
  • 特点:基于 AHB-Lite 总线协议的 32 位总线,支持非对齐访问,但总线接口会将非对齐的数据传送转换成对齐的数据传送。
  • 应用:连接到 D-Code 总线上的任何设备只需支持 AHB-Lite 的对齐访问。

系统总线

  • 功能:负责在 0x2000_0000 – 0xDFFF_FFFF 和 0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,包括取指和数据访问。
  • 特点:基于 AHB-Lite 总线协议的 32 位总线,所有的数据传送都是对齐的。
  • 应用:处理系统范围内的数据传输。
4. 外部私有外设总线(PPB)
  • 功能:负责 0xE004_0000 – 0xE00F_FFFF 之间的私有外设访问。
  • 特点:基于 APB 总线协议的 32 位总线,支持 CoreSight 设备,包含 PADDR31 信号用于区分传送来源。
  • 应用:连接非共享的系统设备,如调试组件。

调试访问端口总线

  • 功能:专用于挂接调试接口,如 SWJ-DP 和 SW-DP。
  • 特点:基于“增强型 APB 规格”的 32 位总线。
  • 应用:支持调试功能,不应用于普通外设。

Cortex-M3 的其它接口

除了总线接口,Cortex-M3 还有多个用于其它目的的接口,这些接口的信号通常不引出到引脚上,而是用于连接 SoC 的不同部分或用于调试。以下是一些主要接口的简短小结:

信号组功能
多处理机通信(TXEV, RXEV)多处理机之间的简单任务同步信号
休眠信号(SLEEPING, SLEEPDEEP)电源管理所用的休眠状态
中断状态信号(ETMINTNUM, ETMINTSTATE, CURRPRI)中断操作的状态,用于 ETM 操作和调试
复位请求(SYSRESETREQ)来自 NVIC 的复位请求输出
锁定和停机状态(LOCKUP, HALTED)指示处理器进入了锁定状态或被喊停
端模式输入(ENDIAN)在内核复位时设置端模式
ETM 接口连接到嵌入式跟踪宏单元(用于指令跟踪)
ITM 的 ATB 接口高级跟踪总线(ATB)接口,用于跟踪数据的传送

典型的连接方式

在这里插入图片描述

典型连接实例

图 6.4 展示了一个典型的 Cortex-M3 总线连接范例:

  • 总线矩阵:用于将 I-Code 和 D-Code 总线与存储器和外设连接。总线矩阵允许在同一时刻访问不同的存储器设备,如从 Flash 中取指的同时从 SRAM 中访问数据。
  • AHB 总线复用器:如果只使用总线复用器,则数据传送不能同时发生,但电路尺寸能做得更小。
  • 系统总线:连接主 SRAM 和其它 AHB 设备。主 SRAM 应使用系统总线连接,以利用 CM3 的位带操作能力。
  • 外部存储器控制器:如果单片机带有外部总线接口(EMI),则需要一个外部存储器控制器连接到系统总线上。
连接细节
  • 总线矩阵
    • 允许 I-Code 和 D-Code 总线在同一时刻访问不同的存储器设备。
    • 提高性能,避免数据访问和取指操作的冲突。
  • AHB 总线复用器
    • 简化电路设计,但限制了数据传送的并行性。
  • 系统总线
    • 连接主 SRAM 和其它 AHB 设备。
    • 主 SRAM 应使用系统总线连接,以利用 CM3 的位带操作能力。
  • 外部存储器控制器
    • 连接到系统总线上,管理外部存储器的访问。

Cortex-M3 复位信号

Cortex-M3 处理器对复位电路有特定的要求,具体内容在《Cortex-M3 Technical Reference Manual》中给出。以下是 Cortex-M3 中的各种复位信号及其描述:

复位信号描述作用
上电复位(nPORESET)在器件上电时需要把复位置为有效(assert),把处理器核心和调试系统一起复位确保处理器和调试系统在上电时处于已知状态
系统复位(nSYSRESET)只影响处理器核心、NVIC(与调试相关的除外)以及 MPU,不复位调试系统复位处理器核心和部分系统组件,保持调试系统不受影响
测试复位(nTRST)只复位调试系统用于调试目的,复位调试系统而不影响处理器核心和其它系统组件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值