学习目标

  • 理解组相联结构
  • 实现替换算法
  • 提升命中率

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?

下一步

第 11 章:Cache 一致性

更新时间: