開発日記

Erlangをダラダラ書きます。

RISC-V アーキテクチャ(2)

RV32E(組み込み分野向け)

汎用レジスタ本数を16本に減らしたRV32I.

利点

  • チップ面積が小さい.

拡張命令

  • M / A / C のみOK.

問題

  • しかし,16本にするということは,スタックへ退避するための命令コードが増加する.これは,C拡張命令(16ビット)と組み合わせることで解消できる?

トルエンディアン

RISC-Vの命令配置はリトルエンディアン(バイト毎に下位側(右側)から並べる)に限定.

11223344(4バイトの16進数データ)→ 44332211(リトルエンディアン順)

エンディアン変換

  • 通信系のプロトコルでよく使われているビッグエンディアン形式にデータを変換する場合は,自力で頑張るしかなさそう.

16ビット可変長命令

  • C拡張命令の16ビットの命令を,32ビットの命令と混合して手軽に実行できる.

  • 命令をエンコードする際,命令ビットの下位2ビットから命令長を判別できる.(16ビットかどうか分かる)

命令エンコードの工夫

汎用レジスタの位置を固定

  • 命令ビットにおいて,2つのソースレジスタ(rs)とデスティネーションレジスタ(rd)の位置は固定.

ゆえに,デコード前にアクセスできる.

符号拡張した即値が,各命令形式で同じ桁

  • 符号拡張した即値は,各命令形式において出来る限り同じ位置になっている.

ゆえに,即値生成に用いる回路を共有できる.

符号拡張した即値の符号ビット / 最上位ビット(MSB)の位置を固定

  • 即値の符号ビットの位置が必ず最上位ビット(31番目)に位置している.

ゆえに,即値にの符号拡張命令処理を共通化 / 簡単化できる.

実行レベル/モード(特権状態)

各実行モードで参照できる資源を限定することで,ディペンダブル性を高めている.

プロセッサの実行モードは4段階

M ... マシンモード

H ... ハイパーバイザモード

S ... スーパバイザモード

U ... ユーザモード

組み合わせ

M ... 単純な組み込みシステム

M, U ... セキュアなく組み込みシステム

M, S, U ... UNIXに似たOSが動くシステム

M, H, S, U ハイパバイザで仮想化を行うシステム

riscv.org

five-embeddev.com

それでは.いろはにへとへと.