我将用CLINT编写我自己的RV32I内核。但是,有些事情我不太清楚。至少我在文档中找不到它。 这是特权isa规范对ecall / ebreak的说明:
ECALL和EBREAK导致将接收特权模式的epc寄存器设置为ECALL或EBREAK指令本身的地址,而不是以下指令的地址。
因此,这意味着为mret设置正确的mepc是SW处理程序的责任。我认为这种行为也适用于所有其他异常。
异步中断呢?硬件会自动将mepc设置为PC + 4吗?从我在不同的SW处理程序中看到的情况来看,似乎是这样,但实际上我在文档中找不到它。
希望有人可以指出正确的文档。