FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

RISC-Vのトラップの処理方法の勉強(2)

msyksphinz.hatenablog.com

トラップの処理方法を勉強して、まずはrv32si-p-csrをパスするようにしたい...

トラップが発生したときに、どのような処理が発生するか?

RISC-Vのトラップは4種類用意されているが、トラップが発生すると、より上位のモードに移行する。 そのときに、より高いモードに移行することを"Vertical Trap"、モードを移行しないことを"Horizontal Trap"と言う。

通常はMachine-Modeに移行するのだが、その後でより低いレベルに移行する(これはmrts/mrthにより実現される)を省略するために、mtdelegレジスタを利用して直ぐにMachine-Mode以外のレベルに移行できる。

By default, all traps at any privilege level are handled in machine mode, though a machine-mode
handler can quickly redirect traps back to the appropriate level using mrts and mrth instructions
(Section 3.2.2). To increase performance, implementations can provide individual read/write bits
within mtdeleg to indicate that certain traps should be processed directly by a lower privilege level.