Xtensa架构学习——3.5 内存

3.5 内存
Xtensa ISA基于32位虚拟和物理内存地址,可为指令和数据提供2^32或4GB地址空间。
3.5.1 内存寻址

图3-6显示了使用高速缓存配置时处理器对地址的解释示例。所有字段的宽度都是可配置的,并且在某些情况下,宽度可能为零(特别是,现在总是有零忽略位)。如果页面大小小于缓存的单个路径的大小,并且使用了物理标签,则缓存索引和缓存标签将重叠。

Xtensa架构学习——3.5 内存_第1张图片

没有区域保护选项或MMU选项,虚拟地址和物理地址是相同的; 如果物理地址配置为小于虚拟地址,虚拟地址仅通过截断映射到物理地址(忽略高位)。通过区域保护选项或MMU选项,虚拟页码被转换为物理页码。

没有区域保护选项或MMU选项,虚拟到物理转换的正式定义如下(注意环参数被忽略):

Xtensa架构学习——3.5 内存_第2张图片

第4.6.5节描述了MMU选项的解释。核心ISA支持小端(PC兼容)和大端(互联网兼容)地址模型作为配置参数。在本手册中:
msbFirst = 1是大端。
msbFirst = 0是小端。
3.5.2 寻址模式
核心指令集实现 寄存器+立即寻址模式。核心ISA不会实现自动增量存储或索引加载。但是,这种寻址模式对于协处理器是可能的。例如,浮点协处理器选项实现索引以及立即寻址模式。
3.5.3 程序计数器
32位程序计数器(PC)保存一个字节地址,可以寻址4GB的虚拟内存以获得指令。但是,当配置了窗口寄存器选项时,寄存器窗口调用指令仅存储返回地址的低30位。寄存器窗口返回指令保持PC的两个最高有效位不变。因此,使用寄存器窗口指令调用的子程序必须与调用放置在相同的1GB地址区域中。(窗口寄存器是啥???)
3.5.4取指令
本节使用第2章的符号描述处理器的执行循环。各个指令动作由Inst()语句表示,并在随后的章节中详细介绍。此代码的两个版本均受支持;一个用于小端(msbFirst = 0),另一个用于大端(msbFirst = 1)。这个定义是根据假设的对齐64位提取而定的,不应该与实际Xtensa ISA实现所使用的提取算法混淆。对齐的32位提取和未对齐的提取是其他可能的实现,它们会产生逻辑上等效的结果,但具有不同的定时。另外,实际的实现应该只为每个读取单元访问一次存储器,而不是每个指令一次,如第3.5.4.1节和第3.5.4.2节中的定义一样。

处理器可以推测性地取出程序计数器中的地址之后的指令。(与其他架构区别?)为了实现这一点,并且为了实现灵活性,软件不得在保护或缓存属性改变的边界之前的最后64个字节内放置指令。如果两种保护或属性中的一种无效,则此排除不适用。指令可以在从有效到无效或从无效到有效的转换之前放置在64字节之内 - 但不在任何其他转换之前。此外,如果实现了窗口寄存器选项,则软件不得在230(1 GB)边界的最后16个字节内放置指令,以便灵活地实现寄存器窗口调用和返回指令。处理器在这些排除区域中的操作未定义。 

下面小端取址语义与大端取址语义感兴趣的看一下手册吧,或者留言交流。

你可能感兴趣的:(资料)