Cortex-M0处理器的存储模型

kelly的头像
kelly 发布于:周二, 08/09/2016 - 12:28 ,关键词:

本文将描述Cortex-M0设备的内存映射和内存访问行为。该处理器有一个固定的存储映射,它可以提供高达4GB的可寻址内存。存储映射图如下:

该处理器为处理器核外设寄存器保留了PPB地址范围,关于Cortex-M0处理器以及核外设的内容见《Cortex-M0处理器及其特性》

1、存储区、类型和属性

存储映射被分成多个区,每个区都有其存储类型,有些区还有附加属性。存储类型及附加属性决定了如何访问该存储区。

储存类型是下列几种:

普通型(Normal)

为了提高效率、或执行预测读,处理器可以对该类型存储器的存取操作进行重排序。

设备型(Device)

该类型存储器与设备型或强顺序型存储器之间的存取操作,处理器将保持其顺序。

强顺序型(Strongly-ordered)

任何与该类型存储器相关的存取操作,处理器将保持其顺序。

对于设备型和强顺序型存储器的不同顺序要求,意味着存储系统可以将一个写操作缓存到一个设备型存储器中,但是不能缓存到一个强顺序型的存储器中。附加属性有:

可共享(ShaSharreableeable)

对于可共享的存储区,在多总线主设备系统中,存储系统可提供主设备之间的数据同步,例如某个带有DMA控制器的处理器。

强顺序型存储器都具有可共享属性。

如果多个总线主设备访问一个不可分享的存储区域,必须通过软件来保证多个总线主设备之间的数据一致性。

注意:仅当处理器在共享存储器的多处理器系统中时,该属性才有关系。

不可执行(XN)

处理器将阻止不可执行存储区指令的执行。如果从一个不可执行存储区取指令并执行,将会产生一个硬故障。

2、存储系统的访问顺序

对于多数显式的存取指令所产生的存储器访问,存储系统不能保证指令的顺序与实际操作的顺序是一致的,而且对指令的重排序并不会影响到指令序列的行为结果。通常,如果正确的程序执行要求两次内存访问必须按程序的顺序来完成,那么软件必须在内存访问指令之间插入一个存储隔离指令,相关内容见第2-16页存储访问的软件排序。

然而,存储系统能够保证访问设备和强顺序存储区的顺序。对于两个存储访问指令A1和A2,如果A1在A2程序之前发生,则存储访问顺序是:

其中:

- 表示存储系统不能保证访问的顺序。

< 表示按照程序的顺序访问,也就是说A1始终在A2前被执行。

3、存储访问行为

对内存映射中每个区的访问行为是:

表1、存储访问行为

a、关于存储区、类型和附加属性,可见上文。

其中Code、SRAM和externalRAM区可以存放程序。

关于Cache和可共享存储区的访问限制

当一个系统包含Cache或可共享存储区时,一些存储区有额外的访问限制,有些区被再次细分,如表2所示:

表2、存储区的可共享性和缓存策略


a、更多关于存储区、类型和属性的内容见上文。

b、WT=写通方式,没有写分配。WBWA=写回方式,写分配。更多内容见词汇表(Glossary)。

4、软件对存储访问排序

指令在程序中的顺序并不能始终够保证相应存储操作处理的顺序。这是由于:•处理器可对一些存储访问进行重排列,以提高效率,只要不影响指令顺序的行为。

• 内存映射中的存储器或设备可能有不同的等待状态。

• 有一些存储访问被缓冲或是预测执行的。

上文中存储系统内存访问顺序的内容描述了存储系统如何保证存储访问顺序的情况。此外,如果存储访问的顺序很重要,那么软件必须包括存储隔离指令来保证所希望的顺序。处理器提供以下存储隔离指令:

DMB

数据存储隔离指令,确保DMB之前所有显式存储访问完成之后,其后的存储访问才可以开始执行。DMB的内容见下文。

DSB

数据同步隔离指令,当DSB之前所有的显式存储访问完成之后,其后的指令才可以开始执行。见下文的DSB指令。

ISB

在ISB后续的指令被取之前,处理器的流水线必须被清空。见下文的ISB指令。

存储隔离指令的实例:

向量表

如果程序改变向量表中的一个入口地址,而后允许相应的异常发生,就需要在操作中使用一条DMB指令。这能确保能在异常被允许后就立即执行时,处理器将使用新的异常向量。

自修改代码

如果一个程序包含有自修改代码,那么在代码修改之后应使用一个ISB指令。这能确保接下来的指令使用更新后的程序。

内存映射切换

如果系统包含一个内存映射切换机制,那么在切换了内存映射之后应使用一个DSB指令。这保证接下来的指令使用更新过的内存映射。

访问强顺序存储区,例如系统控制时钟,就不需要使用DMB指令。

5、存储系统的端格式

处理器把存储系统当作一个从0开始向上增长编号的字节集合。例如0-3字节存放第一个字,4-7字节存放第二个字。内存字节顺序是在实现时定义的,下面小节的内容描述了可能的实现方案:

• 字节不变的大端格式,见下文。

• 字节不变的大端格式,见下文。

参见下文应用中断和复位控制寄存器(ApplicationInterruptandResetControlRegister)的内容,阅读AIRCRENDIANNESS位域的内容来找到所实现的端格式。

字节不变大端格式

在字节不变大端格式中,处理器在存储器的最低地址存储字的最高字节,而字的最低字节被存放在最高地址。例如:

小端格式

在小端格式中,处理器在存储器的最低地址存放字的最低字节,而字的最高字节被存放在最高地址。例如

围观 599