RISC-V 处理器在处理异常时如何检测模式?

How the RISC-V processor detect modes when handling exceptions?

我看过riscv-privileged手册,知道如果发生中断或异常,当前模式将保存在xPP中(x可能是M或S)。

但是我发现很难理解xstatus中的这些xpp位。 xPP记录了之前的mode,但是current的mode存储在哪里?

此外,我认为这本手册很简短但缺少示例.. https://riscv.org/specifications/privileged-isa/

是否有推荐的额外学习手册?

我认为这将取决于您具体的 RISC-V 实现。 例如。我正在研究 RI5CY,您可以在 riscv_defines.sv 中看到,当前模式持有者定义为:

// Privileged mode
typedef enum logic[1:0] {
PRIV_LVL_M = 2'b11,
PRIV_LVL_H = 2'b10,
PRIV_LVL_S = 2'b01,
PRIV_LVL_U = 2'b00
} PrivLvl_t;

并在riscv_core.sv

中实例化
PrivLvl_t    current_priv_lvl;

遗憾的是,我不知道基金会提供了更多文档。 希望这有帮助