因为master对cache的访问通常是cache line中的某些bytes,但当发生cache miss时,从memory读回来的是整个cache line。而此时master发送的地址却不一定是cache line的起始地址,而可能位于中间,因此递增到upper boundary时需要回卷到lower boundary,才能将该cache line读完。
缓存未命中(Cache Miss)
缓存未命中是指处理器尝试从缓存中读取数据时,发现所需的数据不在缓存中。这种情况下,处理器必须从主内存(或更高层级的缓存)中读取数据,并将其加载到缓存中。缓存未命中通常会导致较高的延迟,因为访问主内存比访问缓存慢得多。
Cache Line
Cache Line是缓存的基本单位,通常包含多个字节的数据。例如,一个典型的缓存行大小可能是64字节。当发生缓存未命中时,处理器通常会从主内存中读取整个缓存行,而不仅仅是请求的那几个字节,以提高未来的访问效率。
Wrap Burst
Wrap Burst是AXI协议中的一种突发类型,用于处理循环地址空间的读写操作。在这种模式下,地址在达到某个上限(upper boundary)后会自动回卷到下限(lower boundary),从而形成一个循环的地址序列。
具体解释
假设一个缓存行的大小是64字节,地址对齐到64字节的边界。当发生缓存未命中时,处理器需要从主内存中读取整个64字节的缓存行。然而,处理器发送的地址不一定是缓存行的起始地址,而可能是中间的某个地址。
例如:
- 缓存行的起始地址是
0x1000
。 - 处理器请求的地址是
0x1010
(即缓存行中的第16字节)。
在这种情况下,处理器需要读取从 0x1010
开始的64字节数据,但实际上需要读取的是从 0x1000
到 0x103F
的整个缓存行。为了实现这一点,AXI协议使用wrap突发类型。
Wrap Burst 的工作原理
-
初始地址:
- 处理器发送的初始地址是
0x1010
。
- 处理器发送的初始地址是
-
地址递增:
- AXI协议开始从
0x1010
读取数据,地址逐字节递增。 - 当地址递增到
0x103F
时,达到了缓存行的上限。
- AXI协议开始从
-
地址回卷:
- 根据wrap突发类型的规则,地址在达到上限
0x103F
后会自动回卷到下限0x1000
。 - 继续从
0x1000
开始读取剩余的数据,直到读取完整个64字节的缓存行。
- 根据wrap突发类型的规则,地址在达到上限
示例
假设处理器需要读取从 0x1010
开始的64字节数据:
- 第一次读取:从
0x1010
到0x103F
(共48字节)。 - 第二次读取:从
0x1000
到0x100F
(共16字节)。
通过这种方式,处理器可以读取完整的64字节缓存行,即使初始地址不是缓存行的起始地址。
总结
- 缓存未命中:处理器需要从主内存中读取整个缓存行。
- 初始地址:处理器发送的地址可能不是缓存行的起始地址。
- 地址回卷:使用wrap突发类型,地址在达到上限后会自动回卷到下限,确保读取完整个缓存行。