0%

Champsim Utility Class

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 整数类型