# 功能特性 ## 主要特性 - 支持 2 组 MMU: I-MMU 和 D-MMU,分别连接到 I-BUS 和 D-BUS 上。 - 每组 MMU 支持 2 个区域的地址映射,每个区域均有各自的使能信号控制。 - 地址区域大小可配置。 - 支持 Bypass 功能。 ## 功能说明 每组 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 大小空间的映射。 ### 多个 MMU 通道映射规则 - 同一片物理地址空间可以被多个虚拟地址空间映射,以实现 CPU 通过不同地址读取或写入同一片内存。 - 多个通道的虚拟地址空间不能重叠。 ## 使用说明 每个核都配置有 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 的数据,从而实现我们的目的。 ::: note 上述例子仅为示例说明,Fornax 项目已经在 E906 的地址空间属性配置上实现了不同地址空间映射到同一片 SRAM 的功能。 :::