缓存模块
1. 概述
本项目包含两个缓存模块:指令缓存 (I-Cache) 和数据缓存 (D-Cache)。
2. I-Cache (指令缓存)
2.1 规格
| 参数 | 值 |
| 容量 | 16KB |
| 关联度 | 2-way |
| 行大小 | 32B (8 words) |
| 组数 | 256 |
| 替换策略 | LRU |
| 写策略 | 只读 |
2.2 接口
| 信号 | 方向 | 描述 |
| clk | input | 时钟 |
| rst_n | input | 复位 |
| cpu_addr | input | CPU 地址 |
| cpu_rdata | output | 读回数据 |
| cpu_valid | input | 访问有效 |
| cpu_ready | output | 就绪 |
| axi_arvalid | output | AXI 读地址有效 |
| axi_arready | input | AXI 读地址就绪 |
| axi_rvalid | input | AXI 读数据有效 |
| axi_rdata | input | AXI 读数据 |
3. D-Cache (数据缓存)
3.1 规格
| 参数 | 值 |
| 容量 | 16KB |
| 关联度 | 2-way |
| 行大小 | 32B (8 words) |
| 组数 | 256 |
| 替换策略 | LRU |
| 写策略 | Write-Back |
| 写分配 | 是 |
3.2 写策略
- 写命中: 更新缓存行,标记脏位
- 写未命中: 分配缓存行,从下级存储加载,然后更新
4. 缓存行结构
| | Tag (20 bits) | Index (8 bits) | Offset (5 bits) |
|
缓存行格式
| | Valid (1bit) | Dirty (1bit) | Tag (20bits) | Data (256bits) |
|
5. 实现文件
| 文件 | 描述 |
icache.v | 指令缓存顶层 |
icache_ctrl.v | 指令缓存控制 |
icache_ram.v | 指令缓存 SRAM |
dcache.v | 数据缓存顶层 |
dcache_ctrl.v | 数据缓存控制 |
dcache_ram.v | 数据缓存 SRAM |
lru.v | LRU 替换逻辑 |