Instructions

null

RISC-V RV32I Base Instruction Set Overview

Word size: 32 bits
Registers: 32 general-purpose registers (x0–x31)
x0 is always zero
All instructions are 32 bits wide


1. Arithmetic Instructions (R-type and I-type)

Mnemonic Type Operation Description
ADD rd, rs1, rs2 R rd = rs1 + rs2 Add
SUB rd, rs1, rs2 R rd = rs1 – rs2 Subtract
ADDI rd, rs1, imm I rd = rs1 + imm Add immediate
SLT rd, rs1, rs2 R rd = (rs1 < rs2)?1:0 Set 1 if less than (signed)
SLTU rd, rs1, rs2 R rd = (rs1 < rs2)?1:0 Set 1 if less than (unsigned)
SLTI rd, rs1, imm I rd = (rs1 < imm)?1:0 Set 1 if less than immediate
SLTIU rd, rs1, imm I rd = (rs1 < imm)?1:0 Unsigned version

2. Logical Instructions

Mnemonic Type Operation Description
AND rd, rs1, rs2 R rd = rs1 & rs2 Bitwise AND
OR rd, rs1, rs2 R rd = rs1 | rs2 Bitwise OR
XOR rd, rs1, rs2 R rd = rs1 ^ rs2 Bitwise XOR
ANDI rd, rs1, imm I rd = rs1 & imm AND immediate
ORI rd, rs1, imm I rd = rs1 | imm OR immediate
XORI rd, rs1, imm I rd = rs1 ^ imm XOR immediate

3. Shift Instructions

Mnemonic Type Operation Description
SLL rd, rs1, rs2 R rd = rs1 << (rs2[4:0]) Shift left logical
SRL rd, rs1, rs2 R rd = rs1 >> (rs2[4:0]) Shift right logical
SRA rd, rs1, rs2 R rd = rs1 >> (rs2[4:0]) (sign-extend) Shift right arithmetic
SLLI rd, rs1, shamt I rd = rs1 << shamt Shift left immediate
SRLI rd, rs1, shamt I rd = rs1 >> shamt Shift right logical imm
SRAI rd, rs1, shamt I rd = rs1 >> shamt (sign-extend) Shift right arithmetic imm

4. Load Instructions (I-type)

Mnemonic Type Operation Description
LB rd, offset(rs1) I Load byte (sign-extend) 8 bits
LH rd, offset(rs1) I Load halfword (sign-extend) 16 bits
LW rd, offset(rs1) I Load word 32 bits
LBU rd, offset(rs1) I Load byte unsigned 8 bits
LHU rd, offset(rs1) I Load halfword unsigned 16 bits

5. Store Instructions (S-type)

Mnemonic Type Operation Description
SB rs2, offset(rs1) S Store byte
SH rs2, offset(rs1) S Store halfword
SW rs2, offset(rs1) S Store word

6. Branch Instructions (B-type)

Mnemonic Type Operation Description
BEQ rs1, rs2, label B if (rs1 == rs2) branch
BNE rs1, rs2, label B if (rs1 != rs2) branch
BLT rs1, rs2, label B if (rs1 < rs2) branch (signed)
BGE rs1, rs2, label B if (rs1 ≥ rs2) branch (signed)
BLTU rs1, rs2, label B if (rs1 < rs2) branch (unsigned) ignore sign bit
BGEU rs1, rs2, label B if (rs1 ≥ rs2) branch (unsigned) ignore sign bit

7. Jump and Link Instructions

Mnemonic Type Operation Description
JAL rd, label J rd = PC+4; PC = label Jump to label and load PC+4 to rd
JALR rd, offset(rs1) I rd = PC+4; PC = rs1 + offset Jump and link register

8. Upper Immediate Instructions (U-type)

Mnemonic Type Operation Description
LUI rd, imm20 U rd = imm20 << 12 Load upper immediate 20 bits (lower 12 bits 0)
AUIPC rd, imm20 U rd = PC + (imm20 << 12) Add upper immediate to PC 20 bits (lower 12 bits 0)

9. System Instructions

Mnemonic Type Description
ECALL System Environment call (system call)
EBREAK System Breakpoint for debugger
FENCE System Memory ordering fence
CSRRS, CSRRW, etc. System Control and status register access (privileged)

Register Summary (RV32I)

Register ABI Name Description
x0 zero Constant 0
x1 ra Return address
x2 sp Stack pointer
x3 gp Global pointer
x4 tp Thread pointer
x5–x7 t0–t2 Temporaries
x8 s0/fp Saved register / frame pointer
x9 s1 Saved register
x10–x17 a0–a7 Function arguments / return values
x18–x27 s2–s11 Saved registers
x28–x31 t3–t6 Temporaries

Summary:

  • RV32I = 47 core instructions

  • Clean, orthogonal design (regular formats)

  • Easy to decode and ideal for hardware or teaching CPU design

System Instruction

Category Instructions Purpose
Environment call / break ECALL, EBREAK ECALL: request service from OS (like system call). EBREAK: trigger breakpoint for debugging.
CSR access CSRRW, CSRRS, CSRRC and variants Read/write or modify Control and Status Registers (CSRs) like mtime, mstatus, mtvec.
Return from trap MRET, SRET, URET Return from machine, supervisor, or user-mode trap/exception.
Fence / memory ordering FENCE, FENCE.I Ensure memory or instruction ordering (used for I/O and cache management).
Hints / no-op NOP, PAUSE For optimization or timing purposes; doesn’t change program state.

System Instruction

? RISC‑V ISA を学習するための演習課題案

以下は、RISC‑V(特に基本整数命令セット:例えば RV32I)の命令セットを学ぶための段階的な課題案です。

課題 目的 説明・詳細
課題 1:RV32I 命令形式の理解 命令形式(R, I, S, B, U, J 形式など)を手で書いて理解 – 各種命令形式(R, I, S, B, U, J)を取り上げ、それぞれのビット構造 (opcode, rd, rs1, rs2, immediate) を図示させる。
– 具体例(例:add, addi, lw, sw, beq, auipc, jal)を選んで、バイナリ (機械語) 表現を手で書かせる。
課題 2:手書きアセンブリ → バイナリ対応演習 命令がどのようにエンコードされるかを理解 – 簡単なアセンブリスニペットを提示 (例:addi x1, x0, 5beq x1, x2, label など)。
– それらをバイナリ (32ビット命令ワード) に変換させる。
– 相互に逆変換 (機械語からアセンブラ) も練習。
課題 3:実際にアセンブラを書いて動かす 実際にアセンブリを実行させて効果を確認 – 簡単なプログラム (アセンブリ) を書き、RISC‑V シミュレータ (例:spike) 上で実行。
– 例:2 レジスタを加算 → 結果をメモリに保存 → 分岐 → ループ。
– 実行後、レジスタ/メモリの内容を確認。
課題 4:命令セット最小化/拡張の考察 ISA の設計思想 (拡張性) を考える – RISC‑V の “基本命令 + 拡張命令” の概念 (たとえば M, A, C 拡張など) を説明させる。APS の記事などを参照。 APS|組み込み業界専門メディア
– 生徒に「もしあなたが小さな組み込みコアを設計するとき、どの命令拡張 (M, A, C など) を有効にするか」を議論させ、その理由を発表。
課題 5(発展):カスタム命令設計 ISA 拡張/カスタム命令の理解 – RISC‑V の拡張性を利用して、カスタム命令を考える。
– 例えば、ある特定処理(例:乗算+加算を一命令でやる、または特定条件で分岐+加算命令)を “新しい命令” として設計。
– 擬似的にその命令のビットエンコーディング (opcode フィールド) を定義し、アセンブリ形式を作成。
– 可能であれば、シミュレータ/エミュレータ (例:自作 or 既存ツール) による実行やシミュレーションを試す。 Reddit などでもカスタム命令拡張の議論がある。 Reddit+1

? 講義・解説/補足ポイント

  • 命令形式 (フォーマット) の重要性
    RISC‑V では命令が固定長 (基本 32 ビット)/即値形式などが統一されており、これが RISC の特徴。 rsg.ci.i.u-tokyo.ac.jp+2アメーバブログ(アメブロ)+2

  • 最小 ISA の思想
    RISC‑V の命令セット設計は「最小限のコア + 拡張」という哲学がある。 Qiita+1

  • レジスタ構成

  • 命令エンコーディング

    • 各命令形式 (R, I, S, B, U, J) のビットフィールド (opcode, funct3, funct7, immediate) を詳しく説明。<br> 例えば I形式 (即値あり): rd, rs1, imm12 など。 アメーバブログ(アメブロ)

  • ISA 拡張

    • 基本命令セット (I 拡張) に加えて、拡張 (M:乗除算、A:アトミック、C:圧縮、など) がある。 APS|組み込み業界専門メディア+1

    • 拡張を使う意味 (性能、コードサイズ、用途) を議論させる。


✅ 実施上のポイント

  • 使用ツール:RISC‑V アセンブリ+シミュレータ (例:spike / 他エミュレータ)

  • 環境準備:ツールチェイン (GCC for RISC‑V, spike など) の事前インストールを講習前に確認。 Gihyo 記事などを参考にセットアップ。 gihyo.jp

  • 資料:命令リファレンス (RV32I の命令一覧) をスライド/演習用に配布。例えば Qiita のまとめを参考に。 Qiita

  • 発展対応:カスタム命令を考える演習は、上級者や興味のある受講者向けにオプションとして追加。


もしよければ、Tang Nano 9K + PicoRV32 セミナー用に最適化された命令セット演習シラバス (時間配分 +解答例付き) を設計できます。やりましょうか?

あなた:
はい
ChatGPT:

以下は、Tang Nano 9K + PicoRV32 セミナー向け(または類似の RISC‑V FPGA 講習)で使える、RISC‑V 命令セット学習の演習シラバス案(時間配分+課題+解答・評価ポイント付き)です。


RISC‑V 命令セット演習シラバス案

全体概要(モジュール)

  • 対象 ISA:RV32I(基本 32 ビット整数命令)+オプションで拡張(例: MC など)

  • 目的:命令形式 (フォーマット)、エンコーディング、デコード、実行の基本を理解する。さらに、簡単なカスタム命令の設計を通じて ISA 拡張の考え方を学ぶ。

  • 所要時間:2時間(あるいは 3 セッション × 各 40 分など)


各セッション詳細

以下、3 セッション構成を想定。

セッション 時間 内容 演習 / 課題 解答・評価ポイント
セッション 1:命令形式とエンコーディング 40分 – RISC‑V の ISA のモジュラ構造(基本命令+拡張)
– 命令フォーマット (R, I, S, B, U, J 形式) 解説
課題 A:命令形式演習
– 与えられた命令 (例:add, addi, lw, sw, beq, jal) について、対応する命令形式 (R, I, …) を分類させる
– 各形式のビットフィールド (opcode, rd, rs1, rs2, immediate) を図示
– その命令を 32 ビットのバイナリ (機械語) に手でエンコードさせる
– 命令形式の分類が正しい
– ビットフィールド図が正確 (各フィールド幅, 符号ビット, 即値分割など)
– 手で作ったバイナリが仕様に沿っている (デコードして検証)
セッション 2:アセンブラ → 実行/デコード 40分 – 命令のデコード (バイナリ → 各フィールド)
– シミュレータ / 実行環境 (例:spike) を使った命令実行
課題 B:アセンブリ実行演習
– 簡単なアセンブリ・コード (例:加算 + 分岐 + メモリアクセス + ループ) を書いてもらう
– アセンブルしてシミュレータ (spike など) で実行
– 実行後、レジスタ / メモリの値を確認
– objdump などで命令のバイナリ/アセンブリ対応を調べる
– プログラムが正しく動作 (期待したループ回数、分岐、ロード/ストア結果など)
– objdump 等での確認結果が正しい
– 命令が正しくエンコード/実行されたかを説明できる
セッション 3:ISA 拡張とカスタム命令設計 40分 – RISC‑V の拡張命令 (例:M, C, A など) の紹介 APS|組み込み業界専門メディア+1
– カスタム命令 (ISA 拡張) の思想
– 教育・研究での命令拡張例
課題 C:カスタム命令設計
– 受講者に簡単な演算 (例: (a * b) + c や特定ビット操作) を一命令で行うカスタム命令を設計させる
– 命令のアセンブリ表記 (命令名、オペランド) を定義
– ビットエンコーディング (opcode, funct3/funct7 など) の案を作成
– (オプション) シミュレータ / 自作デコーダでその命令の動きをシミュレートさせる
– 命令設計の妥当性 (操作内容+オペランド設計が意味を持つ)
– ビットエンコーディングが適切 (命令フォーマット、opcode 重複の回避など)
– 拡張を選ぶ理由を説明できる (なぜその命令が必要か、どんなユースケースか)
– (オプション) シミュレーション結果が設計に合致する

補足・講師向けノート

  • 命令セット構造の解説
    RISC‑V は「基本命令 (Base ISA) + 拡張 (Extension)」というモジュラー構造を持つ。例:RV32I が基本。 APS|組み込み業界専門メディア+1

  • 命令形式
    各命令形式 (R, I, S, B, U, J) の構造 (フィールドの意味と幅) を示す。特に即値 (immediate) のビット割り付け (符号ビット、シフトなど) を丁寧に説明。

  • レジスタモデル
    RV32I では 32 本レジスタ (x0–x31) を使用。 東京大学情報学環 RSG+1

  • 拡張命令の解説

  • カスタム命令設計

    • RISC‑V では自分で独自命令 (カスタム命令) を定義できる。 EDA EXPRESS

    • カスタム命令設計の際には opcode の割り当て、命令形式 (どのフォーマットを使うか)、オペランド設計、エンコーディングを考える必要がある。

    • 実務/研究で使われる ISA 拡張例 (例えばカスタム SIMD 命令など) も紹介可能。 arXiv

  • 評価基準

    • 命令形式・エンコーディングが正しいか

    • プログラム (アセンブリ) の正しさとシミュレーション動作

    • (拡張) 命令設計の論理性と使いどころの妥当性


このシラバス案を受けて、講義資料 (スライド)、演習ガイド、配布用課題シート (Word または PDF) を作成すれば、RISC‑V ISA を深く理解させる実践的なモジュールが構築できます。