risc-vプロセッサ導⼊を決める前に 知っておけば …...risc-v プロセッサ導...

46
RISC-Vプロセッサ導⼊を決める前に 知っておけば安⼼商⽤開発環境の 概要とメリット 1 IARシステムズ 技術部 殿下信二

Upload: others

Post on 18-Feb-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

RISC-Vプロセッサ導⼊を決める前に

知っておけば安⼼商⽤開発環境の

概要とメリット

1

IARシステムズ 技術部 殿下信二

Page 2: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

このセッションで学べる事

• 組込み開発で必要なRISC-Vの基礎を習得し、実行速度とコードサイズのバランスの良いコンパイラを上手に使用するための知識を習得

• ハンズオンセクションでは、RISC-Vの基礎知識をベースに、明日からRISC-Vを使い始める事が出来るための、EWRISC-Vの操作方法とプログラミング演習を行う

2

Page 3: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Agenda

–なぜRISC-Vが注目されるのですか?–RISC-Vプロセッサとは?– IAR Embedded Workbench for RISC-V–カスタム命令対応に関して–効率の良いコーディングとは?

3

Page 4: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

なぜRISC-Vが注目されるのですか

4

Page 5: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

RISC-V(リスクファイブ)とは何か?

• [RISC-V Foundation]という非営利団体が管理している命令セットアーキテクチャ(Instruction Set Architecture)で、ライセンス費⽤が不要で自由に使⽤する事ができます

• Armプロセッサ(Cortex-A,R,Mシリーズなど)やIntel社のx86プロセッサの命令セットアーキテクチャを自由に使用する事はできません

• 命令セットアーキテクチャには、知的財産権が含まれており、その権利を保有している企業に無断で使用する事は出来ません

• RISC-V命令セットアーキテクチャが動作するFPGAプロセッサ

• Thumb-2命令セットアーキテクチャが動作するFPGAプロセッサ

知的財産の侵害!

5

Page 6: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

RISC-Vで開発を始めるには?

• マイクロプロセッサのアーキテクチャを学ぶ– The RISC-V Instruction Set Manual Volume I

Unprivileged ISA Document Version 20190608-Base-Ratified

– The RISC-V Instruction Set Manual Volume IIPrivileged Architecture Document Version 20190608-Priv-MSU-Ratified

• 命令セットアーキテクチャ(Instruction Set Architecture)を理解して、HDL(ハードウェア記述言語)を使って、オリジナルマイコンを作成

• RISC-V公式サイトのコア(https://riscv.org/risc-v-cores/)をベースに開発

module riscv_core...(

input clk_i,input rst_i,input [ 31:0] mem_i_inst_i,input intr_i,input [ 31:0] reset_vector_i,input [ 31:0] cpu_id_i

6

FPGAビットストリーム

実行イメージ

FPGA統合開発環境 IAR Embedded Workbench for RISC-V

Artix-7 35T Arty FPGA 評価キット

I-jet

Page 7: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

とにかく早く始めたい

• 市販評価ボード(HiFive1 Rev Bなど)を使用すると、今までのマイコンと同様に開発を開始

IAR Embedded Workbench for RISC-V

I-jetSiFive社製 HiFive1 Rev B

7

Page 8: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

RISC-Vプロセッサとは?

8

Page 9: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

どんなプロセッサですか?• 命令セットアーキテクチャは、基本命令セットと拡張命令セットで構成• 基本命令セットは32ビット命令セット、拡張命令セット(C)対応で16ビット命令セットを使用可能

9

RV32I 32ビット基本整数命令セット(32ビット長レジスタ×32)RV32E 32ビット基本整数命令セット(32ビット長レジスタ×16)RV64I 64ビット基本整数命令セット(64ビット長レジスタ×32)RV128I 128ビット基本整数命令セット(128ビット長レジスタ×32)

【基本命令セット】

※The RISC-V Instruction Set Manual Volume I: User-Level ISA Document Version 2.2

M 整数除算・乗算 B ビット操作A アトミック命令 J 動的命令対応F 単精度浮動小数点(32bit) T トランザクショナルメモリ対応命令D 倍精度浮動小数点(64bit) P パックド形式SIMD命令Q 4倍精度浮動小数点数(128bit) V ベクタ演算命令C 圧縮命令(16ビット命令セット) N ユーザレベル割込みL 10進数浮動小数点 - -

【拡張命令セット】

Page 10: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

カスタム命令とは?

• 命令セットアーキテクチャ(Instruction Set Architecture)には、ユーザ拡張可能なビットフィールドが定義

10

inst[6:5]inst[4:2]

000 001 010 011 100 101 110 111(>32b)

00 LOAD LOAD-FP custom-0 MISC-MEM OP-IMM AUIPC OP-IMM-32 48b

01 STORE STORE-FP custom-1 AMO OP LUI OP-32 64b

10 MADD MSUB NMSUB NMADD OP-FP reserved custom-2/rv128

48b>=80b

11 BRANCH JALR reserved JAL SYSTEM reserved custom-3/rv128

48b>=80b

RISC-V base opcode map, inst[1:0]=11

※:The RISC-V Instruction Set Manual Volume I: Unprivileged ISA Document Version 20190608-Base-Ratified

Page 11: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

整数レジスタセット

• 基本命令セットサイズに応じて、レジスタサイズが設定• RV32Iは32ビット、RV64Iは64ビット、RV128Iは128ビット• レジスタは32個でRV32Eのみ16個

11

x0...

x15x16...

x31

031

RVI32E基本整数命令セット

RV32I基本整数命令セット

RV64I基本整数命令セット

RV128I基本整数命令セット

x0...

x15x16...

x31

063x0...

x15x16...

x31

0127x0...

x15

031

Page 12: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

浮動小数点レジスタセット

• 浮動小数点演算精度によって、レジスタサイズが異なります

f0f1...f15f16...f30f31

031単精度浮動小数点 倍精度浮動小数点 4倍精度浮動小数点

f0f1...f15f16...f30f31

063f0f1...f15f16...f30f31

0127

12

Page 13: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Control and Status Registers(CSR)(制御およびステータスレジスタ)について• 制御およびステータスレジスタ(CSR)を使用して、プロセッサの動作設定を行う• CSRレジスタのアクセスは、専用命令(CSRR,CSRW,CSRWI命令)を使用し、12ビッ

トのアドレス(0x000から0xFFF)を設定してアクセスを行います• プロセッサ動作モードでアクセスが制限される事の注意が必要です

13

【CSRレジスタ例】略称 名称 機能概要

mstatus Machine Status Register(マシンモードステータスレジスタ)

割込みの許可・禁止に関連する設定値を保持

mtvec Machine Trap Vector Register(マシンモードトラップベクタレジスタ)

トラップベクタのベースアドレスと割込み処理モード設定

mie Machine Interrupt Enable(マシンモード割込み許可レジスタ)

マシンモード割込み許可・許可を設定

mcause Machine Cause(マシンモード原因レジスタ)

マシンモード割込み要因を特定します

Page 14: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

動作モードとは

• オペレーティングシステムを利用して、ソフトウェアの安全性を確保するために、動作モードを設ける事が一般的に行われ、RISC-Vの場合、ユーザモード、スーパーバイザモード、マシンモードが定義されていますレベル モード名称 略称

0 ユーザモード U1 スーパーバイザモード S2 予約 -3 マシンモード M

レベル数 サポートモード 実装1 M(マシンモード) シンプル組込みシステム2 M,U(ユーザモード、マシンモード) セキュア組込みシステム3 M,S,U(ユーザモード、スーパーバイザモード、マシンモード) 高機能OSシステム

14

Page 15: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

例外の機能は?• 例外と割込みはRISC-Vアーキテクチャとして定義割込み 例外コード 内容

1 0 ユーザモードソフトウェア割込み1 1 スパーバイザモードソフトウェア割込み1 2 将来の標準使用のために予約済み1 3 マシンモードソフトウェア割込み1 4 ユーザモードタイマ割り込み1 5 スパーバイザモードタイマ割り込み1 6 将来の標準使用のために予約済み1 7 マシンモードタイマ割込み1 8 ユーザモード外部割り込み1 9 スパーバイザモード外部割り込み1 10 将来の標準使用のために予約済み1 11 マシン外部入力割込み1 12-15 将来の標準使用のために予約済み1 ≧16 プラットフォーム用に予約済み0 0 命令アドレス境界ミス0 1 命令アクセスフォルト0 2 異常命令0 3 ブレークポイント

割込み 例外コード 内容0 4 ロード命令アドレス境界ミス0 5 ロード命令アクセスフォルト0 6 ストア/アトミック命令アドレス境界ミス0 7 ストア/アトミック命令アクセスフォルト0 8 ユーザモードからのEnvironment call0 9 スパーバイザモードからのEnvironment call0 10 予約0 11 マシンモードからEnvironment call0 12 命令ページフォルト0 13 ロードページフォルト0 14 将来の標準使用のために予約済み0 15 ストア/アトミックフォルト0 16-23 将来の標準使用のために予約済み0 24-31 カスタム使用のために予約済み0 32-47 将来の標準使用のために予約済み0 48-63 カスタム使用のために予約済み0 ≧64 将来の標準使用のために予約済み

15

Page 16: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

例外と割込みに関して(SiFive社 FE310-G002の例)• 周辺ペリフェラルからの割込みは、プラットフォーム割込みコントローラ(PLIC)が優先度の判断を行

い、マシンモード外部割り込みが発生します

16

SIFive FE310-G002(RV32IMAC)

プロセッサコア

Platform-Level Interrupt Controller

(PLIC)プラットフォームレベル

割込みコントローラCore-LocalInterruptor

(CLINT)(コアローカル

中断器)

AON

UART×2

QSPI×3

GPIO

PWM×3

2

2

3

32

3

マシンモード外部

割込み

マシンモードソフトウェア割込み

マシンモードタイマ割り込み

Page 17: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Platform-Level Interrupt(PLI)(プラットフォームレベル割込み)• プラットフォームレベル割込みは、プラットフォームレベル割込みコントローラ

(PLIC)を使用して設定(SiFive FE310-G002 Manual v19p04)割込みID 割込み名称

1 ウオッチドック2 RTC3 UART04 UART15 QSPI06 QSPI17 QSPI2

8-39 GPIO0-GPIO3140-51 PWM

項目 仕様優先度 7レベル(3ビット)

多重割り込み

同じ優先順位のグローバル割り込み間の関係は、割り込みIDによって分割されます。 最小のIDを持つ割り込みは、最高の有効優先度を持ちます。

優先度 割込み禁止:0優先レベル最高位:1優先レベル最低位:7優先度値0は、「割り込みなし」を意味するために予約されており、割り込みを事実上無効にします。

17

Page 18: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

今までのプログラムの実行時間測定方法• プログラムで、I/Oポートに信号を出力し、計測器で測定し、実行時間を計測します

計測器を操作せずに、実行時間は測定出来な

いかな?

18

Page 19: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

void hpm_reset_counter(void){

__write_csr(_CSR_MCYCLE,0x0ul);__write_csr(_CSR_MCYCLEH,0x0ul);

}uint64_t hpm_read_counter(void){

uint64_t reg;

reg = __read_csr(_CSR_MCYCLE);reg |= (uint64_t)(__read_csr(_CSR_MCYCLEH)) <<

32;return( reg );

}

ハードウェアパフォーマンスモニタ(HPM)を使ったプログラムの実行時間測定方法

• ハードウェアパフォーマンスモニタ(HPM)で、プログラムの実行サイクル数を測定– 実行サイクル数×(1/動作周波数(Hz))=実行時間(秒)の式で実行時間を計算

計測器を使わずに、実行時間測定が出来る方が便利です!

19

Page 20: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Hardware Performance Monitor(HPM)(ハードウェアパフォーマンスモニタ)とは?• ハードウェアパフォーマンスモニタ(HPM)は、制御およびステータス(CSR)レジスタ

に含まれています• サイクルカウンタと命令実行数カウンタおよび、プロセッサの特定情報をカウント

する事が出来る、イベントカウンタを29個の合計31個の64ビットカウンタを搭載する事が出来ます

• サイクルカウンタを使用する事で、プログラムの実行時間を測定する事が可能です• イベントカウンタのカウント項目は、使用するプロセッサのマニュアルで確認を行

う事が必要です

20

※The RISC-V Instruction Set Manual Volume II: Privileged Architecture Document Version 20190608-Priv-MSU-Ratified

Page 21: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

IAR Embedded Workbench for RISC-V

21

Page 22: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

IAR Embedded Workbench for RISC-V

• RISC-Vの唯一の商用ツールベンダ• コードサイズと実行速度に優れた最適化• 静的コード解析ツールC-STATを統合• デバッグプローブを使用した実機デバッグ

とシミュレーション機能を搭載したC-SPYデバッガ

• 充実したテクニカルサポート• 機能安全認証とセキュリティソリューショ

ンを提供予定

22

Page 23: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

デバイスサポート

拡張命令セットM Integer Multiplication and DivisionF Single-Precision Floating-PointD Double-Precision Floating-PointC Compressed InstructionsX Non-Standard Instructions

基本命令セットRV32I Integer Instruction Set, 32-bit

メーカー サポートコアAndes A25, N25, N25F

MicroSemi MicroSemi AHB,MicroSemi AHBF,MicroSemi AXISiFive E20, E21, E24, E31, E34, E76

Syntacore SCR1

• IAR Embedded Workbench for RISC-V Ver1.11.1デバイスサポート状況

23

Page 24: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

さあ、開発を始めるぞ!

4ステップで、動作するプログラムが出来ます。

1.ワークスペースとプロジェクトを作り2.使用するデバイスを選択3.main()関数を含むソースファイルを追加4.デバッグ環境を設定!(シミュレータまたはターゲットを選択)

main()関数からデバッグを開始

24

Page 25: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

EWRISC-V C/C++コンパイラ概要

十分なテスト検証• 商用テストセット- Plum-Hall Validation test suite- Perennial EC++VS- Dinkum C++ Proofer

• 社内で500,000ラインのC/C++ テストを繰り返し実施

- プロセッサモード- メモリモデル- 最適化レベル

言語標準• ISO/IEC 14882:2015 (C++14,

C++17)• ISO/IEC 9899:2018 (C18)• ANSI X3.159-1989 (C89)• IEEE 754標準浮動小数点演算

オプションとしてサイズ制限なく実行速度を最大化

リンカで不使用コードを削除

コードサイズあるいは実行速度にフォーカスした複数レベルの最適化

コードの異なる箇所でサイズ優先、速度優先を使い分けてシステムとしてのバランスを実現

主要な最適化機能は個別で制御可能

複数ファイルコンパイルによってファイルを跨がった最適化を実現

25

Page 26: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

コンパイラ最適化動作

オブジェクトコード

Cソースコード

構文解析器

中間コード 高レベル最適化

コード生成

ターゲットコード 低レベル最適化

アセンブラ

コンパイラ

LW A0,-0x0(GP) C.ADDI A0,-0xFSW A0,-0x4(GP)

=

15y

x

x = y - 15; 関数インライン

デッドコード除去

ループアンローリング

のぞき穴的最適化

クロスコール

スケジューリング

01001000111001101001 Linker

リンク時最適化

26

Page 27: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

最適化の種類は?

• 最適化の種類によって効果は異なる最適化項目 最適化の効果

共通部分式除去 速度 サイズループアンローリング 速度 サイズ

関数インライン 速度 サイズコード・モーション 速度 サイズデッドコード除去 速度 サイズ静的クラスター 速度 サイズ

スケジューリング 速度 サイズのぞき穴的最適化 速度 サイズ

クロスコール 速度 サイズ

27

Page 28: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

GCC属性は対応済み

• GCC属性設定の一部は、オプション設定の「C/C++ Compiler」-「Language 1」-「Language conformance」の設定の「Standard with IAR extensions」を選択する事で「__attribute__ ((attribute-list))」の設定属性をサポート

alias aligned always_inline constructor

deprecated noinline noreturn packed

pcs section target transparent_union

unused used volatile weak

28

※:GCC属性の対応状況に関しては、「IAR C/C++ Development Guide Compiling and Linking for RISC-V」でご確認ください

Page 29: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

使用頻度の高い命令は組込み関数として用意!

• intrinsics.hヘッダファイルを使用する事で利用可能

29

関数名 機能概要__disable_interrupt 割込みを禁止します(mstatusレジスタのmieビットを0に設定)__enable_interrupt 割込みを禁止します(mstatusレジスタのmieビットを1に設定)__get_interrupt_state 割込み状態取得__set_interrupt_state 割込み状態を設定__read_csr 制御およびステータスレジスタ(CSR)を読込__write_csr 制御およびステータスレジスタ(CSR)を書込__set_bits_csr 制御およびステータスレジスタ(CSR)の特定ビットを0にします__clear_bits_csr 制御およびステータスレジスタ(CSR)の特定ビットを1にします__no_operation nop命令※:「IAR C/C++ Development Guide Compiling and Linking for RISC-V」-「Part 2. Reference information」-「Intrinsic functions」

Page 30: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Control and Status Registers(CSR)(制御およびステータスレジスタ)のアクセス方法

• プロセッサの動作状態を設定するには、制御およびステータスレジスタ(CSR)で行います– 組込み関数用ヘッダファイル(intrinsics.h)で各種関数を使用する事ができます

機能 関数名CSRレジスタの指定ビットをクリアします unsigned int __clear_bits_csr(unsigned int reg,unsigned int value)CSRレジスタの指定ビットを設定しします unsigned int __set_bits_csr(unsigned int reg,unsigned int value)CSRレジスタを読込ます unsigned int __read_csr(unsigned int reg);CSRレジスタを書込みます unsigned int __write_csr(unsigned int reg,unsigned int value)

30

【レジスタ番号定義抜粋】定義名称 CSRアドレス

_CSR_MSTATUS 0x300 Machine Status Register (mstatus)マシンモードステータスレジスタ_CSR_MTVEC 0x305 Machine Trap Vector (mtvec)マシンモードトラップベクタ

_CSR_MIE 0x304 Machine Interrupt Enable (mie)マシンモード割込み許可レジスタ_CSR_MIP 0x344 Machine Interrupt Pending (mip)マシンモード割込み保留レジスタ

_CSR_MCAUSE 0x342 Machine Cause (mcause)マシンモード原因レジスタ

【組込関数抜粋】

Page 31: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

I-jet インサーキットデバッグプローブ

• RISC-VとArmコアに対応• ハイスピード USB 2.0 インタフェース (480Mbps)• 最大400mAまでI-jetからターゲット電源を供給可能*

過電流保護回路付き

• 最大32MHzのJTAGおよびシリアルワイヤデバッグ(SWD)クロック(MCUクロック速度の制限なし)

• 最大60MHzのSWO速度のサポート• Arty A7 boards用デバッグアダプタ

(*ADA-MIPI20-RISCV12)

31

Page 32: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

C-SPYデバッガ

コールスタック

コアレジスタ

変数ウオッチ

スタック使用状況

セミホスティング

逆アセンブラ

自動変数ウオッチ

周辺デバイスレジスタ

C/C++ソースコード

32

Page 33: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

カスタム命令対応に関して

33

Page 34: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

カスタム命令は .insnディレクティブで

• .insnディレクティブは、アセンブラでカスタム命令を生成• .insnディレクティブを使用して、CおよびC ++で作成されたプログラムのアセンブリ

コードをインライン化

34

int32_t func1(int32_t lhs, int32_t rhs){int32_t res;

asm (".insn r 0x33, 0x7, 0x0, %0, %1, %2" : "=r" (res) : "r" (lhs), "r" (rhs) );return( res );

}

【 AND r,r,r命令の実装例】

※詳細に関しては、「IAR C/C++ Development Guide」-「Part 1. Using the build tools」-「Reference information for inline assembler」-「Assembler language interface」を参照して下さい

Page 35: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

.insnディレクティブ詳細について

• .insnディレクティブは、すべてのRISC-V命令形式で命令を生成

35

.insn r op7,f3,f7,rd,rs1,rs2 .insn u op7,f3,rd,expr

.insn r op7,f3,f7,rd,rs1,rs2,rs3 .insn uj op2,rd,expr

.insn r4 op7,f3,f2,rd,rs1,rs2,rs3 .insn cr op2,f4,rd,rs1

.insn i op7,f3,rd,rs1,expr .insn ci op2,f2,rd,expr

.insn i op7,f3,rd,rs1,expr(rs1) .insn ciw op2,f3,rd’,expr

.insn s op7,f3,rd,rs1,expr(rs1) .insn ca op2,f6,f2,rd’,rs2’

.insn sb op7,f3,rd,rs1,expr .insn cb op2,f3,rs1’,expr

.insn sb op7,f3,rd,expr(rs1) .insn cj op2,f3,expr

.insn b op7,f3,rd,rs1,expr .insn cs op2,f3,rs1’,rs2’,expr

op2, op7 unsigned immediate 2 or 7-bit opcodefN unsigned immediate for function code 2-7 bits wide

rd, rsN register field integer (x0-x31) or FP (f0-f31)Rd’, rsN’ compact instruction reg. field integer (x8-x15) or FP (f8-f15)

expr immediate expression

Page 36: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

カスタム命令の実際

• 組み込みの関数は、カスタム命令を生成するときに使用

36

/* sltiu a0, a1, 0x40 */asm (".insn i 0x13,0x3, a0, a1, 0x40");/* sb a0, 4(a1) */ asm (".insn s 0x23,0,a0,4(a1)");/* sb a0, 4(a1) */asm (".insn s STORE,0,a0,4(a1)");

asm (".insn i 0x13,0x3, a0, a1, 0x40");4040007E 0405B513 sltiu a0, a1, 0x40asm (".insn s 0x23,0,a0,4(a1)");40400082 00B50223 sb a1, 4(a0)asm (".insn s STORE,0,a0,4(a1)");40400086 00B50223 sb a1, 4(a0)

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

funct7 rs2 rs1 funct3 rd opcode

imm[11:0] rs1 funct3 rd opcode

imm[11:5] rs2 rs1 funct3 imm[4:0] opcode

R-type

I-type

S-type

【 C言語ソース】 【 逆アセンブラ】

【 命令詳細】

Page 37: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

効率の良いコーディングとは?

37

Page 38: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

まずは関数呼び出し規約• 関数呼び出し規約とレジスタ名は異なる

レジスタ ABI 内容 保存x0 zero ゼロレジスタ -x1 ra リターンアドレス 呼び出し側x2 sp スタックポインタ 関数側x3 gp グローバルポインタ -x4 tp スレッドポインタ -x5 t0 一時レジスタ・リンクレジスタ 呼び出し側

x6-x7 t1-t2 一時レジスタ 呼び出し側x8 s0/fp 保存レジスタ・フレームポインタ 関数側x9 s1 保存レジスタ 関数側

x10-x11 a0-a1 引数・戻り値レジスタ 呼び出し側x12-x17 a2-a7 引数レジスタ 呼び出し側x18-x27 s2-s11 保存レジスタ 関数側x28-x31 t3-t6 一時レジスタ 呼び出し側

f0-f7 ft0-ft7 一時レジスタ 呼び出し側f8-f9 fs0-fs1 保存レジスタ 関数側

f10-f11 fa0-fa1 引数・戻り値レジスタ 呼び出し側f12-f17 fa2-fa7 引数レジスタ 呼び出し側f18-f27 fs2-fs11 保存レジスタ 関数側f28-f31 ft8-ft11 一時レジスタ 呼び出し側

38

Page 39: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

関数呼び出しの効率化

• 関数を呼び出すルールを把握する事で効率的な関数作成

39

「IAR C/C++ Development Guide for RISC-V」-「Part 1. Using the build tools」-「Assembler language interface」

レジスタa0a1a2a3a4a5a6a7

• 32ビットまでのデータは8引数、越える場合はスタックを使用• 64ビットデータは、レジスタ番号の偶数と隣り合う奇数番号

を使用• 32ビット戻り値は、a0レジスタ、64ビット戻り値は、a0+a1

レジスタを使用–a0レジスタは下位32ビット–a1レジスタは上位32ビット

• 8引数以上の関数を使用する場合、使用頻度の高い変数を先頭に配置する事で、関数呼び出しの効率化が可能

Page 40: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

引数の順番に注意!

• 64 ビット型の関数の引数は、偶数番のレジスタと、連続した奇数番のレジスタ(a0+a1, a2+a3)で渡す

• 引数の順番を少し考慮する事で、関数呼び出しの効率が向上!

40

a0 a1(未使用) a2 a3 a4 a5 a6 a7

• func1(int32_t a,int64_t b, int32_t c)

a0 a1 a2 a3 a4 a5 a6 a7

• func1(int32_t a,int32_t c, int64_t b)

Page 41: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

スタックの使用量確認!

• スタック領域は常に、16バイト境界に配置されパラメータはパラメータの最大境界と4バイト境界配置

41

呼び出し側スタックフレーム領域境界パディング

引数n...

引数1境界パディングレジスタ保存

境界パディングローカル変数

未使用スタック領域

上位アドレス

関数エントリスタックポインタ

次の関数スタックポインタ

スタック使⽤量は、確認が必要!

Page 42: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

スタック領域の設定と使用量を確認する• スタックとヒープのサイズの設定は、オプション設

定の「Genral Options」-「Stack/Heap」で設定

42

• リンカでスタック使用量解析を行う事で、おおまかなスタック使用量を確認出来ます

Page 43: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

関数呼び出しの最適化は行わない

• コンパイラは、関数を順番に実行しない事による副作用を判断出来ない

43

int32_t func1(int32_t c,int32_t d){

int32_t i;

if(func2(c) && c){i = 100;

}if(func2(c) || d){

i = 200;}return( i );

}

int32_t func1(int32_t c,int32_t d){

int32_t i;int32_t j;

j = func2(c);if(j && c){

i = 100;}if(j || d){

i = 200;}return( i );

}

Page 44: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

関数呼び出しの最適化は行わない

• コンパイラは、関数を順番に実行しない事による副作用を判断出来ない

44

func1:000000 717D c.addi16sp -0x10000002 C606 c.swsp ra, 0xc000004 C422 c.swsp s0, 0x8000006 C226 c.swsp s1, 0x4000008 C04A c.swsp s2, 0x000000A 842A c.mv s0, a000000C 84AE c.mv s1, a100000E 8522 c.mv a0, s0000010 0000'0097 call func3000018 C101 c.beqz a0, ??func1_000001A C001 c.beqz s0, ??func1_000001C 0640'0913 li12 s2, 0x64000020 8522 c.mv a0, s0000022 0000'0097 call func300002A E101 c.bnez a0, ??func1_100002C C081 c.beqz s1, ??func1_200002E 0C80'0913 li12 s2, 0xc8000032 854A c.mv a0, s2000034 40B2 c.lwsp ra, 0xc000036 4422 c.lwsp s0, 0x8000038 4492 c.lwsp s1, 0x400003A 4902 c.lwsp s2, 0x000003C 6141 c.addi16sp 0x1000003E 8082 c.ret

func2:000000 717D c.addi16sp -0x10000002 C606 c.swsp ra, 0xc000004 C422 c.swsp s0, 0x8000006 C226 c.swsp s1, 0x4000008 C04A c.swsp s2, 0x000000A 842A c.mv s0, a000000C 84AE c.mv s1, a100000E 8522 c.mv a0, s0000010 0000'0097 call func3000018 C101 c.beqz a0, ??func2_000001A C001 c.beqz s0, ??func2_000001C 0640'0913 li12 s2, 0x64000020 E101 c.bnez a0, ??func2_1000022 C081 c.beqz s1, ??func2_2000024 0C80'0913 li12 s2, 0xc8000028 854A c.mv a0, s200002A 40B2 c.lwsp ra, 0xc00002C 4422 c.lwsp s0, 0x800002E 4492 c.lwsp s1, 0x4000030 4902 c.lwsp s2, 0x0000032 6141 c.addi16sp 0x10000034 8082 c.ret

Page 45: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

45

Summary• RISC-Vの基本思想を理解する事が必要• アーキテクチャを学ぶ事で、ソフトウェア開発を

効率よく実施可能• 実行サイクル数の測定方法を理解する事で、性能

を可視化• 関数型定義を考慮する事で、アプリケーション性

能を改善• EWRISC-Vを使う事で、アプリケーション開発を

明日から始める事が可能!

Page 46: RISC-Vプロセッサ導⼊を決める前に 知っておけば …...RISC-V プロセッサ導 を決める前に 知っておけば安 商 開発環境の 概要とメリット

Thank you for your attention!

ご質問やお問い合わせは

[email protected]

46