跳到主要内容

访存系统总体结构

访存系统既要追求 Load 低延迟,又必须维护程序规定的内存顺序。它把地址生成、翻译、依赖判断、Cache 访问、重放和提交结合在一起。

源码总入口:mem/MemBlock.scala。子目录 mem/pipeline/、mem/lsqueue/、mem/sbuffer/、cache/dcache/ 分别承载流水、顺序检查、已提交 Store 缓冲和 L1 数据 Cache。

Load 的乐观执行​

为了低延迟,Load 会尽早执行,可能越过地址尚未确定的老 Store。硬件随后检查是否读错;如果发现依赖或一致性条件不满足,就 replay 或重定向。

Store 的保守可见性​

Store 可提前计算地址和数据,但在提交前不能不可逆地修改 Cache。Store Queue 保存推测 Store;提交后再进入 SBuffer/Cache 路径。

四类失败不要混在一起​

  • TLB miss:地址翻译尚未完成;
  • DCache miss:数据不在 L1;
  • bank conflict/端口冲突:资源暂不可用;
  • memory-order violation:先前乐观调度被证明错误。