Rust で RISC-V エミュ その1: 仕様書を確認する
どうも、たくチャレ(@takuchalle)です。
どうやら最近RISC-V
のエミュレータをRust
で書くのが流行っているようなので、僕も流行りに乗ってみることにします。
RISC-V とは
このブログを見てるくらいの人はRISC-V
の説明は不要かと思いますが、RISC-V
はオープンソースでライセンスフリーなISA
を定義しています。
通常x86
やARM
などのアーキテクチャはライセンス料を払ってCPU
を作ります。このライセンス料がバカにならないので、ライセンスフリーなRISC-V
に注目が集まっています。1
RISC-V の仕様書
オープンソースなアーキテクチャであるため公式サイトのSpecificationsに仕様書が公開されています。
RISC-V
の命令セットには下記の基本命令があります。
- RV32I(32bitアドレッシング・整数命令)
- RV32E(32bitアドレッシング・組み込み向け命令)
- RV64I(64bitアドレッシング・整数命令)
- RV128I(128bitアドレッシング・整数命令)
さらにM、A/F/D/Q/L/C/B/J/T/P/V/Nといった拡張命令がありますが、これらは追々見ていこうと思います。
まずは一番基本になりそうなRV32I
の命令を見ていこうと思います。
RV32I
RV32I
には以下のようなR/I/S/Uという4つの命令フォーマットがあります。

次に、最初に出てくる命令セットのADDI
を見てみます。ADDI
は指定したレジスタと即値を足して指定したレジスタに書き込む命令です。

これを見ると下位7bit
のopcode
とfunct3
を見ることで一意の命令を特定できそうです。
リポジトリ
ひとまずADDI
をデコードして実行するとこまで実装しました。次はriscv-tests
を通すために必要な命令や機能を実装していこうと思います。
リポジトリはこちら。
-
x86 や ARM と置き換わるというとそれは私は懐疑的です ↩︎
Read other posts