FPGA開発日記

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

RISC-V の Privileged Instruction Set の仕様書Ver1.7が公開 (Machine Level ISA)

RISC-V の Privileged Instruction Set の続き。

http://www.eecs.berkeley.edu/Pubs/TechRpts/2015/EECS-2015-49.pdf

第3章はMachine-Level ISAの章になっている。Machine-Levelでアクセスできるシステムレジスタの紹介と、命令セットの紹介。 システムレジスタはまあそんな感じかなという説明が続く。ちょっと面白いと思ったのは、

f:id:msyksphinz:20150512235900j:plain

mstatusレジスタは、現在の権限モードと例外許可ビットを0から4つまで保持することができる。 マシンモードが4つまであるなら、PRV0(=PRV)からPRV3まで保持しており、トラップが発生するとPRV-->PRV0に権限情報を移動していく。 他のアーキテクチャで詳細を調べたことが無いけれども、マシンレベルを容易に移動できるような仕組みになっている。

トラップを発生させる命令はこちら。

f:id:msyksphinz:20150513001107j:plain

  • ECALL(environment call) : より高位のマシンモードに繊維する。
  • EBREAK (environment break) : デバッガによりブレークポイントを発生させる。
  • ERET : 前のマシンモードに戻る。マシンモードに応じて、sepc / hepc / mepc からPC値を書き戻す。

f:id:msyksphinz:20150513001305j:plain

  • MRTS (Machine Redirect Trap to Supervisor) : トラップの処理をMモードからSモードに移譲する
  • MRTH (Machine Redirect Trap to Hypervisor) : トラップの処理をMモードからHモードに移譲する

あまりOSの知識がないので、これらの命令をどのように活用すれば良いのか分からない...

f:id:msyksphinz:20150513001446j:plain

  • WFI (wait for interrupt) : 割り込みの発生を待つ。実装に対するヒントを与える。