为什么管道中没有 MEM.flush 异常?

Why there is no MEM.flush in pipeline for exceptions?

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

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

谢谢。

这种图肯定是不全的,我就不当真了。

文中未提及虚拟内存、地址转换、load/store 故障,甚至指令内存地址转换和故障等。

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

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

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

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