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;
遗憾的是,我不知道基金会提供了更多文档。
希望这有帮助
我看过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;
遗憾的是,我不知道基金会提供了更多文档。 希望这有帮助