FPGA開発日記

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

RISC-V ハイパーバイザー拡張の勉強 (3. hedeleg / hideleg / hvip / hip / hieレジスタ)

5.2.2 ハイパーバイザーTrap移譲レジスタ (hedeleg / hideleg)

hedeleghidelegはHSXLENビットの読み書き可能なレジスタで、図5.3図5.4にそれぞれレジスタのフォーマットを示す。デフォルトでは、すべての特権レベルのすべてのトラップはM-Modeで処理されるが、通常はmedelegmidelegCSRレジスタを使用しtえいくつかのトラップをHS-Modeに移譲する。hedeleghidelegCSRはこれらのトラップをさらにVS-Modeゲストに移譲することができる; これらのレジスタのレイアウトはmedelegmidelegのレイアウトと同一である。

f:id:msyksphinz:20210210231026p:plain
図5.3:ハイパーバイザー例外移譲レジスタ(hedeleg)
f:id:msyksphinz:20210210231046p:plain
図5.4:ハイパーバイザー割り込み移譲レジスタ(hideleg)
ビット 属性 該当する例外
0 (本文を参照のこと) 命令アドレスミスアライン
1 書き込み可能 命令アクセスフォルト
2 書き込み可能 不正命令例外
3 書き込み可能 ブレークポイント
4 書き込み可能 ロードアドレスミスアライン
5 書き込み可能 ロードアクセスフォルト
6 書き込み可能 ストア/AMOアドレスミスアライン
7 書き込み可能 ストア/AMOアクセスフォルト
8 書き込み可能 Environment Call from U-Mode or VU-Mode
9 読み込み専用 0 Environment Call from HS-Mode
11 読み込み専用 0 Environment Call from M-Mode
12 書き込み可能 命令ページフォルト
13 書き込み可能 ロードページフォルト
15 書き込み可能 ストア/AMOページフォルト
20 読み込み専用 0 命令ゲストページフォルト
21 読み込み専用 0 ロードゲストページフォルト
22 読み込み専用 0 仮想命令
23 読み込み専用 0 ストア/AMOゲストページフォルト
表5.2: hedelegの書き込み可能ビットと0に固定されているビット

medelegを使用してHS-Modeに移譲される同期トラップは、V=1の場合にhedelegビットがセットされている場合にさらにVS-Modeまで移譲される。hedelegは書き込み可能なビットと、0に固定されているビットがある。hedelegの多くのビットは書き込み可能もしくはゼロ固定であり、表5.2それらをまとめている。命令アドレスミスアラインに相当するビット0についてはIALIGN=32の場合にのみ書き込み可能としなければならない。

hedelegの特定のビットが書き込み可能であることを要求することにより、実装のバリエーションを処理するためのハイパーバイザーの負担が軽減される。

midelegを使用してHS-Modeに移譲される例外は、hidelegのビットが設定されている場合にさらにVS-Modeまで移譲される。hidelegの15:0ビットのうち10ビット、6ビット、2ビットのみ書き込み可能である(これらは標準VSレベル割り込みに相当する)、それ以外のビットはゼロに固定されている。

仮想スーパバイザ―外部例外(要因コード10)がVS-Modeに乗されると、例外は自動的にVS-Modeのためにスーパーバイザー外部割込み(要因コード9)に移譲される。例外要因コードは同時にvscauseにも書き込まれる。同様に、仮想スーパーバイザータイマー割り込み(要因コード6)はVS-Modeにてスーパーバイザータイマー割り込み(要因コード5)に変換され、仮想スーパーバイザーソフトウェア割り込み(要因コード2)はVS-Modeにてスーパーバイザーソフトウェア割り込み(要因コード1)に変換される。同様の変換はプラットフォームかカスタム割り込み要因(要因コード16以上)にも適用される可能性がある。

5.2.3 ハイパーバイザー割り込みレジスタ (hvip, hip, hie)

hvipはHSXELNビットの読み書き可能なレジスタであり、ハイパーバイザーが該当する仮想割り込みをVS-Modeのために書き込むことができるかどうかを示す。hidelegにおける書き込み可能なビットは、hvipにおいても同様に書き込み可能であり、そうでないビットは同様に0に固定されている。

f:id:msyksphinz:20210210231113p:plain
図5.5:ハイパーバイザー仮想割り込みペンディングレジスタ(hvip)

hvipの標準的なビット位置(ビット15:0)のフォーマットを図5.6に示す。hvipのVSEIP=1に設定することにより、VSレベルの外部割込みがアサートされる; VSTIPを設定することにより、VSレベルのタイマー割り込みがアサートされる; VSSIP=1に設定することによりVSレベルのソフトウェア割り込みがアサートされる。

f:id:msyksphinz:20210210231133p:plain
図5.6:hvipの標準的なビット位置

hipおよびhieレジスタはHSXELNビットの読み書き可能なレジスタであり、HSレベルのsipおよびsieレジスタをそれぞれ補完するものである。hipレジスタはVSレベルおよびハイパーバイザー固有の割り込みがペンディングしていることを示すレジスタであり、一方でhieは割り込みが許可されているかどうかを示している。sipsieは、割り込みihiphieの同じビットiが設定され、かつスーパーバイザレベルの割り込みがグローバルに有効化されている場合にはHS-Modeでトラップされる。

f:id:msyksphinz:20210210231158p:plain
図5.7:ハイパーバイザー割り込みペンディングレジスタ
f:id:msyksphinz:20210210231215p:plain
図5.8:ハイパーバイザー割り込み許可レジスタ(hie)

sieにおける書き込み可能なビットは、hipおよびhieにおいてゼロに固定されている。したがって、sieおよびhieのゼロでないビットは常に排他的であり、sipおよびhipも同様である。

hipおよびhieの有効なビットはHSレベルのsipおよびsieには配置することができない。なぜならば、そのようにするとソフトウェアがハイパーバイザー拡張が実装されていないハードウェアにおいてハイパーバイザーをソフトウェアがエミュレートすることができないからである。

sieiビットがゼロに固定されている場合、hipの同じビットは書き込み可能であるか、読み込み専用である。もしhipのビットiが書き込み可能である場合、当該ビットに0を書き込むことにより、そのペンディングビットをクリアすることができる。もし割り込みihipのビットを設定することができるものの、hipの当該ビットが読み込み専用である場合、hvipの当該ビットをクリアするか、Execution Environmentコールを含む割り込みペンディングをクリアするためのいくつかのメカニズムを提供することが必要である。

hipにおいてペンディングすることのできるビットは、hieにおいても同じビットは書き込むことができる。hieの書き込みできないビットはゼロに固定されている。

f:id:msyksphinz:20210211180632p:plain
図5.9:`hip`の標準的なビット配置(ビット15:0)
f:id:msyksphinz:20210211180657p:plain
図5.10:`hie`の標準的なビット配置(ビット15:0)

hip.SGEIPおよびhip.SGEIEはスーパーバイザーレベル(HSレベル)のゲスト外部割込み向けの割り込みペンディングビットおよび割り込み許可ビットである。SGEIPはhipにおいては読み込み専用で、hgeipCSRおよびhgeieCSRの任意のビットがゼロでない場合の論理積が1である場合にのみ1が設定される。

hip.SSEIPおよびhie.VSEIEはVSレベルでの外部割込み向けの割り込みペンディングビットおよび割り込み許可ビットである。VSEIPはhipにおいて読み込み専用であり、以下の割り込み要因の論理ORである:

  • hvip.VSEIPビット
  • hstatus.VGEINにより選択されたhgeipビット; および
  • VSレベルで指定される任意のプラッタフォーム独自の外部割込み信号

hip.VSTIPおよびhie.VSTIEビットはVSレベルのタイマー割り込みの割り込みペンディングビットおよび割り込み許可ビットである。VSTIPはhipにおいて読み込み専用であり、hvipの論理ORである。VSTIPはhipにおいて読み込み専用であり、hvipの論理ORである。VSTIPおよび他の任意のプラットフォーム固有のタイマー割り込み信号はVSレベルに送信される。

hip.VSSIPおよびhie.VSSIEビットはVSレベルのソフトウェア割込みの割り込みペンディングビットおよび割り込み許可ビットである。hipのVSSIPビットはhvipの当該ビットの(書き込み可能な)エイリアスである。

HSモードにおける複数同時の割り込みが発生した場合、以下の降順の優先度によって処理される:SEI, SSI, STI, SGEI, VSEI, VSSI, VSTI。