以下の内容はhttps://msyksphinz.hatenablog.com/entry/2025/06/23/000000より取得しました。


RISC-VのRVA23U64プロファイルについてまとめる

マニュアルを読みながら、RVA23U64のプロファイルについてまとめていこう。


RVA23U64プロファイル

RVA23U64プロファイルは、64ビットアプリケーションプロセッサのユーザーモード実行環境で利用可能なISA機能を規定する。 本プロファイルは、アプリケーションプロセッサファミリの中で最も多くのソフトウェアがターゲットとする、最重要プロファイルである。

RVA23U64 Mandatory Base

  • RV64IはRVA23U64の Mandatory Base ISAであり、リトルエンディアンである。
  • Unprivileged アーキテクチャ仕様に従い、 ECALL 命令は実行環境へのトラップを要求する。

必須拡張

RVA22U64で必須だった以下の拡張が含まれる。

  • M: 整数の乗算・除算命令
  • A: アトミック命令
  • F: 単精度浮動小数点命令
  • D: 倍精度浮動小数点命令
  • C: 圧縮命令
  • B: ビット操作命令
  • Zicsr: CSR命令(F拡張の存在により暗黙的に含まれる)
  • Zicntr: 基本的なカウンタとタイマー
  • Zihpm: ハードウェア・パフォーマンス・カウンタ
  • Ziccif: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、命令フェッチをサポートする必要があり、min(ILEN,XLEN) までの自然整列された 2 のべき乗サイズの命令フェッチ(つまり、RVA23 では 32 ビット)はアトミックでなければならない。
    • ちゃんとしたドキュメントがない。
    • ちなみに、ILENというのは最大命令長であり、だいたいの場合はILEN=32である。
  • Ziccrse: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、RsrvEventualをサポートしなければならない
    • RsrvEventualというのは、PMAの一つで、LR/SC(Load-Reserved/Store-Conditional)命令のサポートレベルを表す属性である。
      • RsrvNone
        • LR/SC がまったくサポートされない(予約操作自体が不可)。
      • RsrvNonEventual
        • LR/SC はサポートするが、「成功の保証(eventual success)」はない。周辺の競合状態が続くと、SC が何度実行しても成功しない可能性がある。
      • RsrvEventual
        • LR/SC をサポートし、かつ「最終的には成功が保証される」ことを意味する。すなわち、他のエージェントによる書き込み競合がなければ、SC はいずれ成功することがハードウェア的に保証される
  • Ziccamoa: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域は、A拡張の全アトミック命令をサポートしなければならない
  • Zicclsm: キャッシュ可能およびコヒーレンスのPMA(Physical Memory Attribute)を持つメインメモリ領域へのミスアラインロード・ストアをサポートしなければならない
  • Za64rs: 予約セットは連続し、自然にアラインされ、最大64バイトである
    • LR/SC(Load-Reserved/Store-Conditional)命令における予約セット(reservation set)の最大サイズと整列要件
    • LR/SC命令が操作対象とする予約セットは「連続していて、自然に整列(ナチュラルアライン)され、かつ最大64バイト以内」という制約を満たさなければならない。
    • したがって、予約セット(reservation set)は「自然整列した64バイトの連続領域」(例えば0x40–0x7F)で定義され、
      • LR が 0x40 で発行された場合 – 予約セットは [0x40, 0x40+64)、すなわち 0x40 から 0x7F までの範囲に張られる。
      • 同じ予約セット内で SC を 0x48 に対して発行すると – 0x48 はこの 0x40–0x7F 範囲内に含まれるため、競合する他エージェントがいなければ SC は「成功」する可能性を持つ(最終的成功が保証される)
  • Zihintpause: ポーズ・ヒント
  • Zic64b: キャッシュ・ブロックは64バイトで、アドレス空間上で自然にアラインされている必要がある
  • Zicbom: キャッシュ・ブロック管理命令
  • Zicbop: キャッシュ・ブロック・プリフェッチ命令
  • Zicboz: キャッシュ・ブロック・ゼロ命令
  • Zfhmin: 半精度浮動小数点命令
  • Zkt: データ独立な実行レイテンシ

新たに必須となった拡張(RVA23U64)

  • V: ベクトル拡張(RVA22U64ではオプション)
  • Zvfhmin: ベクトル最小半精度浮動小数点
  • Zvbb: ベクトル基本ビット操作命令
  • Zvkt: ベクトルデータ独立実行レイテンシ
  • Zihintntl: 非テンポラル・ローカリティ・ヒント
  • Zicond: 整数条件付き演算
  • Zimop: 未確定演算(may-be-operations)
  • Zcmop: 圧縮未確定演算
  • Zcb: 追加圧縮命令
  • Zfa: 追加浮動小数点命令
  • Zawrs: 予約セット待機命令
  • Supm: ポインタマスキング(PMLEN=0およびPMLEN=7の選択手段を最低限提供)

オプション拡張

ローカライズドオプション

  • Zvkng: ベクトル暗号NISTアルゴリズム(GCM付き)
  • Zvksg: ベクトル暗号ShangMiアルゴリズム(GCM付き)

RVA22でオプションだったスカラ暗号拡張(Zkn, Zks)はRVA23では非オプションとなった。ベクトル暗号が必須となり、より高速なためである。 GCM付きZvkng/Zvksgのみを標準化し、Zvbcは将来必須となる開発オプション、スカラZbcは拡張オプション(必須化の可能性は低い)である。

開発オプション

将来のRVAプロファイルで必須化を目指す開発オプション:

  • Zabha: バイト・ハーフワードのアトミックメモリ操作
  • Zacas: Compare-and-Swap命令
  • Ziccamoc: 上記属性を持つメインメモリ領域はAMOCASQレベルのPMAサポートを提供
    • ZiccamocはCompare-and-Swap命令の正しいサポートを保証する新拡張であり、特権アーキテクチャマニュアルのPMAセクションに追加予定。
  • Zvbc: ベクトルキャリーレス乗算
  • Zama16b: 自然整列16バイト境界をまたがない領域へのミスアラインロード・ストア・AMOはアトミック
    • Zama16bはSm1p13で追加されたMisaligned Atomicity Granule機能の存在を示す新拡張であり、PMAセクションに追加予定。

拡張オプション

  • Zfh: スカラ半精度浮動小数点(RVA22U64から継続)
  • Zbc: スカラキャリーレス乗算
  • Zicfilp: ランディングパッド
  • Zicfiss: シャドウスタック
  • Zvfh: ベクトル半精度浮動小数点
  • Zfbfmin: スカラBF16変換
  • Zvfbfmin: ベクトルBF16変換
  • Zvfbfwma: ベクトルBF16ワイドニング乗算加算

移行オプション

RVA23U64には移行オプションは存在しない。

スカラ暗号はRVA23U64ではオプションではなくなったが、Zbc拡張は拡張オプションとして公開されている。




以上の内容はhttps://msyksphinz.hatenablog.com/entry/2025/06/23/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14