FPGA開発日記

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

RISC-V Unprivileged ISAマニュアル20190608-Base-Ratified版の変更点を読み解く

f:id:msyksphinz:20181016221815p:plain

"The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA Document Version 20190608-Base-Ratified" が公開されてしばらくたったのだが、少し時間ができたので変更点の部分を簡単に調べてみることにした。

riscv.org


命令セットの分類は以下のように変更されている。

Base Version Status
RVWMO (RISC-Vメモリコンシステンシモデル) 2.0 Ratified
RV32I (32-bit RISC-VベースISA) 2.1 Ratified
RV64I (64-bit RISC-VベースISA) 2.1 Ratified
RV32E (32-bit RISC-V Embedded ISA) 1.9 Draft
RV128I (128-bit RISC-VベースISA) 1.7 Draft
Extension Version Status
Zifencei (命令フェッチ"Fence") 2.0 Ratified
Zicsr (Control and Status Register (CSR)命令) 2.0 Ratified
M (整数乗算) 2.0 Ratified
A (アトミック命令) 2.0 Frozen
F (単精度浮動小数点命令) 2.2 Ratified
D (倍精度浮動小数点命令) 2.2 Ratified
Q (4倍精度浮動小数点命令) 2.2 Ratified
C (16ビット圧縮命令) 2.0 Ratified
Ztso (Total-Store Orderingメモリアクセス) 0.1 Frozen
Counters (カウンタ・タイマ命令) 2.0 Draft
L (Decimal浮動小数点命令) 0.0 Draft
B (Bit-Manipulation命令) 0.0 Draft
J (JIT命令) 0.0 Draft
T (Transactional Memory) 0.0 Draft
P (Packed SIMD命令) 0.2 Draft
V (Vector命令) 0.7 Draft
N (ユーザレベル割り込み) 1.1 Draft
Zam (ミスアラインアトミック命令) 0.1 Draft

Prefaceより、変更点を要約。

  • 2019年初頭に理事会によって批准されたISAモジュールの説明を"Ratified"に移動。
  • A拡張をRatifiedから削除。
  • ISAモジュールのバージョンとの混同を避けるために文書のバージョン体系を変更。
  • 承認されたRVWMOメモリモデルの存在、および以前の基本ISAにあったFENCE.I、カウンタ、およびCSR命令の除外を反映して、基本整数ISAのバージョン番号を2.1にバージョンアップ。
  • F拡張、D拡張のバージョンを2.2にバージョンアップ。
    • バージョン2.1の正規のNaNを変更。
    • バージョン2.2がNaN Boxingスキームを定義。
    • FMINおよびFMAX命令の定義を変更。
  • ドキュメントの名前"Unprivileged"マニュアルに名称変更。
    • プラットフォームプロファイルの権限とは別のISA仕様への移行の一環
  • 実行環境(Execution Environments)、Hart、トラップ(Trap)、およびメモリアクセスのより明確で正確な定義を追加。
  • 定義済みの命令セットをカテゴライズする :
    • 標準(Standard)、予約済み(Reserved)、カスタム(Custom)、非標準(Non-standard)、不適合(Nonconforming)。
  • Big-Endian、Little Endianに関する操作を示す文章を削除。
  • ミスアラインのロードとストアの動作に関する説明を変更。
    • ユーザモードにおいて、ミスアラインのロードストアを見えないように処理する権限を与えるのではなく、実行環境のインターフェイスでミスアラインメモリアクセスのアドレス例外を参照できるようになった。これにより、エミュレートされるべきではないミスアラインのアクセス(Atomic操作を含む)に対して例外が通知されるようになった。
  • Zifencei ISAグループを定義。これにはFENCE.Iが含まれる。
    • FENCE.IはLinuxユーザABIから削除された。
    • ただし、RISC-Vではこの命令が唯一の標準命令フェッチコヒーレンスを取る命令である。
  • RV32Eを他の拡張と一緒に使用する際の禁止事項を削除。
  • RV32EおよびRV64Iの章で、特定のエンコーディングが不正命令例外を生成するというプラットフォーム固有の権限を削除。
  • カウンタ・タイマに関するCSR命令を別のグループに移動。Counter拡張Ver2.0としてマークされる。
    • カウンタ/タイマ命令は必須の基本ISAの一部とは見なされなくなったため。
    • カウンターの不正確さを含む未解決の問題があるため、Ratifiedの準備ができていない。
  • CSRアクセスOrderingモデルが追加された。
  • 2ビットのfmtフィールドで、浮動小数点命令用の16ビット半精度浮動小数点フォーマットを明示的に定義。
  • FMIN.fmtFMAX.fmtの符号付きゼロの動作を定義
    • IEEE-754-201xの提案仕様のminimumNumberとmaximumNumberの操作に準拠するように、Signaling-NaNの動作を変更。
  • メモリコンシステンシモデルRVWMOを定義。
  • "Zam"拡張を定義
    • ミスアラインなAMOを実行可能とする。
  • "Ztso"拡張を定義
    • RVWMOよりも厳密なメモリ一貫性モデルを適用する。
  • 説明と解説の改善。
  • 命令アドレスのアラインメントの制約を表すための略語としてIALIGNという用語を定義。
  • P拡張の章を削除。
  • V拡張の章を削除。

"Ratified"という記法について

Frozen, Draftに加えてRatifiedという表記に変更になったモジュールがある。Ratifiedについて、RISC-V Foundationの説明によると、

riscv.org

これはこれまでのFrozenと同じ意味だととらえて良いのだろうか。ソフトウェア開発者はRatifiedされた使用については同様のRISC-Vコアでは永久に動作させることができるとしており、Ratifiedになった仕様は変わることがないように思われる。

一方でFrozenはRatifiedの前の状態を示しており、これ以上大きく使用が変更される事は無いという意味を示している。つまり、

  • Draft(議論中) → Frozen(ほぼ決定) → Ratified(承認済み)

の手順を取るものと思われる。20190708版において現在Frozenの状態になっているのはAtomicのみであり、Atomicのみはまだ批准されていないものと思われる(これは"Zam"命令拡張の定義の追加によるものと思われる)。

RISC-V仕様書のバージョン体系を変更

これまでは

  • "The RISC-V User-Mode ISA Manual Version 2.2"

という表記だったものを、

  • "The RISC-V Instruction Set Manual. Volume I: Unprivileged ISA. Document Version 20190608-Base-Ratified"

と名称変更。これは仕様書中にバージョンの異なる複数の拡張が含まれていることを意味する。これはつまり、

  • "User-Mode"ではなく"Unprivileged ISA"に変更。"Privileged ISA"との対比と思われる。

命令セットカテゴリとは何を意味するのか

RISC-Vの命令エンコーディングおよびCSRアドレス領域に、明確なカテゴリが入るようになった。

  • Standard(標準) : RISC-V Foundationによって定義されている命令群のこと。同一のベースISAに関して、他の標準拡張命令と競合してはならない。
    • 現在のStandard拡張は"MAFDQLCBTPV"
  • Reserved(予約) : 現在命令は定義されていないが、将来の標準拡張のために予約されている。
  • Custom(カスタム) : 標準の拡張には決して使用されず、ベンダー固有の「非標準(Non-standard)」の拡張に対して有効となる。
  • 非標準「(Non-standard)」の中でも、StandardもしくはReservedのエンコーディングを使用する命令のことを「不適合(Non-conforming)」と定義する。

浮動小数点周りの仕様変更

16ビット半精度に関する命令定義が明確に追加。fmtビットフィールドに16ビット半精度の項目が追加。

fmt field Mnemonic Meaning
00 S 32-bit single-precision
01 D 64-bit double-precision
10 H 16-bit half-precision
11 Q 128-bit quad-precision

メモリアクセスに関する変更

  • IALIGNという用語を定義している。「命令アドレスアラインメント」基本的にRISC-Vの命令セットは32ビットなので32ビットであるが、C拡張が入る場合は16に緩和している。IALIGNは32と16以外の取ることは許されない。

  • RVWMOメモリコンシステンシモデルがBase ISAに追加。

  • "Zifencei"拡張命令が追加。このグループには、FENCE.I命令のみ含まれる。
  • "Zam" ミスアラインアトミック命令仕様
    • "A"拡張をさらに拡張するもの。Atomic操作をミスアラインの領域に対して実行した場合、"Zam"を実装しているプラットフォームでは、同じアドレスおよび同じサイズへの、非アトミックロードおよびストアを含む、他のアクセスを実行するだけで良い。"Zam"を実装している実行環境は、次の公理に従う。
    • ミスアラインアトミックのためのアトミック公理 :
      • rとwがHartHから発行されたミスアラインのロード・ストア命令であり、それぞれのロードストア命令が同じサイズである場合。
      • グローバルメモリオーダにおいて、Hart H以外からの同一アドレスおよび同一サイズのストア命令sは、rとwによって発行されるメモリアクセス操作の間に存在してはならない。
      • さらに、rとwと同じサイズで、グローバルメモリオーダにおいて、Hart H以外から発行されるロード命令lは、rとwによって発行されるメモリアクセス操作の間に存在してはならない。
  • "Ztso" 命令仕様を追加。Total Store Ordering