第 10 章:组相联 Cache
学习目标
- 理解组相联结构
- 实现替换算法
- 提升命中率
10.1 思考:直接映射的问题
int a[256], b[256];
for (int i = 0; i < 256; i++)
sum += a[i] + b[i];
如果 a 和 b 映射到同一 Cache 行,会不断冲突!
解决方案:组相联
10.2 两路组相联
每组有 2 路(2 个位置)
地址可以放在任意一路
reg [19:0] tag_way0 [127:0];
reg [19:0] tag_way1 [127:0];
reg [127:0] data_way0 [127:0];
reg [127:0] data_way1 [127:0];
wire hit_way0 = valid0[index] && (tag_way0[index] == addr_tag);
wire hit_way1 = valid1[index] && (tag_way1[index] == addr_tag);
wire hit = hit_way0 || hit_way1;
10.3 LRU 替换算法
reg lru [127:0]; // 0: way0 最近使用, 1: way1 最近使用
// 替换最久未使用的路
wire replace_way = lru[index];
思考:4 路组相联如何实现 LRU?