FPGA開発日記

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

RISC-VにおけるRVWMOの仕様について読み直す (2. 構文依存性の定義)

RISC-VにおけるRVWMOのメモリモデルについて、仕様書を読み直すことにした。 ChatGPTの力を借りながら、要点をまとめていく。


Syntactic Dependencies

RVWMOメモリモデルの定義は、構文依存性の概念に部分的に基づいており、以下のように定義されている:

  • レジスタ 汎用レジスタ全体、CSRの一部、またはCSR全体を指す。CSRを通じて追跡される依存関係の粒度は、各CSRに固有であり、セクション16.2で定義されている。

構文依存性は、命令のソースレジスタ、命令の宛先レジスタ、および命令がソースレジスタから宛先レジスタへ依存関係を伝播する方法に関して定義される。

  • ソースレジスタ : 一般に、レジスタr(x0以外)は、以下のいずれかが当てはまる場合に命令iのソースレジスタであると考える:

    • iのオペコードにおいて、rs1rs2rs3rとして設定されている
    • iがCSR命令で、オペコードにおいてcsrがrに設定されている。iがCSRRWまたはCSRRWIでrdがx0に設定されている場合を除く。
    • rがCSRで、セクション16.3で定義されているようにiの暗黙のソースレジスタである
    • rがCSRで、iの他のソースレジスタとエイリアスを形成している
    • メモリ命令はまた、アドレスソースレジスタとデータソースレジスタをさらに指定する。
  • 宛先レジスタ : 一般に、レジスタr(x0以外)は、以下のいずれかが当てはまる場合に命令iの宛先レジスタであると考える:

    • iのオペコードにおいて、rdがrに設定されている
    • iがCSR命令で、オペコードにおいてcsrがrに設定されている。iがCSRRSまたはCSRRCでrs1がx0に設定されている場合、またはiがCSRRSIまたはCSRRCIでuimm[4:0]がゼロに設定されている場合を除く。
    • rがCSRで、セクション16.3で定義されているようにiの暗黙の宛先レジスタである
    • rがCSRで、iの他の宛先レジスタとエイリアスを形成している。
    • ほとんどの非メモリ命令は、それぞれのソースレジスタからそれぞれの宛先レジスタへ依存関係を持つ。しかし、このルールには例外があり、セクション16.3を参照すること。

ソースレジスタと宛先レジスタによる命令の構文依存性

命令jは、iの宛先レジスタsjのソースレジスタrを介して、命令iに構文依存性を持つ場合、以下のいずれかに相当する:

  • srが同じであり、ijの間にプログラム順序でレジスタrを宛先レジスタとする命令がない。
  • ijの間にプログラム順序で命令mがあり、以下のすべてが当てはまる:
    • jは宛先レジスタqとソースレジスタrを介してmに構文依存性を持つ
    • mは宛先レジスタsとソースレジスタpを介してiに構文依存性を持つ
    • mpからqへの依存関係を持つ (なんかいろいろ言っているがつまりijkでレジスタ依存関係がある)

メモリアクセスにおける構文依存性の定義:

また、以下の定義では、aおよびbを2つのメモリ操作、iおよびjをそれぞれaおよびbを生成する命令とする。 - 構文アドレス依存性 : rjのアドレスソースレジスタであり、jがソースレジスタrを介してiに構文依存性を持つ場合、baは構文アドレス依存性を持つという。 - 構文データ依存性 : bがストア操作であり、rjのデータソースレジスタであり、jがソースレジスタrを介してiに構文依存性を持つ場合、baに構文データ依存性を持つという。 - 構文制御依存性 : ijの間にプログラム順序で命令mがあり、mが分岐または間接ジャンプであり、miに構文依存性を持つ場合、baに構文制御依存性を持つという。

一般的に、非AMOロード命令はデータソースレジスタを持たず、条件なしの非AMOストア命令は宛先レジスタを持たない。 ただし、成功したSC命令は宛先レジスタとしてrdに指定されたレジスタを持つとみなされ、したがって命令はプログラム順序でそれに先行する成功したSC命令に構文依存性を持つ可能性がある。