学习目标

  • 实现直接映射 Cache
  • 理解地址划分
  • 处理 Cache 缺失

9.1 思考:如何组织 Cache?

最简单的方式:每个内存块只能放在 Cache 的一个位置。

9.2 地址划分

31        12 11      4 3    0
[   Tag   ][ Index ][Offset]
  • Offset:块内偏移(16 字节块 = 4 位)
  • Index:Cache 行号(256 行 = 8 位)
  • Tag:标识不同内存块(20 位)

9.3 实现

reg [19:0] tag [255:0];
reg [127:0] data [255:0];
reg valid [255:0];

wire [7:0] index = addr[11:4];
wire [19:0] addr_tag = addr[31:12];
wire hit = valid[index] && (tag[index] == addr_tag);

思考:为什么需要 valid 位?

9.4 缺失处理

if (!hit) begin
    // 从内存读取
    data[index] <= mem_data;
    tag[index] <= addr_tag;
    valid[index] <= 1'b1;
end

下一步

第 10 章:组相联 Cache

更新时间: