gpt4 book ai didi

verilog - RISC-V 异常与中断

转载 作者:行者123 更新时间:2023-12-05 00:47:05 29 4
gpt4 key购买 nike

我即将使用 CLINT 编写我自己的 RV32I 内核。但是,有些事情对我来说并不完全清楚。至少我在文档中找不到它。以下是特权 isa 规范对 ecall/ebreak 的说明:

ECALL and EBREAK cause the receiving privilege mode’s epc register to be set to the address of the ECALL or EBREAK instruction itself, not the address of the following instruction.

这意味着,为 mret 设置正确的 mepc 是 SW 处理程序的责任。我认为这种行为也适用于所有其他异常。

异步中断呢?硬件是否自动将 mepc 设置为 PC+4?从我在不同的 SW 处理程序中看到的情况来看,它似乎是这样的,但我实际上在文档中找不到它。

希望有人能指出正确的文档。

最佳答案

非特权 RISC-V 规范的 1.6 节定义异常由指令引发,中断由外部事件引发。

当引发(同步)异常时,触发指令无法正常完成。因此,返回地址有两种可能性:指令本身或下一条指令。两种解决方案都有意义。如果它指向指令本身,则更容易确定问题并做出相应 react 。如果它指向下一条指令,则从异常处理程序返回时地址不需要递增

(异步)中断不同,它们中断了独立线程的执行指令流。因此,返回地址只有一个合理的解决方案:第一条尚未完成的指令。因此,当从中断处理程序返回时,执行会从中断处继续执行。

在此背景下,特权 RISC-V 规范第 3.1.15 节中的简要定义

When a trap is taken into M-mode, mepc is written with the virtual address of the instruction that was interrupted or that encountered the exception.

很清楚:当引发中断时,mepc 指向第一个未完成的指令或引发异常的指令。

关于verilog - RISC-V 异常与中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58726942/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com