缓存

简介

缓存(Cache)是位于 CPU 与主存之间的小容量高速存储器,用于保存最近访问过的指令和数据。由于 CPU 的运算速度远快于外部存储器(如 PSRAM/Flash)的访问速度,Cache 通过局部性原理将热点数据预先缓存在片内,从而大幅减少 CPU 的等待周期,同时降低对外部存储器接口的访问频率,显著提升系统吞吐量和响应速度。

Cache 配置

芯片中每个 CPU 内核均配备独立的指令缓存(I-Cache)和数据缓存(D-Cache),均采用 N 路组相联(N-way Set-Associative) 结构:

  • Way(路):Cache 被划分为多路,每路存储一份数据。N 路表示同一组中最多可同时保存 N 个不同地址映射的缓存行。

  • Set(组):地址按组索引,相同组内的多路之间可相互替换,通过替换算法管理。芯片采用 LRU 替换算法。

  • Cache Line(缓存行):每次从主存搬运数据的最小单位。行越长,一次可预取的连续数据越多;但若访问的数据分散,也会带来更多无效的数据搬运。

默认情况下,芯片读写内存采用如下策略:

  • 读: read-allocate。即 read miss 时,先将读地址按照 Cache Line 大小读取到 Cache 中, CPU 再从 Cache 中读取数据。

  • 写: write-allocate + write-back 。即如果 write hit,CPU 会将数据写到 Cache 中而不写到内存。如果 write miss,会先将写地址按照 Cache Line 大小读取到 Cache 中,CPU 再将数据写到 Cache 中。

备注

用户可以通过修改 MPU 或 MMU 配置来改变对应内存的 Cache 策略。

下表列出了芯片的缓存配置参数:

RTL8721Dx:

CPU

类型

大小

Way

缓存行长度

KM4

I-Cache

16KB

4

32B

D-Cache

16KB

4

32B

KM0

I-Cache

16KB

4

32B

D-Cache

16KB

4

32B

备注

关于 KM0 和 KM4 Cache 的更多信息,参考 Arm®v8-M Architecture Reference Manual

Cache 路限制

在实时性要求严格的场景中,关键代码或数据可能因 Cache 替换算法(如 LRU)被其他访问驱逐出 Cache,导致不可预期的访问延迟抖动。Cache 路限制功能允许开发者将指定地址范围的数据"锁定"到特定的 Cache 路中,使其不会被受限范围外的数据替换,从而为关键任务提供稳定可预期的 Cache 命中率。

RTL8721Dx:

不支持。

紧耦合内存 (TCM)

当 Cache 的部分或全部路不再用作缓存时,可通过寄存器配置将其重映射为紧耦合内存(Tightly-Coupled Memory,TCM)地址空间,由 CPU 直接访问。TCM 的访问延迟固定(通常为 0 等待周期),与 Cache 的概率性命中不同,TCM 提供确定性的访问时序,非常适合存放中断服务例程(ISR)、实时控制算法等对执行时序有严格要求的关键代码和数据。

备注

TCM 无法被 CPU 之外的总线 Master(如 DMA)访问。需经其他 Master 的数据不应放置于 TCM。

RTL8721Dx:

不支持。

寄存器

各芯片 CPU 的 Cache 相关寄存器映射及字段说明如下。

RTL8721Dx:

不支持。