13.2. 功能特性¶
13.2.1. 主要特性¶
支持 2 组 MMU: I-MMU 和 D-MMU,分别连接到 I-BUS 和 D-BUS 上。
每组 MMU 支持 2 个区域的地址映射,每个区域均有各自的使能信号控制。
地址区域大小可配置。
支持 Bypass 功能。
13.2.2. 功能说明¶
每组 MMU 包含 2 个通道,每个通道包括以下三个寄存器:CHANNAL_VA、CHANNAL_PA 和 CHANNAL_SIZE。
CHANNAL_VA[21:0]:对应 MCU 输出的虚拟地址的高 22 位,可表示 1KB 分页的编号。
CHANNAL_PA[15:0]:对应物理地址,高 6 位补零,对应到 SRAM、Flash 或 PSRAM 所在的存储空间。
CHANNAL_SIZE[15:0]:表示以 1KB 为单位的页数。
也就是说,每个 MMU 通道可以实现任意 1KB 页面边界对齐,以 1KB 大小为粒度,支持 0~64MB 大小空间的映射。
13.2.2.1. 多个 MMU 通道映射规则¶
同一片物理地址空间可以被多个虚拟地址空间映射,以实现 CPU 通过不同地址读取或写入同一片内存。
多个通道的虚拟地址空间不能重叠。
13.2.3. 使用说明¶
每个核都配置有 MMU,MMU 负责虚拟地址和物理地址的转换,将片上或片外存储器的地址范围映射到某个虚拟存储区域。这些映射可根据应用程序的需求进行配置,因此每个应用程序的内存可根据其运行需求进行优化配置。
可配置的虚拟地址范围包括指令总线的 0x1000_0000~0x1FFF_FFFF 和数据总线的 0x2000_0000~0x3FFF_FFFF。
通过利用 MMU,我们可以实现以缓存或非缓存方式访问同一块物理地址:
在默认映射情况下,假设设置 0x2000_0000~0x2000_3FFF 区域为 SRAM0 的缓存区域。如果我们希望以非缓存方式访问 SRAM0 区域,可以通过设置 MMU 通道,将 0x3000_0000~0x3000_3FFF 映射到物理地址 SRAM0 区域。这时访问 0x3000_0000~0x3000_3FFF 区域的数据实际上是访问到 SRAM0 的数据,从而实现我们的目的。
上述例子仅为示例说明,Fornax 项目已经在 E906 的地址空间属性配置上实现了不同地址空间映射到同一片 SRAM 的功能。