FPGA開発日記

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

RISC-VのRVA/RVBプロファイルについての調査

RISC-Vのプロファイルについて、RVAに続いてRVBという謎のプロファイルが追加されていたので調査することにした。

RVAというのはRISC-Vのプロファイルのうちアプリケーション・プロセッサ向けのものである。 一方で、RVBというのもアプリケーション・プロセッサ向けのプロファイルであり、どの拡張を挿入すべきかで違いはあるのだが、その目的が良く分からない。

以下のブログも参考にしている:

fprox.substack.com

まず、RVA (RVA23U64) プロファイルで必要となる命令拡張についてリストアップしてみよう。

  • Mandatory : M / A / F / D / C / Zicsr / Zicntr / Zihpm / Ziccif / Ziccrse / Ziccamoa / Zicclsm / Za64rs / Zihintpause / Zba / Zbb / Zbs / Zic64b / Zicbom / Zicbop / Zicboz / Zfhmin / Zkt / V / Zvfmin / Zvbb / Zvkt / Zihintntl / Zicond / Zimop / Zcmop / Zcb / Zfa / Zawrs / Supm
  • Optional : Zvkng / Zvksg / Zabha / ZZacas / Ziccamoc / Zvbc / Zama16b / Zfh / Zbc / Zvfh / Zfbfmin / Zvfbfmin / Zvfbfwma

RVA23S64で必要となる拡張命令をリストアップしてみる。

  • Mandatory : Zifencei / Ss1p13 / Svbare / Sv39 / Svade / Ssccptr / Sstvecd / Sstvala / Sscouuterenw / Svpbmt / Svinval / Svnapot / Sstc / Sscofpmf / Ssnpm / Ssu64xl / H / Ssstateen / Shcounterenw / Shcounterenw / Shvstavala / Shtvala / Shvstvecd / Shvsatpa / Shgatpa
  • Optional : Sv48 / Sv57 / Svadu / Zkr / Sdext / Ssstrict / Svvptc / Sspm

もう訳が分からん。各命令拡張の詳細については、それぞれの仕様書を確認してほしい。

次に、RVB (RVB23U64) プロファイルについてリストアップしてみる。

  • Mandatory : M / A / F / D / C / Zicsr / Zicntr / Zihpm / Ziccif / Ziccrse / Ziccamoa / Zicclsm / Za64rs / Zihintpause / Zba / Zbb / Zbs / Zic64b / Zicbom / Zicbop / Zicboz / Zkt / Zihintntl / Zicond / Zimop / Zcmop / Zcb / Zfa / Zawrs
  • Optional :
    • RVA23U64と同様 : Zvbc / Zvkng / Zvksg
    • RVA23U64には登場しない : Zvkg / Zvknc / Zvksc / Zkn / Zks
    • RVB24U64ではMandatoryになる予定 : Zabha / ZZacas / Ziccamoc / Zama16b
    • RVA23U64ではMandatoryのもの : Zfhmin / V / Zvfmin / Zvbb / Zvkt / Supm
    • RVA23U64でもexpansion optionのもの : Zfh / Zbc / Zvfh / Zfbfmin / Zvfbfmin / Zvfbfwma
    • RVA23U64からRVA24U64でMandatoryになる予定だが、RVBではその予定ではないもの : Zvbc

RVB23S64で必要となる拡張命令をリストアップしてみる。

  • Mandatory : Zifencei / Ss1p13 / Svbare / Sv39 / Svade / Ssccptr / Sstvecd / Sstvala / Sscouuterenw / Svpbmt / Svinval / Svnapot / Sstc / Sscofpmf / Ssu64xl
  • Optional : Ssnpm / Sspm / H / Ssstateen / Shcounterenw / Shcounterenw / Shvstavala / Shtvala / Shvstvecd / Shvsatpa / Shgatpa
    • RVA23S64でも同様 : Sv48 / Sv57 / Svadu / Zkr / Sdext / Ssstrict / Svvptc

ここまでリストアップしてみて、RVBの目的というのは何なのかというのを考えてみたが、良く分からない。

上記のブログでは、

RVB purpose: giving more flexibility to companies that are ready to develop custom software for their RISC-V implementation

これはRVBの目的である、RISC-V実装用のカスタムソフトウェアを開発する準備ができている企業により柔軟性を与えるという目的

これがどのような意味を持つのかが不明瞭で、ではRVAとRVBをどのように使い分ければよいのかも記載されていない。 せっかくプロファイルで仕様をまとめたのに、また分断化しそうで不安な点もありそうだ。

追記:プロファイルの全体をマップしたGoogle Spreadsheetがあるそうだ。

docs.google.com