自定义一级缓存操作
南湖架构支持基于 CSR 的自定义 l1 cache 操作.
L1 Cache 指令寄存器
cache 指令寄存器分成3类: 一个 CSR_CACHE_OP
缓存指令寄存器, 一个 CSR_OP_FINISH
缓存指令状态寄存器, CSR_CACHE_*
: 一级缓存控制寄存器, 自定义缓存指令的参数配置和结果返回都经由这些寄存器进行. 寄存器的基地址由 Sfetchctl
指定, 默认为 Sfetchctl
. 详细寄存器列表按顺序如下:
寄存器名称 | 说明 |
---|---|
CSR_CACHE_OP | cache op 指令码. 写入该寄存器会触发自定义 L1 cache 指令的执行 |
CSR_OP_FINISH | L1 cache 指令完成标志位 |
CACHE_LEVEL | 缓存指令目标选择. 0: ICache, 1: DCache |
CACHE_WAY | cache way select |
CACHE_IDX | cache index select |
CACHE_BANK_NUM | cache bank select |
CACHE_TAG_ECC | tag ecc |
reserved | reserved |
CACHE_TAG_LOW | tag data |
CACHE_TAG_HIGH | reserved |
reserved | reserved |
CACHE_DATA_ECC | data ecc |
CACHE_DATA_X | data [64(X+1)-1:64(X)] |
cache 指令码
自定义L1缓存指令支持的操作码如下:
操作 | 操作码 |
---|---|
READ_TAG_ECC | 0 |
READ_DATA_ECC | 1 |
READ_TAG | 2 |
READ_DATA | 3 |
WRITE_TAG_ECC | 4 |
WRITE_DATA_ECC | 5 |
WRITE_TAG | 6 |
WRITE_DATA | 7 |
自定义 L1 cache 指令基本执行流程
- 使用 CSR 指令写入 cache 指令寄存器中的参数配置寄存器, 清空 OP_FINISH 寄存器
- 向 CSR_CACHE_OP 寄存器写入指令码
- (可选) 轮询 CSR_OP_FINISH, 直到指令完成, CSR_OP_FINISH == 1
- 使用 CSR 指令读取 cache 指令寄存器中的结果寄存器, 获得 cache 指令结果