Slide 1

Slide 1 text

TS-5 ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向 The latest trend of RISC-V, attracted open CPU architecture FPGA開発日記 著者 @msyksphinz_dev http://msyksphinz.hatenablog.com 1

Slide 2

Slide 2 text

目次 の RISC-Vの概要 RISC-Vの命令セット仕様 RISC-Vで広がるエコシステム HiFive Unleashedを動かしてみる クラウドRISC-V環境FireSimを 動かしてみる まとめ ALL PLAY CHAPTER 2019/9/18 2 HiFive1ボードで 簡単アプリケーション開発

Slide 3

Slide 3 text

RISC-Vとは • カリフォルニア大学バークレイ校(UCB)が2011年から公開している新しい命令セットアーキテクチャ • シンプルかつオープン、しかしLinuxが動くまでにはしっかりしている • かつ、自由にカスタマイズ可能 • RISC-Vの仕様を決定する非営利団体”RISC-V Foundation” • GoogleやNVIDIAなどがメンバーに加入し注目を浴びる • 2019年6月現在で加盟団体・企業は250に迫る

Slide 4

Slide 4 text

RISC-V Foundation 2019/9/18 4 Board of Directorsを中心に、ISAの各分野 でWorking Groupが存在している。 RISC-V Foundation Working Group ボード・ プラットフォーム SIMD拡張 Privileged Spec セキュリティ メモリモデル ソフトウェアツー ルチェイン … Board of Directors RISC-V ISA Manual 特許問題などに対して非常に慎重に対応 CPUの歴史は特許抗争の歴史? RISC-Vの命令セット自体は、他社の特許を 侵害しないように慎重に設計されている。 Working GroupでのDiscussion ↓ 最終的な命令仕様に追加? Or 各種RISC-Vをベースとしたプラット フォームのディスカッション

Slide 5

Slide 5 text

RISC-V発展の歴史 2011 2012 2013 2014 2015 2016 2017 RISC-V Processor Raven-1 7th RISC-V Workshop 6th RISC-V Workshop RISC-V Processor Raven-2 RISC-V Processor Raven-3 5th RISC-V Workshop 4th RISC-V Workshop 3th RISC-V Workshop 1th RISC-V Workshop 2th RISC-V Workshop User-Level ISA Ver. 1.0 User-Level ISA Ver. 2.0 User-Level ISA Ver. 2.1 User-Level ISA Ver. 2.2 Privileged ISA Ver. 1.7 Privileged ISA Ver. 1.9 Privileged ISA Ver. 1.10 世界発の商用RISC- Vボード 研究チップの制御 プロセッサとして利用 ヘネパタ第6版は RISC-Vで刷新 パタヘネのRISC-V版が登 場 約半年に1回の頻度で Workshop開催 8th RISC-V Workshop in Barcelona RISC-V Day in Shanghai 9th RISC-V Workshop in Chennai RISC-V Day in Tokyo RISC-V Day in MICRO51 RISC-V Summit in Santa Clara Linuxが動作する RISC-Vボード 2018 ◼ 2015年から定期的にWorkshopを開催 ◼ トップカンファレンスにRISC-Vネタで 通している。 ◼ パタヘネ・ヘネパタはRISC-Vに移行 ◼ 2017年/2018年に日本でイベント開催

Slide 6

Slide 6 text

2019年も激しく活動中 6 ◼ RISC-V Tokyo 2019も計画中? しかし海外と比べると日本はかなり遅れている印象… 8th RISC-V Workshop in Barcelona RISC-V Day in Shanghai 9th RISC-V Workshop in Chennai RISC-V Day in Tokyo RISC-V Day in MICRO51 RISC-V Summit in Santa Clara Linuxが動作する RISC-Vボード 2018 2019 RISC-V Day in Taiwan RISC-V Day in Zurich CARRV 2019 RISC-V North America Roadshow RISC-V North China Roadshow HiFive RevB Wireless Coprocessorの乗った RISC-Vボード

Slide 7

Slide 7 text

Turing Award 2017 を受賞した David A. PattersonがRISC-Vを推す 7 https://sdtimes.com/devexec/john-l-hennessy-david-patterson-awarded-2017-acm-m-turing-award-risc-approach/ David Patterson & Andrew Waterman “RISC-V Reader : An Open Architecture Atlas”

Slide 8

Slide 8 text

コンピュータアーキテクチャの教科書が 次々とRISC-Vに移行 8 コンピュータの構成と設計 通称パタヘネ Computer Architecture: A Quantitative 通称ヘネパタ RISC-V原典 オープンアーキテクチャのススメ 原本: RISC-V Reader Patterson先生が書いた。10/22新発売

Slide 9

Slide 9 text

急速に脚光を浴びる 「オープンソースハードウェア」 • CPUコアは高い • ハードウェア設計をするのはコストが高い • 最先端プロセスを使うのは非常にコストがかかる 2019/9/18 9 ソフトウェア業界に比べてハードウェア業界は参入の敷居が高い(気がする)。 少しずつ状況は変わりつつある、気がする • CPUコア・デジタル部はオープンソース化が進む

Slide 10

Slide 10 text

ライバル現る この流れを作ったのはやはりRISC-Vでは? Wave Computing® Launches the MIPS Open Initiative To Accelerate Innovation for the Renowned MIPS® Architecture https://www.mipsopen.com/press/wave-computing-launches-the-mips-open-initiative-to-accelerate-innovation-for-the-renowned-mips-architecture/ Wave Computing® Creates MIPS Open™ Advisory Board https://www.mipsopen.com/press/wave-computing-creates-mips-open-advisory-board/ Wave Computing Releases First MIPS Open Program Components to Accelerate Innovation for Next-Generation System on Chip Designs https://www.mipsopen.com/press/wave-computing-releases-first-mips-open-program-components-to-accelerate-innovation-for-next-generation-system-on-chip-designs/ Arm Cortex-Mシリーズの一部が無料で使用できる or FPGA向けのIPが無料で提供される。 Cortex-A5を低価格で使用でき、低価格でテープアウトすることができる。

Slide 11

Slide 11 text

RISC-V命令セット仕様概観 11

Slide 12

Slide 12 text

RISC-Vアーキテクチャ 命令セット外観 12 ARM Manual 6000ページくらい RISC-V Manual 200ページくらい どっちが良いかは別にして… 細かいことをいろいろ喋っても仕方がないので外観だけ。 ざっくりと必要なところだけ説明します。 もはや凶器

Slide 13

Slide 13 text

RISC-Vの命令セットを Webで参照できるページを作りました 13 https://msyksphinz.github.io/riscv-isadoc/html/index.html

Slide 14

Slide 14 text

RISC-V命令セットアーキテクチャ形態について • RISC-Vは大きく「基本命令セット」と 「拡張命令セット」に分かれる。 • 基本命令セット : RV32I / RV32E / RV64I / RV128I • 拡張命令セット : 基本命令セット+特定向け命令 • 浮動小数点とか、ベクトル命令とか 14 “A” atomic拡張 “C” 16bit短縮命令 “F” 単精度浮動小数点 “D” 倍精度浮動小数点 “L” 10進数浮動小数点 “Q” 4倍精度浮動小数点 “M” 乗除算命令 “S” スーパバイザモード “P” Packed SIMD “V” Vector拡張 “N” ユーザレベル割り込み RV32I RV32E RV64I RV128I 拡張命令 基本命令 RV32I RV32E RV64I RV128I + M A F D + + + M A F D C = RV32G = RV64GC ■ RISC-V アーキテクチャの呼び方 アーキテクチャ識別子を付加して呼ぶ

Slide 15

Slide 15 text

RISC-Vの特権モードと動作モード • 3種類の動作モードが定義されている • 最初の版では4種類だったが削減されて3種類 • ユーザモード • 最も権限の少ないモード。アプリケーションを動かすためのモード • スーパバイザモード • OSが例外処理などを行うための権限の高いモード。 • マシンモード • 最も権限が高い。マシンモード。何でもできる • モード間の遷移について • 外部から割り込み挿入 or 命令実行中に例外発生 • ECALL命令によるSupervisor Call • 例外処理後に実行するMRET / SRET / URET • ハイパーバイザモード • スーパバイザモードとマシンモードの間に定義される。 • 現在議論中。 15 マシンモード スーパバイザモード ユーザモード

Slide 16

Slide 16 text

RISC-Vのレジスタ 16 x0 x1 x2 x3 x4 x5 x31 … XLEN=128 x0 x1 x2 x3 x4 x5 x31 … XLEN=64 x0 x1 x2 x3 x4 x5 x31 … XLEN=32 f0 f1 f2 f3 f4 f5 f31 … FLEN=128, Q Extension f0 f1 f2 f3 f4 f5 f31 … FLEN=64, D Extension f0 f1 f2 f3 f4 f5 f31 … FLEN=32, F Extension 整数レジスタの表記は全てxN x0 – x31まで定義 整数レジスタ長はXLENで表記される RV32 : XLEN=32 RV64 : XLEN=64 RV128 : XLEN=128 浮動小数点レジスタの表記は全てfN f0 – f31まで定義 浮動小数点レジスタ長はFLENで表記される F拡張 : FLEN=32 D拡張 : FLEN=64 Q拡張 : FLEN=128

Slide 17

Slide 17 text

Floatレジスタは Single/Double/Quadで共有 • 例えば、Float⇔DoubleのConvert命令の場合 • FCVT.D.S fd, fs • FCVT.S.D fd, fs • DoubleとFloatがレジスタを 共有しているので • NaN Boxingをサポートする必要がある • FLEN>32で、Single Floating Pointの命令を実行するときは、32bit 以上の値は全て1が設定されている必要がある 17 fd fs Convert 1111…1111 Single-Float Value FLEN=64 Single値として見た場合 : 普通の値 Double値としてみた場合 : 上位がすべて1 なので NaN → 型を明確に識別するための手法

Slide 18

Slide 18 text

割り込み・例外 • RISC-Vの割り込み・例外要因は多くない • 割り込み • ソフトウェア割り込み • タイマ―割り込み • 外部割込み • ユーザ・スーパバイザ・ マシンモード毎に定義 • 外部割込みが少ないので PLICを外部に定義 18

Slide 19

Slide 19 text

C命令系列 (Compressed命令) • RISC-Vの通常命令は32-bit • C命令系列は16ビット長 • RISC-Vの命令種はシンプルな分、命令密度が低い • 16-bit長命令を使ってマイクロアーキテクチャの面で 効率を上げる 19 RD  RD + RS1 RD  RD + IMM Stack-relative Store Compact Load Compact Store Compact Jump

Slide 20

Slide 20 text

なんでCompressed命令が必要なの? 20 ・RV32 / RV64は他のISAに比べて コードサイズが大きい → フェッチサイズが大きい。 ・そこで、RV32C / RV64Cという 圧縮命令を活用する。 → フェッチサイズを圧縮できる。 Computer Architecture Research with RISC-V Krste Asanovic より抜粋 ISA Shootout: Comparing RISC-V, ARM, and x86 on SPECInt 2006 より抜粋 RV32GC / RV64GCでは、多くの ベンチマークプログラムで他の 命令セットよりも優れる。

Slide 21

Slide 21 text

その他にも、性能方向に振るなら頑張ってね 21 そもそも命令密度において優位性が無いので、マイクロアーキテクチャにより 実行性能を上げるしかない。 実行時に複数命令をFusionさせて発行することで、性能を向上させる → Micro-Op Fusion Computer Architecture Research with RISC-V より抜粋

Slide 22

Slide 22 text

RISC-Vの拡張命令 • RISC-Vの命令系列にはカスタム領域が存在する • 将来のための予約領域 (現時点では好き勝手に使うことも?) 22 実はRISC-Vの命令セットは64-bit長の領域が定義されている

Slide 23

Slide 23 text

RISC-Vのシステムレジスタ • システムレジスタは専用命令でアクセスする。 • csrrw (CSR Register Read/Write) • csrrs (CSR Register Set) • csrrc (CSR Register Clear) • csrrwi (CSR Register Read/Write Immediate) • csrrsi (CSR Register Set Immediate) • csrrci (CSR Register Clear Immediate) • 汎用レジスタとCSRレジスタの交換 (csrrw / csrrwi) • 即値を指定してCSRの特定のビットを1に設定する (csrrs/csrrsi) • 即値を指定してCSRの特定のビットを0に設定する(csrrc/csrrci) 23 x0 x1 x2 x31 CSR 基本は1命令で データを交換

Slide 24

Slide 24 text

CSRレジスタの系統 • Machine-Mode, Supervisor-Mode, User-Mode用の CSRレジスタでアドレス空間が分けられている 24 User-Mode Supervisor-Mode Machine-Mode

Slide 25

Slide 25 text

仮想メモリ • RISC-Vの仮想メモリは(比較的)複雑 • Sv32 : VA 32bit → PA : 34bit • Sv39 : VA 39bit → PA : 56bit • Sv48 : VA 48bit → PA : 56bit 25 Bare Sv32 Bare Sv39 Sv48 RV32 RV64 SATP vpn[2] vpn[1] vpn[0] offset ppn[1] ppn[0] + + ppn[1] ppn[0] + ppn[1] ppn[0] + Supervisor Address Translation and Protection Register 物理メモリ アドレス 仮想メモリ アドレス

Slide 26

Slide 26 text

ベクタ命令 • RISC-VではSIMD命令よりもベクタ命令が先行して定義されている • https://github.com/riscv/riscv-v-spec • 少し面白い仕様 26 RISC-V Readerでも先に紹介されているのは SIMDではなくVector命令 動的レジスタ・タイピング プレディケート・レジスタ CSRレジスタの拡張 以降の説明は”RISC-V Reader”およびRISC-V User- Level ISA V2.2をベースに説明しますが、今後変 更される可能性があります。

Slide 27

Slide 27 text

動的レジスタ・タイピング • 普通のベクトル命令・SIMD命令 • 命令が取り扱う「型」を決める。 • RISC-Vのベクトル命令 • レジスタが「型」を持つ 27 ADD.I.W4 : 整数レジスタについて、4-way SIMD の加算を実行する ADD.F.W2 : 単精度浮動小数点レジスタについて、 2-way SIMDの加算を実行する v0 v1 v2 v3 v31 int32 float double int32 int64 ベクトルレジスタ vp0 vp1 vp7 … … プレディケート・レジスタ 型がバラバラなレジスタで、ベクトルレジスタ長を どのように定義するのか? → MVL(Maximum Vector Length)レジスタを使う 各ベクトルレジスタがどの型を持っているのか? → CSRとしてvctypeレジスタを用意

Slide 28

Slide 28 text

RISC-Vベクタ命令のプログラミング例 28 # 32ビット整数型どうしのベクトル配列の加算コード # ベクトルレジスタは32ビット整数型をサポートするように構成されて いるものとする。 # a0 : ベクトル長Nを保持している。 # a1 : 加算結果を格納するベクトルのポインタを保持している。 # a2 : 加算するベクトル1つ目のポインタを保持している。 # a3 : 加算するベクトル2つ目のポインタを保持している。 loop: setvl t0, a0 # Nをvlに設定する。t0に現在のvlの値を設定する。 vld v0, a2 # v0に1つ目のベクトルをロードする。 sll t1, t0, 2 # t1はベクトル長Nに相当するバイト数を返す # (32ビット整数なので×4) add a2, t1 # a2をロードしたバイト数だけ進める vld v1, a3 # v1に2つ目のベクトルをロードする。 add a3, t1 # a3をロードしたバイト数だけ進める。 vadd v0, v1 # v0とv1を加算し、その結果をv0に格納する。 sub a0, t0 # ベクトル命令で処理した分だけa0の値を減らす。 vst v0, a1 # 加算した結果をメモリにストアする。 add a1, t1 # 結果ベクトルのポインタを進める。 bnez a0, loop # ベクトル要素が残っていればループを繰り返す。 # そうでなければ終了する。 setvl命令に対象データの長さを設定すると、 同時に処理できる最大長の長さがMVLに 設定される。 例 : 最大で処理できるベクタ長が128で、 N=1000のとき → MVL =128 あとは、N=1000からMVL=128を毎回 減算し、N=0になるまで処理を繰り返す。

Slide 29

Slide 29 text

発表者の思うRISC-Vのすごいところ(仕様編) • スーパバイザに権限を移譲する”Delegation(移譲)” • Machine Modeで処理するのが面倒な例外はSupervisor Modeに移譲して動かす • コンテキストスイッチ時にレジスタ退避を簡略化するための仕組み • XS / FSビットフィールドにより、レジスタの書き換え発生を記憶している • mstatusシステムレジスタは過去の実行モードを記憶することが可能 • 例外処理に入る→復帰の処理が割と容易 スーパバイザモード マシンモード 例外発生 移譲 例外処理 例外から戻る ユーザモード スーパバイザモード マシンモード 例外発生 例外受付 動作モード変更 例外処理 例外から戻る ユーザモード 割り込み・例外の移譲を使う場合 割り込み・例外の移譲を使わない場合 こちらも参考になります : https://www.sifive.com/blog/2017/10/23/all-aboard-part-7-entering-and-exiting-the-linux-kernel-on-risc-v/

Slide 30

Slide 30 text

仕様書を読んで感じた、 RISC-Vのすごいところ(仕様編) • 現代的(?)なプログラミングパラダイムのサポート • JALR rd, rs1, offset // PC ← x[rs1]+offset, x[rd] ← PC • リンクレジスタとしてx1/x5が指定可能 • rd=x1/x5, rs1=x1/x5, かつ rd != rs1の場合 • RAS(Return Address Stack) にPush / Popを同時実行 • コルーチン動作をサポートするため 2019/9/18 30 コルーチンはいったん処理を中断した後、続 きから処理を再開できる。接頭辞 co は協調を 意味するが、複数のコルーチンが中断・継続 により協調動作を行うことによる。 Wikipedia より https://ja.wikipedia.org/wiki/コルーチン

Slide 31

Slide 31 text

RISC-Vとエコシステム 31

Slide 32

Slide 32 text

作られるのはISAだけじゃない 2019/9/18 32

Slide 33

Slide 33 text

RISC-Vを見ておけば、コンピュータ サイエンス技術全般を網羅できる 2019/9/18 33

Slide 34

Slide 34 text

RISC-Vを中心に発展するエコシステム • RISC-Vを中心としたセキュリティプラットフォームの開発 「RISC-Vの狙いと、IoT、AIエッジセキュリティの実現」より抜粋 ET/IoT Technology NAGOYA 2019【K-1】 2019/02/06 http://www.jasa.or.jp/etnagoya/seminar/doc/doc_k01.pdf RISC-V Summit 2018 “Keystone Enclave”より抜粋 https://keystone-enclave.org/files/keystone-risc-v-summit.pdf

Slide 35

Slide 35 text

RISC-Vが拡充するCHIPS Alliance • Linux Foundationが中心となり、オープンソースハードウェア を中心としたCPU・SoCの製品化を促進する UVM(Universal Verification Methodology) ベースの命令ストリームジェネレータの提供 オープンソースハードウェア 記述言語Chiselの開発 オープンバスプロトコル TileLinkの開発 SystemVerilogで記述されたDual-Issue RISC-Vプロセッサの開発

Slide 36

Slide 36 text

バスプロトコル TileLink • RISC-Vの実装でよく出てくるバスプロトコル • OCP, AXI, TileLink… • キャッシュコヒーレントをサポート • MOESIプロトコルに相当 • RISC-Vの実装”Rocket-Chip”がこの プロトコルを使っている。

Slide 37

Slide 37 text

オフチップ間通信技術OmniXtend 2019/9/18 37 • RISC-Vを中心とするオフチップ間通信のプロトコルを開発 • Western Digitalを中心に。 “CPU Project in Western Digital: From Embedded Cores for Flash Controllers to Vision of Datacenter Processors with Open Interfaces” RISC-V Summit 2018 https://content.riscv.org/wp-content/uploads/2018/12/13.10-Bandic-Golla-Vucinic-CPU-Project-in-Western- Digital-From-Embedded-Cores-for-Flash-Controllers-to-Vision-of-Datacenter-Processors-with-Open-Interf.pdf よ り抜粋

Slide 38

Slide 38 text

RISC-VコアRocketの設計のために作られた ハードウェア記述言語Chisel GoogleのAIチップ Edge TPUの設計に 使用されたことで、(日本)でにわかに 脚光を浴びる Chisel(Based on Scala) IR Verilog Chisel Compiler FIRRTL ハードウェア記述言語 Verilog-HDL / SystemVerilogの圧倒的な生産性の低さに辟易する • シミュレータが遅い。商用のシミュレータはライセンスが高い。 • 抽象的・高位の記述ができない。ジェネリックな記法ができない。 • → ChiselはScalaをベースとしており、よりソフトウェア的な記法が可能。

Slide 39

Slide 39 text

Chisel Compiler, FIRRTLは ハードウェア記述コンパイラとして面白い Chisel3 Syntax Analyzer FIR Emitter FIR (Flexible Intermediate Representation) FIRRTL Make Syntax Tree Passes Passes Passes Passes Verilog Emitter Verilog ただ聞いている話だと まだいろいろ不備があり 改善が必要… ただ聞いている話だと まだいろいろ不備があり 改善が必要…

Slide 40

Slide 40 text

クラウドでRISC-V SoCを設計する時代 https://www.sifive.com/core-designer SiFive Core DesignerでWebでSoC設計

Slide 41

Slide 41 text

SiFive Core DesignerでWebでSoC設計 (経験上の)これまでのSoC設計 CPUベンダのフロントエンドの 営業と打ち合わせ フロントエンドが本社設計チーム に問い合わせ カスタマイズコアを 本社が生成開始 カスタマイズコアがリリース IPを接続する&検証 性能検証 レイアウト テープアウト 1週間経過 1週間経過 1週間経過 WebでSoCのカスタマイズをする その環境をダウンロードする IPを接続する & 検証 性能検証 レイアウト テープアウト Core Designerでのクラウド設計 まあチップ設計ってこんなに単純な話じゃありませんが、 イメージで。。。

Slide 42

Slide 42 text

実チップ?FPGA?いえいえ、AWS 大規模FPGAの購入にはかなりのコスト高。200~300万円 FPGAを常に手元に置いておく必要がない。 必要な時に必要な分だけコストがかかる。 → コストダウン・参入障壁を下げる一要因になることを期待 名前 FPGA vCPU Memory SSD Storage Cost/h f1.2xlarge 1 8 122 GB 470 GB 1.65 USD f1.4xlarge 2 16 244 GB 940 GB 3.30 USD f1.16xlarge 8 64 976 GB 4 x 940 GB 13.20 USD

Slide 43

Slide 43 text

FireSim for Rocket-Chip/BOOM 43 FireSim : RISC-V Implementation on AWS F1 instance 複数FPGAを使って最大1024コアまで動作。 GitHubで公開されている (https://github.com/firesim) FPGA-Accelerated Cycle-Exact Scale-Out System Simulation in the Public Cloud http://iscaconf.org/isca2018/slides/1A3.pdf

Slide 44

Slide 44 text

AWSを使ってRISC-Vを動かし Linuxをブートする (ちょっと見えにくいけど) AWS F1上でRISC-V Linuxがブート RISC-Vと関係なく、とりあえずAWSインスタンスを 試したいということも可能: AWS FPGAリポジトリ : https://github.com/aws/aws-fpga Single使用なら 個人でも何とか…

Slide 45

Slide 45 text

RISC-Vをベースにして様々な プラットフォームが構築されており、 自分の興味に応じて様々なアプローチがある 2019/9/18 45

Slide 46

Slide 46 text

RISC-Vを 触ってみましょう 46

Slide 47

Slide 47 text

47 まず何をしたい? とりあえず手持ちのプログラムを RISC-V向けにコンパイルして 実行してみたい。 riscv-toolsによる 開発環境の整備 MicroPythonを RISC-Vで動かしてみよう クラウド環境 AWS F1インスタンスで RISC-V Rocket-Chipを動かそう RISC-VチップでOSを動かして プログラミングをしよう RISC-VチップHiFive1で Zephyr OSを動かそう RISC-VチップHiFive Unleashedでマルチコア プログラミングを してみよう。 FireSimでRocket-Chipを ビルドし、Linuxを ブートしよう。 FireSimでカスタムチップ を実装し、 ベンチマークを動かそう。

Slide 48

Slide 48 text

riscv-toolsリポジトリの中身 48 riscv-tools riscv-openocd riscv-isa-sim riscv-opcodes riscv-tests riscv-pk RISC-Vデバッグ用のOpenOCD実装 命令セットシミュレータ RISC-Vテストパタン RISC-Vのプロキシカーネル RISC-Vのソフトウェア開発を行う際の最もBaseとなるツール群が 入っている。 全部ダウンロードするとかなりディスクを消費します(2GBくらい)。 最近リポジトリの構成が変わりました!GNUツールチェインとデバッガは別でダウンロード。 ツールチェインはSiFive社のウェブサイトからダウンロードするのが安心? https://www.sifive.com/boards • GNU Embedded Toolchain — v2019.02.0 • OpenOCD — v2019.02.0

Slide 49

Slide 49 text

GCCを使ってプログラムをコンパイル & シミュレーション 49 #include int gcd (int a, int b) { int c; if (a < b) { int tmp; tmp = b; b = a; a = tmp; } while (b != 0) { c = a % b; a = b; b = c; } return a; } int main () { printf ("hello world¥nCalling GCD ...¥n"); printf ("GCD(273, 21) = %d¥n", gcd(273, 21)); printf ("GCD(411, 27117) = %d¥n", gcd(411, 27117)); return 0; } $ riscv64-unknown-elf-gcc gcd.c -o gcd $ riscv64-unknown-elf-objdump -D gcd > gcd.dmp $ spike pk gcd <> <> hello world Calling GCD ... GCD(273, 21) = 21 GCD(411, 27117) = 3 <> 命令セットシミュレータを実行

Slide 50

Slide 50 text

例: MicroPythonを移植してみましょう 54 $ cd ports/qemu-riscv32 $ make Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity. GEN build/genhdr/qstrdefs.collected.h QSTR not updated spike pk build/firmware.elf hello world! 標準的なシステムコールを持ち合わせているSpikeを使えば、 アプリケーションのRISC-Vへの移植とデバッグも簡単

Slide 51

Slide 51 text

HiFive1で リアルタイムOSを 動かす 55

Slide 52

Slide 52 text

現状入手可能なRISC-Vボード SiFive : HiFive Unleashed RISC-V 64-bit(RV64GC) x4 + RISC-V 64-bit (RV64GC) SiFive : HiFive1 RISC-V 32-bit(RV32GC) SiFive : HiFive1 Rev.B RISC-V 32-bit(RV32GC) Sipeed : MAIX GO RISC-V 64-bit (RV64IMAFDC)

Slide 53

Slide 53 text

HiFive1 57 • SiFive社がリリースしているRISC-Vボード • Freedom FE310-G000 • 最大動作周波数 320MHz • RV32IMAC • 32-bit RISC-V, 乗除算命令、アトミッ ク命令、Compressed命令 • キャッシュL1IC : 16kB / L1DC : 16kB • 128 Mbit Off-Chip (ISSI SPI Flash) • 外部I/Oピン 19本 • 外部割込みピン 19本 • Linuxなどの高級なOSは動かないけれども、 LightWeightなOSならばなんとか。 日本国内でも代理店から購入可能

Slide 54

Slide 54 text

HiFive Rev.Bもあるよ • SiFive社がリリースしているRISC-Vボード • Freedom FE310-G002 • 最大動作周波数 320MHz • RV32IMAC • 32-bit RISC-V, 乗除算命令、アトミック命令、 Compressed命令 • キャッシュ • L1IC : 16kB / L1DC : 16kB • 128 Mbit Off-Chip (ISSI SPI Flash) • 外部I/Oピン 19本 • 外部割込みピン 19本 • WiFiモジュール付属。技適通過済み。 58

Slide 55

Slide 55 text

OSは動かないの?→ リアルタイムOSが動きます 60 公式にサポートされているOS “FreeRTOS”, “Zephyr” Zephyr : ■ The Linux Foundationが開発している小規模リアルタイムOS ■ (発表者はあまり詳細を見たことがないけれども)ソースコードが Linuxに似ていると言われている。 HiFive1でZephyrを動作させるためのドキュメントが公開されている

Slide 56

Slide 56 text

HiFive1でリアルタイムOS Zephyrを動かしてみる 61 1. QEMUで動かす git clone https://github.com/zephyrproject-rtos/zephyr cd zephyr sudo pip3 install --user -r scripts/requirements.txt export ZEPHYR_TOOLCHAIN_VARIANT=zephyr . ./zephyr-env.sh # 資料には下記のように記述してあるが、SDK 0.9.5ではビルドできなかった。SDK 0.10.0を使用する必要がある。 # wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.5/zephyr-sdk-0.9.5-setup.run # sh zephyr-sdk-0.9.5-setup.run wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.0/zephyr-sdk-0.10.0-setup.run sh zephyr-sdk-0.10.0-setup.run mkdir build-example cd build-example cmake -DBOARD=qemu_riscv32 /home/msyksphinz/work/riscv/zephyr/samples/hello_world $ make -j $(nproc) $ make run ***** Booting Zephyr OS v1.14.0-rc3-246-g10327e59c622 ***** Hello World! qemu_riscv32

Slide 57

Slide 57 text

HiFive1でリアルタイムOS Zephyrを動かしてみる 62 2. HiFive1で動かす 3. 哲学者の食事問題を動かしてみる

Slide 58

Slide 58 text

HiFive1 & Zephyrでアプリケーション開発 ある程度はできる? 63 mallocはできるようだ。 mem_ptr = k_malloc(sizeof(int)*200); if (mem_ptr == NULL) { printf("Memory not allocated"); } for (int i = 0; i < 200; i++) { mem_ptr[i] = i; } for (int i = 0; i < 200; i++) { printk("STRING = %d¥n", mem_ptr[i]); } k_free(mem_ptr); struct fs_mount_t mount; fs_mount(&mount); struct fs_file_t file; fs_open (&file, "/test"); char *wr_str = "This is a test.¥n"; fs_write (&file, wr_str, sizeof(wr_str)); fs_close (&file); ファイルオープンはできない? (マイクロSDが無いので当然かな)

Slide 59

Slide 59 text

HiFive Unleashedを使って マルチコアプログラミング 64

Slide 60

Slide 60 text

HiFive Unleashed • SiFive社がリリースしているRISC-Vボード • U54 RV64GCアプリケーションコア x4 • 最大動作周波数1.5GHz • E51 RV64IMAC管理コア x1 • コヒーレント2MB L2 Cache • 8GB DDR-SDRAM • Gigabit Ethernetポート • 32MB Quad SPI フラッシュメモリ • MicroSD カードコネクタ 65

Slide 61

Slide 61 text

RISC-V PC https://abopen.com/news/building-a-risc-v-pc/ 2019/9/18 66

Slide 62

Slide 62 text

Linuxも立ち上がる • デフォルトでBuildrootのインストールされた uSDカードがついてくる。 • 他のLinux Distributionも立ち上げることができる • Debian GNU/Linux • Fedora

Slide 63

Slide 63 text

DebianがRISC-Vに急速に対応 https://content.riscv.org/wp-content/uploads/2018/05/09.25-09.55-tate-of-RISC-V-Software-RISC-V-Workshop-at-Barcelona-May-2018-1.pdf Debian GNU/Linux is imported and “apt-get” worked!

Slide 64

Slide 64 text

Fedora + GNOME + HiFive Unleashedで Desktop Linux https://abopen.com/news/western-digital-releases-fedora-desktop-on-risc-v-tutorial/ SiFive presentation at RISC-V Workshop in Barselona, 2018 May https://content.riscv.org/wp-content/uploads/2018/05/09.25-09.55-tate-of-RISC-V-Software-RISC-V-Workshop-at-Barcelona-May-2018-1.pdfより抜粋

Slide 65

Slide 65 text

Debianを立ち上げてみる Welcome to Buildroot buildroot login: root Password: [sifive] # mount /dev/mmcblk0p2 /mnt # mount -t proc /proc /mnt/proc # cp /etc/resolv.conf /mnt/etc/resolv.conf # chroot /mnt/ /bin/bash # cat /etc/debian_version 10.0 ntpdate ntp.nict.jp export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true export LC_ALL=C LANGUAGE=C LANG=C dpkg --configure -a

Slide 66

Slide 66 text

Coremarkベンチマークを実行 & マルチコアプログラミング root@buildroot:~/work/riscv/coremark# less ./run2.log 2K validation run parameters for coremark. CoreMark Size : 666 Total ticks : 13323 Total time (secs): 13.323000 Iterations/Sec : 2251.745102 Iterations : 30000 Compiler version : GCC8.3.0 Compiler flags : -O3 -DPERFORMANCE_RUN=1 -lrt Memory location : Please put data memory location here (e.g. code in flash, data on heap etc) seedcrc : 0x18f2 [0]crclist : 0xe3c1 [0]crcmatrix : 0x0747 [0]crcstate : 0x8d84 [0]crcfinal : 0xff48 Correct operation validated. See README.md for run and reporting rules. CMK/MHz = 2251.724 / 1500 = 1.5011 あまりにも公称値とずれ過ぎている… CMK/MHz = 2251.724 / 1000 = 2.251 これでも公称値とかなり差異がある…

Slide 67

Slide 67 text

HiFive Unleashedで マルチコアプログラミングに挑戦 コア0 コア1 コア2 コア3 std::vector threads; for(size_t i = 0; i < num_threads; ++i){ double start = static_cast(i) / num_threads; threads.emplace_back(std::thread(worker, start, start + length)); } for(auto& thread : threads){ thread.join(); } 0 2000 4000 6000 8000 1-core 2-cores 4-cores 8-cores 実行時間[ms] 使用コア数 使用コア数を変えたときの 実行時間

Slide 68

Slide 68 text

クラウド+FPGAで より多くのチャンスを 7 3 9/18/2019

Slide 69

Slide 69 text

単体FPGAで動かす時代から クラウドでFPGAを動かす時代へ 2019/9/18 74 高性能なFPGAを使いたい… 購入するのはコストがかかりすぎる AWSクラウド上でFPGAを動かすF1インスタンス The best guidance on this is to either align with the Freedom repositories that target Arty and ZC707 boards or to use Firesim and migrate to an AWS worflow. Alternatively, you can write your own FPGA shell for whatever board you want to use and build up your own infrastructure and workflow. Fpga-zynq is deprecated, but should be fine if you use it's exact submodules and rebuild everything. Deviating from that will, likely, require modifications on your end (e.g., if you try to use rocket-chip master inside fpga-zynq master). 手元のZYNQボードを騙し騙し使ってRocket- Chipを動かしていた私に届いた衝撃のメール ただしインスタンスをきちんと管理しないと…

Slide 70

Slide 70 text

FireSim Easy-to-use, FPGA-accelerated Cycle- accurate Hardware Simulation in the Cloud 2019/9/18 75 マネージャインスタンス ビルドファーム FPGAデザイン 合成用サーバ c4インスタンス c4インスタンス c4インスタンス c4インスタンス FPGA f1インスタンス FPGA f1インスタンス FPGA f1インスタンス m4インスタンス RISC-Vコアが 動作する FPGA マルチクラスタを構成する場合は m4インスタンスがネットワークスイッチ をエミュレートする。 Amazon Web Service クラウド ランファーム

Slide 71

Slide 71 text

FireSim FireChip FireChip カスタム アクセラレータ Rocketコア FireChip環境でRocket-Chipを改造する。 FireSimにカスタマイズしたFireSimを組み込み、 オリジナルのコンフィグレーションを作成する。 オリジナル FireSimデザイン オリジナルのFireSimデザインを Vivadoで論理合成し、AGFIをAWSクラウド上に 作成する FPGA FireSimデザインをクラウドからダウンロードし、 FPGAインスタンスに書き込む FPGA SW ベンチマークプログラムを実行する。 FireSimでRISC-Vコアを 実行する仕組み 2019/9/18 76

Slide 72

Slide 72 text

FPGA ワークロード1 Linux ワークロード2 Linux テストしたい コマンド ワークロード3 ベンチマーク1 ベンチマーク2 ベンチマーク3 FireSim コンフィグ1 FireSim コンフィグ2 FireSim コンフィグ1 FireSimでベンチマークを動かす仕組み: Workloads 2019/9/18 77

Slide 73

Slide 73 text

拡張機能RoCCを使ってRocket-Chipをカスタマイズ 2019/9/18 78 • RoCC (Rocket Custom Coprocessor) • Rocket Coreとダイレクトに接続 (L1DC, External MemoryIFに接続) • RISC-Vのカスタム命令の仕様と直結 CMD RESP RESP CMD Rocket Core L1 D-cache Accelerator CMD RESP External ここを自作することで、 オリジナル命令を作成できる custom0 rd, rs1, rs2 ・rd, rs1, rs2のレジスタアドレス情報 ・rs1, rs2 のレジスタデータ ・デコード情報など × 2つの行列のアドレスと長さを指定して、 自動的にデータをフェッチ+MAD処理をするアクセラレータ = 要素1つ分 計算

Slide 74

Slide 74 text

FireSimでテストコードの Workloadsを作って実行 FPGA ワークロード3 ベンチマーク1 ベンチマーク2 matrixmul 行列積ベンチマーク FireSim コンフィグ1 Rocket-Chip Custom- Accelerator 0 0.5 1 1.5 2 2.5 3 3.5 4 2 x 2 x 2 4 x 4 x 4 8 x 8 x 8 16x16x16 18x24x28 性能比率 SWを1とした場合の HW実行の性能向上率 SWに対する性能向上率 HWに対する実行性能 SW実行 HW実行 2 x 2 x 2 327 219 4 x 4 x 4 1024 488 8 x 8 x 8 7041 2527 16x16x16 54559 16118 18x24x28 154808 43806 2019/9/18 79

Slide 75

Slide 75 text

まとめ 80

Slide 76

Slide 76 text

• RISC-Vを取り巻く最新動向についてご紹介しました。 • RISC-Vアーキテクチャだけでなく、その周辺で構築されるエコシステムにも注目です。 • RISC-Vの開発環境の構築方法について簡単にご説明しました。 • シミュレータを使ったアプリケーションの実行 • HiFive1を使ったアプリケーション開発 • HiFive Unleashedを使ったLinuxのブート • FireSimを使ったクラウドでのRISC-Vコア開発 • RISC-Vと、オープンハードウェアが向かう未来について、その一端をご紹 介しました。 81