cache
复杂
组件
Queue entry
主要封装的是在队列中的一个 packet,因为队列中的包可能产生地址重复之类的,因此重新封装下队列中的元素。主要用在 mshr 和 writebuffer 中。中间设置了一些方法,主要是检测地址冲突之类的,在查询的时候会返回一个 Target 类,是包括优先级在内的详细信息。
MSHR
Queue entry 的子类,主要重新封装了一下 target 和定义了基于 target 的 list,插入到当前 MSHR 的元素应该被维护在这个 target list 中。
Queue<T>
主要封装了三条队列,freelist 完全空闲,readylist 还在准备中流量还没发送到下游,allocatelist 流量完全发送到下游,这三个队列中的元素空间都是由一个 vector 申请的。然后提供方法来维护。
Cache MSHR
Queue<MSHR>
的封装。
Cache Write queue
和 mshr 同样的封装方法。
Tag
代表 cache 的 tag,同时直接将数据也封装进了这个里面,提供了查找的接口(access,没找到返回 null)和替换的接口(victim),不同的子类应该有不同的实现。
CacheBlk
块的实现,非常复杂。
packetqueue
一个队列,存储大量的packet,port 的实现在继承这个类来实现。
读写
读写主要在端口中实现。分别从 cpuside port 和 memside port 去看。
预取
基于 probepoint 实现的预取,主要需要关注 basecache 中定义的 probepoint,在主 prefetcher 中会对 notify 做响应(sms.cc),calculateprefetch 中实现子预取器的调用。