Skip to content

Cache

多路组相联 cache

多路 cache 在状态机设计上基本没有区别,但是多路 cache 内部存储数据的方式与直接映射 cache 有所不同,内存中的块在 cache 中对应多个位置,但 cache 最多存储内存中数据的一份有效镜像

              way 1       way 2       way3        way4
        +-+-+-+-----+-+-+-+-----+-+-+-+-----+-+-+-+-----+
set1    |D|V|T|     |D|V|T|     |D|V|T|     |D|V|T|     |
        +-+-+-+-----+-+-+-+-----+-+-+-+-----+-+-+-+-----+
set2    |D|V|T|     |D|V|T|     |D|V|T|     |D|V|T|     |
        +-+-+-+-----+-+-+-+-----+-+-+-+-----+-+-+-+-----+
set3    |D|V|T|     |D|V|T|     |D|V|T|     |D|V|T|     |
        +-+-+-+-----+-+-+-+-----+-+-+-+-----+-+-+-+-----+
set4    |D|V|T|     |D|V|T|     |D|V|T|     |D|V|T|     |
        +-+-+-+-----+-+-+-+-----+-+-+-+-----+-+-+-+-----+

在处理多路 cache 读写请求时,我们需要同时读取对应 cache set 中所有 way 的 validdirty,和 tag 字段,并将请求的地址的 tag 段与所有 valid 为1的 cache way 的 tag 进行比对,如果有相等者则说明 cache 命中,反之则说明 cache 缺失,需要将对应的块从内存中读入
在将缺失块从内存中换入时,优先选择无效的 way,如果没有无效的 way,则需要通过特定的替换算法进行替换,这里我们推荐伪 LRU 算法,可以通过比较简单的机制达到较好的效果(参考《计算机系统结构》实验指导书)
在进行块的覆盖时,如果待覆盖的块为脏,则需要执行写回操作

注意,我们需要对 cache 的各个 way 进行并行读写,用一个周期完成对应 cache set 所有 way 的读写

PLRU

(未完待续)

块多字

(未完待续)

AXI Burst

(未完待续)


Last update: 2022年8月31日