• Rocket core sboard.set


    https://mp.weixin.qq.com/s/UuIy-KkdlsE9aK7XwGA0GA

     

    简单介绍sboard.set相关的实现。

     

    1. sboard.set

     

    sboard用于记录对通用寄存器的占用,每个比特位代表一个寄存器。sboard.set用于实现对相应位的置位。

     

    1) sboard.set

     

    sboard.set方法的定义如下:

    其调用如下:

    其中:

    a. wb_set_sboard && wb_wen表示是否使能某一位的置位;

    b. wb_waddr表示要置的位对应的寄存器号;

     

    2) wb_set_sboard

     

    wb_set_sboard的赋值如下:

    不考虑div和rocc的情况,只剩下一种dcache miss的情况:

    wb_dcache_miss包含两个条件:

    a. wb阶段的当前指令涉及内存操作;

    b. dcache没有响应;

    反推以下:在dcache命中的情况下,mem阶段发起的load/store只需要一个时钟周期即可以得到响应,即在wb阶段可以得到响应。

     

    3) wb_wen

     

    wb_wen表示wb阶段要回写寄存器:

    其中:

    a. wb_valid表示当前wb阶段的指令合法;

    b. wb_ctrl.wxd表示当前指令要回写某个寄存器;

     

    wb_valid包含的条件如下:

    a. wb_reg_valid表示流水线寄存器合法,即上一个时钟周期的mem阶段没有ctrl_killm;

    b. wb阶段当前指令不需要重新执行:如果需要重新执行,则当前则不需要执行;

    c. wb阶段未检测到异常:如有异常则会被异常打断,等异常处理完成之后会恢复执行,当前则不需要执行;

     

    2. sboard.clear

     

    sboard.clear的调用关系如下:

    其中:

    a. ll_wen表示要是否要清除某一个通用寄存器对应的位;

    b. ll_waddr表示通用寄存器的编号;

    c. ll表示long-latency,即(相对不延迟而言的)长延迟;

     

    1) ll_wen

     

    ll_wen的赋值如下所示:

    如果忽略rocc和div的情况,则ll_wen只在dmem_resp_replay && dmem_resp_xpu的情况下被置为真。

     

    在这两个条件中:

    a. dmem_resp_replay表示dcache返回了数据,并且带有replay标志;推测replay标志的意思是读取内存之后返回的,而不是直接从dcache中返回的。在DCache的实现中,如果是cached response,replay被置为false:

    如果是uncached response,replay被置为true:

    b. dmem_resp_xpu取自tag的最低位,这一位记录自请求时传入的tag:

     

    因为后续没有计划研究DCache,所以这里推测一下:

    可以看到io.dmem.req的填充发生在ex阶段;在mem阶段填入了s1_data.data;在cached response的情况下,把s2填充到resp中:

     

    所以可以推测对应关系如下:

    a. s0对应ex阶段;

    b. s1对应mem阶段;

    c. s2对应wb阶段;

    在DCache的实现中,也有线索可以证实这一推测:

     

    2) ll_waddr

     

    ll_waddr表示要写的目标寄存器的编号,这个也记录自请求时传入的值。

     

    3. id_sboard_clear_bypass

     

    因为在sboard.set和sboard.clear中间有一个long-latency,所以会导致hazard:

    id_sboard_hazard用于检测是否存在hazard的情况,其中:

    a. sboard.read(rd)表示寄存器rd对应的位置位,亦即寄存器rd被占用;

    b. !id_sboard_clear_bypass(rd)表示没有要清除相应位,即当前时钟周期寄存器rd还在占用,其他指令不可使用;

     

  • 相关阅读:
    HDU6397
    容斥原理推导错排通项公式
    重复排列的证明
    圆排列证明
    rock-paper-scissors
    The more, The Better
    趁着情人节写点东西
    分层图最短路问题
    背包问题是否装满问题
    Python面向对象编程扑克牌发牌程序,另含大量Python代码!
  • 原文地址:https://www.cnblogs.com/wjcdx/p/16029330.html
Copyright © 2020-2023  润新知