跳转至

数据高速缓存 DCache

术语说明

缩写 全称 描述
TODO TODO TODO

子模块列表

子模块 描述
BankedDataArray 数据和ECC SRAM
MetaArray 元数据寄存器堆
TagArray Tag和ECC SRAM
ErrorArray 错误标志寄存器堆
PrefetchArray 预取元数据寄存器堆
AccessArray 访问元数据寄存器堆
LoadPipe Load访问DCache流水线
StorePipe Store访问DCache流水线
MainPipe DCache主流水线
MissQueue DCache Miss状态处理队列
WritebackQueue DCache数据写回请求处理队列
ProbeQueue Probe/Snoop请求处理队列
CtrlUnit DCache ECC注入控制器
AtomicsUnits 原子指令运算单元

DCache设计规格

Feature 描述
Data Cache 64KB,4way组相联,256组,每组8bank
Virtually Indexed, Physically Tagged(VIPT)
Tag和每个bank采用SEC-DED ECC
Cacheline 64Bytes
Replacement Pseudo-Least Recently Used(PLRU)
读写接口 3*128 bits读流水线
1*512 bits写流水线

Data RAM

对于每个访问DCache Data的请求,对DCache Data SRAM的返回数据,如下表表示的格式。

位域 描述
[71, 64] 64bits数据 ECC编码结果
[63, 0] 64bits数据

Tag RAM

对于每个访问DCache Tag的请求,对DCache Tag SRAM的返回数据,如下表表示的格式。

位域 描述
[42, 36] 36bits tag ECC编码结果
[35, 0] 36bits tag

Meta

对于每个访问DCache Meta的请求,对DCache Meta的返回数据,如下表表示的格式。

位域 描述
[1 : 0] Cacheline coherence元数据
2'b00 Nothing
2'b01 Branch
2'b10 Trunk
2'b11 Dirty

整体框图

DCache模块整体架构如 此图 所示。

DCache整体架构

功能描述

特征 1:Load请求处理

对于普通的Load请求,DCache从LoadUnit接收一条load指令后(实现的Load流水线有三条,可以并行处理三个load请求),根据计算得到的地址查询tagArray和metaArray,比较判断是否命中:若命中缓存行则返回数据响应;若缺失则分配MSHR (MissEntry) 项,将请求交给MissQueue处理,MissQueue负责向L2 Cache发送 Acquire 请求取回重填的数据,并等待L2 Cache返回的hint信号。当l2_hint到达后,向MainPipe发起回填请求,进行替换路的选取并将重填数据块写入存储单元,同时把取回的重填数据前递给LoadUnit完成响应;若被替换的块需要写回,则在WritebackQueue中向L2发送Release请求将其写回。 如果缺失的请求分配MSHR项失败,DCache会反馈一个MSHR分配失败的信号,由LoadUnit和LoadQueueReplay重新调度该load请求。

特征 2:Store请求处理

对于普通的Store请求,DCache从StoreBuffer接收一条store指令后,使用MainPipe流水线计算地址查询tag和meta,判断是否命中,若命中缓存行则直接更新DCache数据并返回应答;若缺失则分配MSHR将请求交给MissQueue,向L2请求要回填到Dcache的原目标数据行,并等待L2 Cache返回的hint信号。当l2_hint到达后,向MainPipe发起回填请求,进行替换路的选取并将重填数据块写入DCache存储单元,在完成对该数据的store操作后向StoreBuffer返回应答;若被替换的块需要写回,则在WritebackQueue中向L2发送Release请求将其写回。 如果缺失的请求分配MSHR项失败,DCache会反馈一个MSHR分配失败的信号,由StoreBuffer随后重新调度该store请求。

特征 3:原子指令处理

对于原子指令,由DCache的MainPipe流水线完成指令运算及读写操作,并返回响应。若数据缺失则同样向MissQueue发起请求,取回数据后继续执行该原子指令;对于AMO指令先完成运算操作, 再将结果写入;对于LR/SC指令,会设置/检查其 reservation set。在原子指令执行期间,核内不会向DCache发出其他请求(参见Memblock文档)。

特征 4:Probe请求处理

对于Probe请求,DCache从L2 Cache接收Probe请求后,进入MainPipe流水线修改被Probe的数据块的权限,命中后下一拍返回应答。

特征 5:替换与写回

DCache采用write-back和write-allocate的写策略,由一个replacer模块计算决定缺失请求回填后被替换的块,可配置random、lru、plru替换策略,默认选择使用plru策略;选出替换块后将其放入WritebackQueue队列中,向L2 Cache发出Release请求;而缺失的请求则从L2读取目标数据块后填入对应Cacheline。