棋子 · 2019年12月18日

ARM Cortex ICode,DCode,系统总线

我对ARM Cortex M3的总线结构和内存模型有些困惑。首先,Cortex M3实际有3条物理上分离的总线吗?
他们说,通过ICode总线提取代码存储器中的指令,而通过DCode总线提取数据。因此,如果我有一些闪存映射到代码存储区域中,用于存储我的代码和一些常量数据,那么我将如何准确地将两条总线连接到它?我将两条代码总线连接到同一物理IC吗?
如果我有一个RAM芯片映射到用于保存我的常规数据的SRAM存储器区域,我是否可以将系统总线连接到它,以便可以在其上执行常规数据提取?

2 个回答 得票排序 · 时间排序
极术小姐姐 · 2019年12月18日

从第90页可以看出,外部APB使用地址0xE0040000至0xE00FFFFF,系统总线使用0x20000000至0xDFFFFFFF和0xE0100000至0xFFFFFFFF。但是,D代码和I代码总线共享地址范围0x00000000至0x1FFFFFFF。

Cortex-M3假定读取D代码或I代码端口上的相同地址将访问相同的数据。如何实现此目标取决于实现者,但可能对设备的性能产生重大影响,选项(不一定是所有可行的选项)可能包括:

1.将简单的仲裁器(矩阵)集成到单个从设备(闪存/ ROM / RAM)中。
2.通过预取到I代码和绕过D代码进行闪存。
3.双端口RAM,对I-Code只读,对D-Code读/写。
4.某种缓存系统-可能支持I / D代码之间的命中不足。

当前,当前可用的Cortex-M3微控制器通常在0x00000000 +处具有闪存控制器,而在系统总线上的SRAM和外设在0x20000000 +处。

fanyu_mingda · 2023年05月24日 · 北京市

应该是有一个译码器,译码后取指令,加载数据。

你的回答