LoginSignup
4
5

RISC-V技術資料集

Last updated at Posted at 2023-12-09

RISC-V技術資料集

カリフォルニア大学バークレー校で開発され現在普及しつつあるRISC-Vの技術仕様や資料についてのまとめです。特に公式資料の日本語訳や日本語での解説について積極的に載せています。

基本的には自分用のメモですがRISC-Vの技術資料のまとめとして参考にしてください。必要に応じて適宜更新します。

RISC-V技術仕様

RISC-Vの技術仕様一覧より必要な情報をピックアップしました。

命令セットアーキテクチャ

CPUの命令セットアーキテクチャ(Instruction Set Architecture、 ISA)の仕様書です。

  • 非特権命令仕様(20191213)
    ユーザプログラムが使用する非特権命令(Unprivileged Instruction)の仕様に関する文書です。
  • 特権命令仕様(20211203)
    OSやファームウェアなどは非特権命令に加え特権命令(Privileged Instruction)も使用します。またRISC-Vではシステムを制御するために様々なControl and Status Registers(CSR)が使われています。さらにシステムを保護するためにユーザプログラムを動かすU-ModeとOSを動かすS-Modeなど複数の実行モードを持ち、メモリ保護のための機構を持ちます。外部機器の管理のための割り込み機構なども持ちます。これらOSやファームウェアに関するCPU側に必要な機能の仕様を規定しています。

承認済み拡張

承認済み拡張(Ratified Extension) のうち重要だと自分が思うものを抜き出しました。

RISC-VでのMacro-Op Fusion

RISC-Vでは上記のように色々な拡張が提案されていますが、Christopher Celio氏の論文では少ない命令でもMacro-Op Fusionで複数の命令をまとめることができるから余計な拡張命令は不要だという話があります。Macro-Op Fusionの資料が少ないので自分が調べたことをリストしておきます。

RISC-Vの実装

アウトオブオーダースーパースカラの高性能コア

パイプラインコアの例

変わり種

  • SERV
    1bit単位で処理することで非常に少ないリソースでRISC-Vの命令を実行できるようにしたコアです。

命令セット外の技術仕様

呼び出し規則(Calling Convention)や割り込み処理、デバッグやトレース、ファームウェアがOSに提供する機能など、システムを実装するのに必要な命令セット外の機能の仕様に関する文書です。リンク元は承認順ですが機能順に並べています。

UEFIとACPIとDevicetreeの仕様

ファームウェアとOSとのソフトウェアインターフェースに関する仕様であるUnified Extensible Firmware Interface(UEFI)と、ハードウェアの構成要素を集めて管理するAdvanced Configuration and Power Interface(ACPI)と、ハードウェアの構成要素を静的に管理するDevicetreeの仕様です。ACPIは電源管理だけの仕様ではなくハードウェア全般の管理に関する仕様です。

これらはRISC-V固有ではなくx86_64やARMでも広く使われており、OSを実装する場合やOSがないベアメタル(baremetal)環境でプログラミングする際には特に重要です。

ファームウェア

RISC-Vコンピュータを起動したときに最初に実行するファームウェアに関する資料です。

  • RISC-V Open Source Supervisor Binary Interface
    上記のSBIを実装するOpen Source Supervisor Binary Interface(OpenSBI)のリポジトリです。

  • das U-boot
    RISC-V以外にも様々なCPUに対応するブートローダーです。u-bootからUEFI環境を呼び出すことも可能です。

  • coreboot
    U-bootと同様に様々なCPUに対応するブートローダーです。Chromebookなどに使われています。x86ではSeaBiosをロードすることで旧来のOSをブートさせたりtianocoreをロードすることでUEFI環境を提供することができます。

    • corebootの文書
    • d0iasm氏によるARM版corebootのブートの流れの解説
    • Intel SkylakeでCache as Ramを利用するcorebootのコード
      comparison_coreboot_uefi.svgcorebootの構造を見てください。corebootでコードの検証(verstage)後に最初に行う仕事はDRAMの初期化(romstage)です。CPUは起動直後ではNANDに焼かれたプログラムを実行しレジスタとデータのやり取りをすることはできますが、DRAMを初期化するまではDRAMを使用できません。DRAMを初期化するコードをレジスタだけでやりくりするのは大変なので、現在ではCPUのキャッシュメモリをメインメモリと対応付けさせずRAMとして使用できるように初期化し(Cache-As-Ram、 CAR)、その領域を活用してDRAMの初期化コードを実行し、キャッシュメモリを通常のキャッシュとして使うよう設定し直す流れになっています。Intel Skylakeでの実際のコードはIntelが提供しているFirmware Support Package(FSP)を利用しているようです。RISC-VでもファームウェアでDRAMの初期化が必要な場合は同様にファームウェア側とCPU側でのCache-As-Ramへの対応が必要になると思います。

ベアメタル

OSなしでプログラムを実行するベアメタル環境でのプログラミングに関する資料です。

OS

RISC-VにはLinuxなど様々なOSが実装されています。

開発ツール

書籍

更新履歴

  • 2024/3/19
    • RISC-Vのアウトオブオーダースーパースカラの高性能コアにXiangShanに関する情報を追加
  • 2024/3/17
    • RISC-V原典について文章の修正と関連資料を追加
  • 2024/3/07
    • RISC-V カスタムのためのツールチェーン拡張へのリンクを追加
    • 細かい内容の追加・修正
  • 2024/3/02
    • 書籍2冊追加
    • 細かい内容の追加・修正
  • 2024/1/08
    • 細かい表現の修正
  • 2023/12/17
    • TSO関連でメモリモデル入門へのリンクを追加
  • 2023/12/09
    • 公開
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5