【问题标题】:Why there is no MEM.flush in pipeline for exceptions?为什么管道中没有 MEM.flush 用于异常?
【发布时间】:2020-04-28 06:08:13
【问题描述】:

Here is img of RISC-V pipeline with flush for exceptions

我对管道刷新异常有疑问。 在 RISC-V 中,管道中有 IF.flush、ID.flush 和 EX.flush 用于异常。 但我想知道为什么管道中没有 MEM.flush 用于异常。 我认为如果我们在 MEM 阶段检测到异常(例如 Invalid Data 内存访问),我们必须刷新 MEM 阶段以使 MEM.RegWrite 值为 0。

谢谢。

【问题讨论】:

    标签: exception pipeline flush riscv


    【解决方案1】:

    这类图表必然是不完整的,所以我不会太认真。

    文中没有提到虚拟内存、地址转换、加载/存储失败,甚至指令内存地址转换和失败等。

    这些图表中通常缺少的其他内容包括:

    • jal 类型指令捕获pc — 没有将pc 转发到寄存器的数据路径。
    • pc 从寄存器的变化,对于jr-type 的跳转寄存器——没有数据路径让寄存器去pc 说明。
    • 在这类图表中也没有缓存未命中(I$ 或 D$)的内容
    • 我已经提到缺少数据和指令存储器的地址转换
    • AUIPC 指令也缺少一些数据路径

    所以,图表肯定是不完整的。

    很可能对数据存储器访问(也用于指令存储器访问)进行了一些异常处理——只是在此图中未提及,因为此图通常忽略地址转换。

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 2014-11-10
      • 2011-12-12
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2020-09-16
      • 2017-06-18
      相关资源
      最近更新 更多