• Rocket core ibuf vs. imem


    https://mp.weixin.qq.com/s/mbWZQxAVnnHBGOVZmXa1Eg

    简单介绍ibuf和imem的关系。

    本文目录:

    1. ibuf

    2. imem

    3. 连接关系

    4. ibuf的作用

    以下正文:

    1. ibuf

    ibuf是指令缓存,其io接口如下:

    其中:

    a. imem表示frontend的响应;

    b. kill表示是否要废弃当前缓存;

    c. pc表示当前指令的地址;

    d. btb_resp是branch target buffer的预测结果;

    e. inst是取得的指令;

    2. imem

    io.imem是一个FrontendIO的实例:

    也就是说,io.imem是一个FrontendIO。从上面可知,ibuf.io.imem是一个FrontendResp的实例。FrontendIO中包含请求和响应,而FrontendResp中只包含响应。

    3. 连接关系

    这里主要以ibuf.io为主要对象,看其各个接口的连接。

    1) ibuf.io.imem

    ibuf.io.imem是一个FrontendResp的实例,主要用于从io.imem接收返回。

    2) ibuf.io.kill

    take_pc同时输出给io.imem.req和ibuf.io.kill。

    对于io.imem.req.valid而言,表示要发起请求。

    对于ibuf.io.kill而言,表示要清除缓存。

    3) ibuf.io.pc

    表示与ibuf.io.inst指令的地址。

    4) ibuf.io.btb_resp

    从io.imem接收的BTB预测结果。在mem阶段使用。

    5) ibuf.io.inst

    从Frontend返回的指令扩展而成的结构化数据,方便流水线使用。

    4. ibuf的作用

    由上文分析可以看出:

    a. 流水线向imem发起取指请求;

    b. imem将取得的指令交给ibuf;

    c. 流水线向ibuf取出取指结果;

    既然流水线向imem发起请求,那么ibuf不存在缓存指令的作用。这里衍生出两个问题:

    a. ibuf的作用是什么;

    b. 指令缓存在哪里;

    1) ibuf的作用

    从ibuf的位置来看,其作用为把imem返回的指令进行进一步的处理,方便流水线使用。

    从ibuf的实现来看,ibuf的作用如下:

    a. 扩展指令,包括普通指令和RVC指令;

    b. 解析异常;

    2) 指令缓存在哪里

    从位置上看,指令缓存的位置在io.imem.req之后。因为io.imem.req是FrontendReq的实例,那么指令缓存在Frontend之中。从Frontend结构上看,这个模块是ICache:

  • 相关阅读:
    onLoad和DomContentLoad的区别
    懒加载和预加载区别
    各大浏览器特点
    移动端适配
    清除浮动的方法
    rem的计算
    粗结MySql数据库基础知识点之一
    单例模式(饿汉式单例模式与懒汉式单例模式)
    关于ajax技术
    浅谈EL与JSTL
  • 原文地址:https://www.cnblogs.com/wjcdx/p/15913235.html
Copyright © 2020-2023  润新知