FPGA開発日記

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

RISC-Vの特権レジスタ群のアクセス権限まとめ

RISC-Vの特権レジスタには、ビットフィールド毎に各種機能が定義されているが、そのビットフィールドの書き込み権限については、それぞれ以下のような定義がなされている。

正常値書き込み 不正地書き込み 読み込み 備考
Reserved Writes Ignored, Reads Ignore Values (WIRI) 無視される 無視される デフォルト値が読まれる。 ソフトウェアは無視する必要がある。 将来の予約フィールド
Reserved Writes Preserve Values, Reads Ignore Values (WPRI) 読み込んだ値を保持するようにストアする必要がある 読み込んだ値を保持するようにストアする必要がある 書き込んだ値が読まれる 将来の予約フィールド
Write/Read Only Legal Values (WLRL) 正常書き込み 不正書き込み 正常に書いた場合は正常に読み込まれる。不正書き込み後は値は不定となる
Write Any Values, Reads Legal Values (WARL) 正常書き込み 不正書き込み 不正書き込みをしても正常な値が読まれる。

Reserved Writes Ignored, Reads Ignore Values (WIRI)

将来の利用のために予約されているフィールド。書き込むことは出来ず、読み込んでも意味のある値は読み込まれない。無視する必要がある。

WIRIビットフィールドの例

misaレジスタの利用されていないビットフィールドは、WIRIとして定義されている。こちらは書き込みも出来ないし、読み込んでも意味のある値は読み取れない。

f:id:msyksphinz:20170104224749p:plain

Reserved Writes Preserve Values, Reads Ignore Values (WPRI)

これも将来のために予約されているフィールド。書き込むことは出来るようだが、ソフトウェアは読み込んだ値をそのまま書き込まなければならない。 ビットフィールドとして、利用されていない部分がこの属性になっていることが多い。

WPRIビットフィールドの例

mstatusレジスタや、mieレジスタの利用されていない領域には、WPRI属性が割り当てられている。たぶんこの領域は一応書き込める。

f:id:msyksphinz:20170104225000p:plain

f:id:msyksphinz:20170104224938p:plain

Write/Read Only Legal Values (WLRL)

ソフトウェアにとって非常に厳しい属性。読み書き可能だが定義されたエンコーディング以外の値を書き込むと、動作が不定となる。

WLRLビットフィールドの例

mcauseの例外要因コードのビットフィールドはWLRLとして定義されている。つまりサポートされた例外のみをホールドされることが保証される。

f:id:msyksphinz:20170104225156p:plain

Write Any Values, Reads Legal Values (WARL)

WLRL属性と異なり、不正な値を書き込んでも、正常な値が保持される。

WARLビットーフィールドの例

misaレジスタにおけるアーキテクチャサポートのフィールドは、不正な値を書き込んでもサポートされた値が保持される。

f:id:msyksphinz:20170104225544p:plain