Champsim Utility Class
通信类 Channel
用于模块之间的通信,如 cache 各层级之间的通信
成员变量
RQ/PQ/WQ:
请求队列, RQ 为 read request; PQ 为 prefetch request; WQ 为 write request;
returned:
响应队列
接口
add_rq()/add_pq()/add_wq():
用于发送请求 (将 request_type 加入请求队列)
带宽类 bandwidth
用于限制操作的数量。初始化之后,最大带宽固定。之后每次会通过 comsume() 消耗部分带宽,当最大带宽消耗完就不能再进行 consume() 。
waitable
模板类,用于抽象一个延时等待的事件。
is_ready_at:
检查指定 cycle 下,是否满足预设的等待时间(如果未设置过事件,同样不满足要求)
has_unknown_readiness:
当前还未预设过时间(事件未设置)
MSHR refill 处理:
CACHE::operate()
中 MSHR 将下级 cache 接受到的返回数据
以及当前时间+FILL_LATENCY
打包为 waitable 对象赋值给 队列中地址匹配的 entry.data_promise 。经过FILL_LATENCY
后 ,CACHE::operate()
在 perform fill 时检查 MSHR 队列的每个 entry 的 data_promise 是否准备好时发现刚刚准备好的 waitable 对象,然后由CACHE::handle_fill
处理。
地址切片 address_slice
in address.h
, extent.h
模板类,基于模板 EXTENT 用于取出地址中的某些字段,如:
- block_offset(address) => address[LOG2_BLOCK_SIZE, 0]
- block_number(address) => address[63, LOG2_BLOCK_SIZE]
to():
模板特化函数,用于将类转换为 raw 整数类型