FPGA開発日記

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

RISC-VにおけるRVWMOの仕様について読み直す (6)

RISC-VにおけるRVWMOのメモリモデルについて、仕様書を読み直すことにした。

もうちょっと詳しく、RISC-V仕様書のAppendxx A. RVWMOの節を読み解いていくことにした。

msyksphinz.hatenablog.com


セクションA.3.9では、パイプライン依存性に関する規則12と13が説明されており、これらはほとんどの実際のプロセッサパイプラインの実装に反映された振る舞いを示している。

  • 規則12: ロード後のストアによる依存性: 規則12は、プログラム順序において、操作aとbの間にあるストアmが、aにアドレスまたはデータ依存性を持ち、bがmによって書き込まれた値を返す場合に適用される。

この規則は、ストアのアドレスとデータが確定するまで、ロードがそのストアからフォワードすることができないことを示している。 図A.14を考える。(f)は(e)のデータが解決されるまで実行することはできない。なぜならば、(f)は(e)によって書かれた値(もしくは、グローバルメモリ順序でそれよりも後に発生した値)を変えさなければならないからである。 また、(d)が実行される機会よりも前に(e)がライトバックが実行されることにより古い値がメモリに書き込まれることはあってはならない。 したがって、(f)は(d)よりも先に実行されることはない。

PPOルール12および(d)と(e)のデータ依存性により、(d)は(f)よりもグローバルメモリ順序において先行しなければならない。

また、図A.15に示すような(e)と(g)の間に(f)のような別の書き込みがあった場合、(f)は(d)のデータ生成とは依存しないため、(f)と(e)のデータを生成する(d)との依存性は破壊される。

(e)と(g)の間の余分なストアにより、(d)は(g)よりも先行する必要はなくなった
  • 規則13: ストア前のロードによる依存性: 規則13は、プログラム順序において、操作aとbの間にある何らかの命令mがaにアドレス依存性を持つ場合に、bがストアである場合に適用される。

この規則は、メモリにおいて同じアドレスにアクセスする可能性があるすべての先行するロードが実行されるまで、ストアをメモリに実行することができないことを示している。 このロードは、ストアの前に実行されるように見えなければならないが、ストアが古い値を読む前にメモリの値を上書きする場合には、ロードは正しい値を読むことができなくなってしまう。

図A.16を考える: (f)は(e)のアドレスが解決するまでは実行することはできない:なぜならば、アドレスa1とs0が一致することが判明した場合を考慮する必要があるためである。 (f)は(d)による実行とアドレスがオーバラップするかどうかの確認が取れるまでは実行することはできない。

(d)と(e)のアドレス依存の可能性により、(d)は(f)よりも先行して実行される。