RISC-V原典 ざっと読みメモ

読もうと思っていたRISC-V原典を読む時間が少し取れたのでざっと読みしたメモを残しておく。

RISC-Vとは

RISC-Vは過去のプロセッサアーキテクチャに対する反省をくりこんだ新しいプロセッサの命令セットアーキテクチャである。
RISC-Vの開発はRISC-V基金で成り立っていて、著名なユーザー企業や既存プロセッサアーキテクチャからの脱却を目指すファブレスメーカーからの支援を受けている。

RISC-V原典

RISC-Vの命令セットアーキテクチャの要点をまとめた書籍。コアのアーキテクトである、David PattersonとAndrew Watermanの著書で原題は「The RISC-V Reader: An Open Architecture Atlas」。

タイトルに関して言うと正直、内容からするとこちらの原題のほうがしっくりくるが「Atlas」という言葉がそれほど一般的な用語でもないので編集者も悩んだのかな、などと。

RISC-V原典  オープンアーキテクチャのススメ

RISC-V原典 オープンアーキテクチャのススメ

内容についてのメモを少々

RV32I 基本整数ISA

  • ソフト開発がしやすいようにレジスタの本数を32本用意する。
  • 遅延スロットは規定しない。仕様が変わるとすぐに変動するから。
  • 条件つき実行は使用しない。複雑さの根源になる。
  • 3ソースオペランドも極力使用しない。
  • PCは特別扱いする。いつでもジャンプする可能性があると構造が複雑になる。
  • 構造が単純なことを持って実行効率を向上する。

まぁ、納得の行く話かなと。プログラマ観点で見るとARMでPC相対で飛ぶときに24とか16とか足してるのもなにそれってよく思っている。Thumbにジャンプするときに末尾のビット汚すやつとかもね。

RISC-Vのアセンブリ言語

特に印象に残ったところはない。。。(汗)

RV32M 乗算および除算

ARMの整数除算が最近までなかった、という話をちょうど最近していたところだったのでちょっと印象に残っている。

あと、ARMだと32x32->64の乗算が単一の命令で実現できたような気がする。RISC-Vでは2命令に分かれるんだな。

RV32FおよびRV32D:単精度および倍精度の浮動小数

浮動小数点系のアーキテクチャはIEEE754の規格に強く縛られるので野心的なことはしづらいのかなと。

整数、浮動小数レジスタで相当数あるので割り込み時のレジスタ退避が大変なことになるのではないだろうか。

RV32A アトミック命令

アトミック系の命令は下記の2パターンある。

  • AMO アトミックメモリ操作
  • ロードリザーブド/ストアコンディショナル

ロードリザーブド/ストアコンディショナルでまぁ、十分なはずだけど、プログラマ的にはアトミックメモリ操作が便利なので追加しましたってことらしい。

RV32C 圧縮命令

  • 命令デコーダで処理できるよう、RV32の他の命令と必ず対応付ける。

使えるレジスタが少ない、イミディエイトが5ビットしかない。まぁ、それで足りるってことなのかな。

RV32V ベクトル

。。。あまり読み込めていない。自分がベクトルアーキテクチャに詳しくないからなんだろうな。

インストラクションセットがまだできていないってここには書いてあるが現状はどうなのかな。

RV64 64ビットアドレス命令

  • RV64I RV64M RV64A RV64F/D RV64C(!) に対応している。
  • RV64VはRV32Vと同じ。
  • RV128というのもギャグかと思いきや、大規模メモリ利用のために真面目に検討している。

RV32/64 特権アーキテクチャ

特権関連
  • 特権に関わるモードはM/S/Uの三階層になっていてモダンなPOSIX向けのアーキテクチャである。(m:マシンモード、S:スーパーバイザーモード、U:ユーザーモード)
  • 一応、wfiという割り込み待ちの命令がある。
  • (当然だが)割り込みをSモードに委譲することができる。
  • PMPというメモリ保護機能がある

ARMとかと同じでモードは三階層。PMPは使うのかなこれ、、、いらなかったのでは。

ページング関連
  • 32ビットでは4K->4M->4Gという構造でページ構造を定義する。
  • 64ビットでは39ビットモードと48ビットモードがある。ページテーブルが深くなる。
  • TLBキャッシュクリアをハードウェアに伝える仕組みがある。

今後の拡張機能

  • B ビット操作
  • E 組み込み用標準拡張
  • H ハイパーバイザー拡張
  • J 動的翻訳言語向け
  • L 10進浮動小数
  • N ユーザーレベルの割り込み
  • P パック形式のSIMD
  • Q 4倍精度浮動小数

B,H,Nについては確実に需要はあると思うのだけれども、、、

Eとかどうだろう。今更多少のレジスタを減らすニーズがあるのだろうか。

Jについてもよく知らないけど、Jazzleなどがこれまで何度も仕様を変えてきていることに対する反省がまとめられているんだろうか。これは単純に知りたい。

最後に

RISC-Vは過去のしょうもない設計ミスについてよく反省されている感じがあるし、また、負の遺産によって複雑化してしまったプロセッサの構造を整理して新進のベンダにプロセッサを設計しやすくしている。(まぁ、読んでいると多少気になってしまうような点もないわけではないけれども。。。)
また、エコシステムについてもそれなりに考えられていて、中国を起点とした新たなプロセッサのムーブが起きる可能性が非常に高いと思う。日本のマイコンメーカーとかどうするのかな。

今後は書籍だけでなく、生の情報を収集していくかな、、、と思う。