• Rocket core wb_reg_wdata


    https://mp.weixin.qq.com/s/6Xb2INIqWP5mFy2nR3l6AA

     

    简单介绍wb_reg_wdata相关的实现。

     

    1. wb_reg_wdata的正常使用

     

    正常情况下,wb_reg_wdata寄存器用于存放要回写到寄存器的数据,比如数学运算指令的运算结果,用于生成rf_wdata:

     

    不考虑scie和fpu的情况下,wb_reg_wdata来自于mem_int_wdata:

     

    如果是add/sub等指令,mem_int_wdata使用mem_reg_wdata更新:

     

    在不考虑scie的情况下,mem_reg_wdata使用alu.io.out的计算结果进行更新:

     

    在没有异常的情况下,alu的输入参数使用指令编码中指定的源参数寄存器或者立即数:

     

    2. wb_reg_wdata的异常使用

     

    在id阶段发生异常的情况下,会对alu的运算参数进行调整:

    这些调整主要是用于计算发生异常的指令的地址。因为指令也存在某种存储比如内存中,所以这里计算的是引发异常的指令的内存地址。之所以这样说,是为了以示区别,因为指令地址pc本身也会沿着流水线向下游传递。

     

    alu的计算结果alu.io.out存入mem_reg_wdata中:

     

    在发生中断的情况下,mem_reg_wdata同样用于生成mem_int_wdata的值:

    这也是mem_int_wdata中int所代表的中断的意义。

     

    mem_int_wdata用于更新wb_reg_wdata:

     

    在发生中断的情况下,wb_valid为假,不能wb_reg_wdata不能用于回写寄存器:

     

    其用途在于在tval_valid的控制下,用于更新csr.io.tval的值(以及用于更新csr寄存器的值):

     

    csr.io.tval的值用于填入mtval这样的寄存器。mtval寄存器中存放的是用于辅助软件处理异常而记录的信息。这里主要是触发异常的内存地址,无论是数据的地址还是指令的地址。

     

  • 相关阅读:
    pythonchallenge 解谜 Level 6
    pythonchallenge 解谜 Level 5
    pythonchallenge 解谜 Level 4
    pythonchallenge 解谜 Level 3
    pythonchallenge 解谜 Level 2
    pythonchallenge 解谜 Level 1
    CCF 201912-2 回收站选址
    JavaWeb+JDBC+Servlet+SqlServer实现登录功能
    后台连接数据库的方法
    jQuery实现轮播图
  • 原文地址:https://www.cnblogs.com/wjcdx/p/16029340.html
Copyright © 2020-2023  润新知