揭秘Cortex-M4三总线架构奥秘
目录
3.核心优势:哈佛架构 (Harvard Architecture) 与冯·诺依曼架构 (Von Neumann Architecture)
I-Code、D-code、s-bus
总线接口
Cortex-M4 处理器包含三个外部高级高性能总线(AHB)-Lite 接口和一个高级外设总线(APB)接口。
除在等待传输期间保持控制信息外,该处理器符合 AMBA 3 规范。AMBA 3 AHB-Lite 协议规定,当从设备请求等待状态时,主设备不得更改传输类型,但以下情况除外:
-
在 IDLE 传输期间,主设备可以将传输类型从 IDLE 更改为 NONSEQ。
-
在使用固定长度突发(fixed length burst)的 BUSY 传输期间,主设备可以将传输类型从 BUSY 更改为 SEQ。
-
在使用未定义长度突发(undefined length burst)的 BUSY 传输期间,主设备可以将传输类型从 BUSY 更改为任何其他传输类型。
该处理器不完全符合此定义,因为它可能在等待传输期间将访问类型从 SEQ 或 NONSEQ 更改为 IDLE。处理器也可能更改地址或其他控制信息,从而请求访问新位置。之前被撤销的原始地址可能不会被再次请求。这将取消尚未完成的未决传输(outstanding transfer),因为先前的访问处于等待状态(wait-stated)并等待完成。这样做是为了让处理器能够通过撤销不再需要的访问,在具有等待状态的系统中实现更低的中断延迟和更高的性能。
为了实现与 AMBA 3 规范的完全兼容,您可以将设计中的 AHB_CONST_CTRL 参数设置为 1 来实现。这确保了在出现等待状态响应(wait-stated response)期间发出的传输永远不会被撤销或修改,并且原始传输会得到执行。设置此参数的后果是,由于中断和分支延迟的增加,内核在具有等待状态的系统中的性能可能会下降。
iCode、dCode 和 S-Bus 总线,这些总线术语常见于 ARM Cortex-M 系列内核,尤其是 Cortex-M3 和 Cortex-M4。它们都属于 ARM 的 AMBA(Advanced Microcontroller Bus Architecture) 协议家族。

为了让你有一个全局观,我们先看一张经典的 Cortex-M3/M4 内核总线架构图,它完美展示了这三条总线的角色:

1.ICode Bus (指令总线)
全称: Instruction Code Bus

-
功能: 这是一条专门用于从代码存储区(通常是 Flash 存储器)获取指令(Instruction) 的总线。当 CPU 需要执行下一条命令时,它会通过 iCode 总线发出取指请求。
-
特点:
-
只读: 它只能执行读取操作,不能写入。
-
高速: 基于 AMBA AHB-Lite 协议,32 位宽,旨在实现高效的指令流传输。
-
专用性: 它的唯一目的就是取指,这避免了与其他数据访问请求产生冲突,确保了指令预取和执行的效率。
-
-
访问的目标内存: 主要访问
0x0000_0000到0x1FFF_FFFF这个地址区域(通常是代码区,如内部 Flash,主要是获取指令)。
2.DCode Bus (数据总线)
全称: Data Code Bus

-
功能: 这是一条专门用于数据访问(Data Access) 的总线。当指令需要读取或写入一个变量(位于 RAM 或内存映射寄存器中)时,CPU 就会通过 dCode 总线来操作。
-
特点:
-
可读可写: 支持加载(Load/读)和存储(Store/写)操作。
-
高速: 同样基于 AHB-Lite 协议,32 位宽,为数据访问提供低延迟的路径。
-
专用性: 专用于数据操作。与 iCode 总线分离,这实现了哈佛总线架构的核心优势:并行操作。(冯-诺依曼架构是数据/指令共享总线)
-
-
访问的目标内存: 主要访问
0x0000_0000到0x1FFF_FFFF这个地址区域(通常是代码区,如内部 Flash,主要是获取数据,如常量与静态变量)。
3.S-Bus (系统总线)
全称: System Bus

来源《Cortex-M3技术参考手册》

《cortex-M4技术参考手册》
-
功能: 这是一条通用系统总线,用于所有不属于 iCode 和 dCode 总线处理的其他访问。它是系统与外部世界连接的主要通道。
-
特点:
-
可读可写: 支持所有类型的访问。
-
通用性: 它不像 iCode 和 dCode 那样有专用的地址区域限制。它可以访问整个 4GB 的内存空间。
-
连接外设: 它的主要作用是连接所有外设,如 GPIO、UART、SPI、I2C、定时器等。这些外设都通过总线矩阵 挂载在 S-Bus 上。
-
备用路径: 它也可以作为 iCode 和 dCode 总线的备用路径。例如,如果一条指令要求从 Flash 中读取一个立即数(这本质上是数据访问),这个请求可能会通过 S-Bus 来完成,而不是 dCode 总线。
-
-
访问的目标: 外设寄存器、外部存储器、以及作为备用路径访问代码和 RAM。( 0x2000_0000 - 0xDFFF_FFFF & 0xE010_0000 - 0xFFFF_FFFF)
1.小结
总线地址空间访问:

三条总线的区别:

2.总线矩阵 (Bus Matrix)
你可能会问,这三条总线是如何协同工作并连接到不同的存储器上的呢?答案就是总线矩阵。

AHB 总线矩阵:

3.核心优势:哈佛架构 (Harvard Architecture) 与冯·诺依曼架构 (Von Neumann Architecture)
iCode 和 dCode 总线的分离,是 “修改型哈佛架构” 的典型体现。
-
冯·诺依曼架构: 指令和数据共享同一条总线和同一存储空间。简单,但存在“冯·诺依曼瓶颈”,即无法同时进行取指和数据操作。
-
哈佛架构: 指令和数据有各自独立的总线和存储空间。允许 CPU 同时取指和访问数据,极大地提高了并行度和执行效率。
Cortex-M 内核同时拥有这三条总线,意味着它可以在一个时钟周期内:
-
通过 iCode 总线 从 Flash 取下一条指令。
-
同时通过 dCode 总线 从 SRAM 读写数据。
-
同时通过 S-Bus 访问一个外设寄存器(例如检查一个串口是否准备好发送数据)。
这种并行操作是现代嵌入式处理器高性能的关键。
更多推荐


所有评论(0)