arm cortex a9内存访问

Arm cortex a9 memory access

我想知道ARM内核(Cortex-A系列处理器)访问内存的顺序?由内核生成的虚拟地址直接到内存,Instruction/Data从内存传输到内核。考虑核心已经为一些 data/instruction 生成了一个虚拟地址并且 TLB 有一个未命中,那么地址如何到达主内存(如果我没记错的话是 DRAM)以及数据如何通过 L2 和 L1 缓存到达核心.

如果需要怎么办 data/instruction 已经在一级缓存中?

如果需要怎么办 data/instruction 已经在二级缓存中?

我对缓存和 MMU 通信感到困惑。

tl;dr - 随心所欲。 ARM 非常灵活,SOC 供应商 and/or 系统程序员可以让内存子系统根据终端设备的特性和需求做很多不同的事情。

首先,MMU 具有明确规定如何使用缓存的字段。我建议阅读 Cortex-A 系列程序员指南第 9 章高速缓存第 10 章内存管理单元 .

有些术语是,

  1. PoC - 一致性点。
  2. PoU - 统一点。
  3. Strongly ordered.
  4. Device
  5. Normal

许多 MMU 属性和缓存会受到不同 CP15 和配置寄存器的影响。例如,L1 缓存中的数据 'exclusive configuration' 永远不会在 L2 中,这使得干净地编写 自修改代码 和其他动态更新变得特别困难。因此,即使对于特定的 Cortex-A 模型,系统配置也可能会发生变化(write-back/write-through、write-allocate/no 写入分配、可缓冲、不可缓存等)。

一般 DDR 核心内存的典型顺序是,

  1. 解析 virt -> phys
    1. 存在微型 TLB?是的,有 `phys`
    2. TLB 存在?是的,有 `phys`
    3. Table步行。有 `phys` 或故障。
  2. 访问标记为可缓存?是的,做 2.1。没有第 4 步。
    1. 在一级缓存中?是 2b.
    2. 如果读取return个数据。如果写入填充数据并标记drity(回写)。
  3. 在二级缓存中?是 3.1
    1. 如果读取return个数据。如果写入填充数据并标记drity(回写)。
  4. 运行 AXI 总线上的物理周期 ()。

What if required data/instruction is already in L1 cache?

What if required data/instruction is already in L2 cache?

对于正常情况,这些只是缓存命中。如果它是 'write-through' 和 'write' 则值在缓存中更新并写入内存。它是 'write-back' 值在缓存中更新并标记为脏。注 1 如果是读取,则使用缓存内存(在两种情况下)。

系统可能针对 设备 内存(即内存映射 USB 寄存器、全局可共享内存、multi-core/cpu 缓冲区等)进行完全不同的设置。通常设置将取决于系统成本性能功耗。即,write-through 缓存更容易实现(功耗更低,成本更低)但通常性能较低。

I am confused regarding cache and MMU communications.

主要是MMU会为缓存解析地址提供信息。 MMU 可能会说 use/not 使用缓存。它可能会告诉缓存它可以 'gang' 一起写入(可写入缓冲),但不应该无限期地存储它们,等等。因此许多 MMU 说明符可以有选择地改变缓存的行为。由于未定义 Cortex-A 缓存参数(由每个 SOC 制造商决定),通常情况下特定的 MMU 位可能在不同的系统上具有不同的行为。

注意 1:'dirty cache' 可能有针对 strexldrex 类型访问的额外 'broadcasts' 排除监视器信息。