• Rocket core csr.io.interrupt


    https://mp.weixin.qq.com/s/KShCBLy5TqFVZg-uvcW-aw 

     

    简单介绍csr.io.interrupt相关的实现。

     

    本文目录:

    1. csr.io.interrupt

    2. id_xcpt

    3. ex_reg_xcpt_interrupt

    4. ex_reg_cause

    5. ctrl_killd

     

    以下正文:

    1. csr.io.interrupt

    csr.io.interrupt表示发生了中断:

    csr.io.interrupt在RocketImpl中主要有下文四处使用,下面逐一进行研究。

     

    2. id_xcpt

    id_xcpt表示id阶段检测到的异常:

    这里除了csr.io.interrupt能够触发id_xcpt之外,还有另外7种情况。即id_xcpt包含csr.io.interrupt,亦即id_xcpt所代表的异常包含了中断和id阶段检测到的一些异常情况。

     

    id_xcpt有两处用法,一个是传递给流水线寄存器(pipeline register) ex_reg_xcpt:

     

    一个是用于调整ex阶段alu的运算:

     

    3. ex_reg_xcpt_interrupt

    ex_reg_xcpt_interrupt表示是否发生了中断:

    其中包含三个条件:

    a. !take_pc: 表示不需要重新取指;

    b. ibuf…valid: 表示ibuf可以已经取出指令;

    c. csr.io.interrupt: 表示发生了中断;

    概括而言,就是在流水线正常流动的情况下,发生了中断。

     

    ex_reg_xcpt_interrupt这个变量在ex阶段使用,所以中断的发生对ex阶段产生影响。中断每时每刻都可能发生,流水线的每个阶段都可以检测中断是否发生,问题在于各个阶段有没有检测,而不能说中断发生在某个阶段。

     

    4. ex_reg_cause

    当发生中断时,ex_reg_cause中记录id_cause传递下来的中断原因:

     

    5. ctrl_killd

    如果中断发生,就要kill id阶段:

    从中可以看出,id阶段的异常并没有触发ctrl_killd。所以ex_reg_xcpt代表id阶段发生异常的情况,不包括中断:

    因为如果发生中断,则ctrl_killd=true, id_xcpt无法传递给ex_reg_xcpt。

     

  • 相关阅读:
    Grumpy: Go 上运行 Python!
    Qt5.7.0配置选项(configure非常详细的参数)
    vs2010 2013 2015+ 必备插件精选(15个)
    solr与.net主从复制
    MVC5模板部署到mono
    solr主从复制
    CentOS 5.5安装图解教程
    VMware7安装CentOS6.5教程
    VMware安装CentOS 图文教程
    在VirtualBox下安装CentOS教程(截图版)
  • 原文地址:https://www.cnblogs.com/wjcdx/p/15913243.html
Copyright © 2020-2023  润新知