第 9 章:直接映射 Cache
学习目标
- 实现直接映射 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