Cortex-M3 I-Code,D-Code,系统总线及其他总线接口

Cortex-M3 的总线接口
下图是Cortex-M3的连接方式样板图,大家可以根据需求自行更改, CM3 处理器的总线接口是基于 AHB-Lite 和 APB 协议。下图中总线复用器的作用是,让指令和数据在同一个总线上传输的方式,因为代码存储区既可以由指令指令总线(I-Code)访问(取指时),也可以被数据总线(D-Code)访问(访问数据时),需要在中间插入一个总线开关,称为总线矩阵,或者使用一个AHB总线复用器。(这里所讲的总线矩阵不是 CM3 内部的总线矩阵,它们是两码事。 CM3 内部的总线矩阵是专门设计的,不能作为一个通用的 AHB 开关来使用。)如果使用了总线矩阵,则闪存和附加的 SRAM(如果有的话)可以被both I-Code和D-Code访问。总线矩阵可以在ARM的AMBA开发包ADK(ADK, AMBA组件和示例系统的集合,使用VHDL/Verilog编写)中提供。
总线矩阵、 AHB-to-APB总线桥、存储器控制器、 I/O接口、定时器以及UART等,都可以从ARM和其它IP供应商处取得。
Cortex-M3 I-Code,D-Code,系统总线及其他总线接口_第1张图片

I-Code 总线
I-Code的作用是取指令&执行指令,只和指令有关,I-Code 总线是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作。取指以字(32位)的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。

D-Code 总线
D-Code 的作用是对数据读写访问,只和数据有关,D-Code 总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF(与I-Code相同)之间的数据访问操作。尽管 CM3 支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到 D-Code总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不需要支持非对齐访问。

系统总线
系统总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在 0x2000_0000 – 0xDFFF_FFFF 和0xE010_0000 – 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上。和 D-Code 总线一样,所有的数据传送都是对齐的

外设总线
这是一条基于 APB 总线协议的 32 位总线。此总线来负责 0xE004_0000 – 0xE00F_FFFF 之间的私有外设访问。但是,由于此 APB 存储空间的一部分已经被 TPIU、 ETM 以及 ROM 表用掉了,就只留下了 0xE004_2000-E00F_F000 这个区间用于配接附加的(私有)外设。

调试访问端口总线
调试访问端口总线接口是一条基于“增强型 APB 规格”的 32 位总线,它专用于挂接调试接口,例如 SWJ-DP 和 SW-DP。

tips:指令和数据分离的好处
把取指和数据访问分开后,如果指令总线和数据总线在同一时刻访问不同的存储器设备(例如,从 flash 中取指的同时从附加的 SRAM 中访问数据),则两者可以并行不悖。但若是只使用了总线复用器,则数据传送就不能同时发生了,然而这时电路尺寸能做得更小。不过,
通常的 CM3 单片机都使用系统总线来连接 SRAM。而且主 SRAM 确实应该使用系统总线来连接。只有这样才能落到 SRAM 存储器的地址区,从而得以利用 CM3 的位带操作能力。

你可能感兴趣的:(硬件,架构)