Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RISC-V オープンソース ハードウェア 概説
Search
msyksphinz
December 28, 2017
Technology
4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RISC-V オープンソース ハードウェア 概説
msyksphinz
December 28, 2017
More Decks by msyksphinz
See All by msyksphinz
オープンソースでどこまでできる?フォーマル検証チャレンジ
msyksphinz
0
400
LiteXとオレオレCPUで作る自作SoC奮闘記
msyksphinz
0
1.9k
ハイパフォーマンスCPUの作り方_アーカイブ用.pdf
msyksphinz
0
67
作って学ぶ コンピュータアーキテクチャ 出版にあたっての経験談
msyksphinz
1
1.8k
次世代を担うオープン命令セットアーキテクチャRISC-Vの最新動向
msyksphinz
3
5.6k
Rustで作るフルスクラッチQEMU型エミュレータ
msyksphinz
8
4.9k
ハードウェア記述言語Chiselを もっと活用するためのDiplomacy概説
msyksphinz
1
1.9k
ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向
msyksphinz
2
2.9k
オープンソースCPUアーキテクチャ 「RISC-V」を中心に変わる半導体の世界
msyksphinz
1
2.7k
Other Decks in Technology
See All in Technology
連合学習と機密コンピューティング
lycorptech_jp
PRO
0
120
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.1k
Snowflakeと仲良くなる第一歩
coco_se
4
480
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
4
680
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
RAG を使わないという選択肢
tatsutaka
1
250
ルールやカスタム機能、どう活かす?ハンズオンで体感するIBM Bobの出力コントロール
muehara
1
170
エンジニアリング戦略の作り方 / Crafting Engineering Strategy
iwashi86
21
7k
【2026年版】 ベクトル検索䛸 Embedding最前線
mocobeta
0
170
RSA暗号を手計算したくなること、ありますよね?? (20260615_orestudy6_rsa)
thousanda
0
440
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
180
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
110
Featured
See All Featured
Design in an AI World
tapps
1
240
The Cost Of JavaScript in 2023
addyosmani
55
10k
Abbi's Birthday
coloredviolet
2
8.1k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Test your architecture with Archunit
thirion
1
2.3k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
YesSQL, Process and Tooling at Scale
rocio
174
15k
Transcript
RISC-V オープンソース ハードウェア 概説 「FPGA開発日記」 著者 : @msyksphinz_dev 2017/12/18 RISC-V
Day Tokyo 2017 http://msyksphinz.hatenablog.com
RISC-Vちょっと知ってる人のために、 簡単にトライできるオープンソースハードウェアの紹介 • 各社がRISC-Vに対応したコアを発表している中で、UCBの発表した オープンソースコアが提供されている • 手っ取り早くRISC-Vを試すためにはオープンソースデザインがお勧め。 • 最新の仕様に追従しているのでスタート地点としてはおススメ •
オープンソース・ハードウェアについて紹介 RISC-Vに 興味がある? RISC-Vで何を試して みたい? FPGAを持っている? No そんな馬鹿な!? Yes アクセラレータを接続して、 アプリケーションをゴリゴリに最適化したい RISC-Vの仕様について勉強し、 簡単なアプリケーションを動かしてみたい ZedBoard HiFive1でアプリケーション開発 Rocket-ChipとFPGAで 動かして評価 Rocket-ChipをRTL シミュレーション スタート
RISC-Vのオープンソースハードウェアは 半導体業界にとってチャンス • 最先端プロセスは巨大企業しか追従できない • IP, EDA, ウェハ製造費, パッケージ費 …
• 中小企業は追従できず、アイデアはあってもチャンス減 • なるべく自社の「売りの部分」に時間を掛けたい • それ以外の部分(制御コア, 外部I/F)などはなるべく時間を掛けたくない • CPUというSoCの中心部の、実装コストを最小化させる • CPU以外にもチップ内で注力したい部分はたくさんあるはず。 • だったら、CPUはアリモノで早く作って、 「本当に価値のあるところ」に注力したい • 共通の制御コアはRISC-Vでさっさと終わらせよう! • 無料、性能は商用コアに引けを取らない。 ソフトウェアスタックもある程度揃っている。 という選択肢について考えてみてください。
GitHub上に”RISC-V”のすべてが公開されている • コンパイラ・オペレーティングシステム • GCC 7.1でRISC-VがMainstreamに取り込まれた • LLVM/ClangのRISC-Vサポートが lowRISCプロジェクトにより進行中 •
Linuxカーネルは最新のVersion 4.15に対応済み • 各種LinuxディストリビューションがRISC-Vのサポート進行中 • ハードウェアとしては、SiFiveのU54-MC(64bitマルチコアRISC-V SoC)がLinuxをサポート • Linuxだけでなく、BSDもRISC-V対応が進む • 多くのプログラミング言語がRISC-Vへのポートを進めている • 非公式プロジェクトも多いが • C/C++, Go, Rust, Ocaml, Java, Pascal… • GNUライブラリ (Glibc, NewLibなど)もRISC-V移植済み • ※ 筆者もMicroPythonのRISC-V移植を試行 • ISSで動作するところまで確認した。 ※ https://riscv.org/software-status に詳しくまとめられている
RISC-V 開発環境 • 命令セットシミュレータ・エミュレータ • UCB Official Spike Simulator /
Gem5 • QEMU • Angel (JavaScript RISC-V simulator!) • RISCVEMU : QEMU開発者がRISC-V専用 シミュレータを作ってしまった! • SiFiveの提供するFreedom Studio • Eclipseベース • Linux, Mac, Windows対応 • RISC-VボードHiFive1 • Arduino IDEから制御可能 • もちろんただのCPUなのでC/C++のプログラムも実行できる • Freedom-E-SDK • CUIでのプログラム開発。HiFive, Freedom SoC PlatFormに対応 freedom-e-sdk bsp openocd riscv-gnu-toolchain software demo_gpio dhrystone welcome local_interrupt led_fade
オープンソース RISC-Vコア Rocket-Core, BOOM SoC環境 Rocket-Chip Generator, Freedom SoC •
UCBの開発したRISC-V Implementation • Single Issueの5段パイプライン “Rocket-Core” • 2-way/4-wayのOoOコア “BOOMv1”, “BOOMv2” • Rocket-Core, BOOM実装環境 Rocket-Chip Generator • Rocket-CoreやBOOMを内蔵してRTLSim, FPGAで評価することができる。 • SiFive社の開発したSoC環境 Freedom SoC Environment • SiFiveのサポートあり、GitHubからダウンロードできる無料版もある。 • Rocket-Chip Generatorよりも使えるI/Oが揃っている。 無料 ソースコード公開 最新仕様に追従 開発が活発 Rocket-Chip Generator Rocket-Core BOOMv1 BOOMv2 Freedom SoC E31 Core Complex E51 Core Complex U54-MC Core Complex Chiselで記述さ れている
Rocket-Chipの実装言語 “Chisel” • Scalaをベースとしたハードウェア記述言語 • Rocket Chipはすべて”Chisel”で実装してある • 最終的にはVerilogに変換される •
Chiselを使うことにより、合成用言語Verilogと分離する • Chisel→FIRRTL(中間言語)と変換することで、 VHDLなども出せる(一応) • 検証で有利 • Verilogシミュレータを走らせなくても Chisel(≒Scala)で検証パタンを書ける→高速 FIRRTL FPGA Verilog C++ Simulator FIRRTL ASIC Verilog
Rocket-Chip Generator, Freedom SoCの構成方法 • 高いポータビリティ • Chisel(Scala拡張)によるモジュールの切り離し、コンフィグレーションの 構成変更が容易 •
Xilinx ZYNQ FPGA, Arty, Virtex Ultrascaleなどに対応した構成を作成可能 Xilinx ARTY FPGA E300 Freedom SoC E3 Coreplex RV32E/IMACN ROM Debug AON UART SPIFlash SPI GPIO PWM I2C I-Cache 4kB D-Cache 16kB Custom Coprocessor Xilinx ZYNQ FPGA Rocket-Chip Generator RV64GC ROM Debug I-Cache 4kB D-Cache 16kB Custom Coprocessor AXI2TileLink ARM DRAM I/O class DefaultConfig extends Config( new WithNBigCores(1) ++ new BaseConfig) class TinyConfig extends Config( new WithNMemoryChannels(0) ++ new WithIncoherentTiles ++ new With1TinyCore ++ new BaseConfig) Chiselを使って、Rocketの 構成を簡単に変更できる
Chiselを使って お手軽にオリジナルRISC-Vコアを作成 class WithNBigCores(n: Int) extends Config((site, here, up) =>
{ case RocketTilesKey => { val big = RocketTileParams( core = RocketCoreParams(mulDiv = Some(MulDivParams( mulUnroll = 8, mulEarlyOut = true, divEarlyOut = true))), dcache = Some(DCacheParams( rowBits = site(SystemBusKey).beatBits, nMSHRs = 0, blockBytes = site(CacheBlockBytes))), icache = Some(ICacheParams( ... } }) class With1TinyCore extends Config((site, here, up) => { case XLen => 32 case RocketTilesKey => List(RocketTileParams( core = RocketCoreParams( useVM = false, fpu = None, mulDiv = Some(MulDivParams(mulUnroll = 8))), btb = None, dcache = Some(DCacheParams( rowBits = site(SystemBusKey).beatBits, nSets = 256, // 16Kb scratchpad nWays = 1, nTLBEntries = 4, nMSHRs = 0, blockBytes = site(CacheBlockBytes), scratch = Some(0x80000000L))), … blockBytes = site(CacheBlockBytes))))) }) class TinyConfig extends Config( new WithNMemoryChannels(0) ++ new WithIncoherentTiles ++ new With1TinyCore ++ new BaseConfig) Chiselを使って、コアの部品を簡単に着脱・ カスタマイズできる。 ベースのコンフィグレーションに対して、 カスタマイズを行っていく。 VM Support メインパイプライン FPU DIV I-cache 構成 D-cache 構成 I/F
FPGAでの実行環境が用意されている • ZedBoard向けに論理合成→インプリメント • UCBのfpga-zynqリポジトリが便利 • https://github.com/ucb-bar/fpga-zynq • FPGAでのRTLSim高速化なら MIDASの方が良い?
• (https://github.com/ucb-bar/midas-top-release) • インプリメントの手順は非常に単純 • cd zedboard; make • 合成後binファイル (.bin) • FSBL, U-Boot, BOOT.binなどZynqの起動に必要なもの • PS部(ARM)で動作させるPeta-Linuxのビルド • RISC-Vで動作させるLinuxのビルド • 全部自動でやってくれる! • このフレームワークはRISC-Vだけで 使うのはもったいない • SDカードに書き込むファイル群が ディレクトリにまとめて生成させるので、SDカードにコピーする だけ fpga-zynq rocket-chip zedboard zynq zc706 sub-repo 合成ディレクトリ 合成ディレクトリ 合成ディレクトリ
Rocket-Chip Generatorの RTLシミュレーション・FPGAインテグレーション • RTLシミュレーション環境 • VCS/Verilator対応 • ChsielのデザインをVerilogに変換し、シミュレーション実行 •
FPGAで合成して評価する場合 • SRAMの置き換えなどに注意すること • ASIC向け : rocket-chipのリポジトリでは emulator/generated-src/*.behav_srams.v • FPGA向け : Behavior SRAMをBlockRAMに正しく置き換えること • 生成したVerilogの中で配列の部分を抽出して、 モデルとして生成させることも出来る Verilog 0 10000 20000 30000 40000 50000 0 20000 40000 60000 80000 100000 120000 140000 Rocket Default Rocket Small Freedom-E300 BOOM v1 BOOM v2 RISC-V Design 合成結果 Vivado v.2016.2 ZYNQ 7z020-clg484 Total LUT FF FPGA Design RTL Simulation RTLシミュレーション実行の様子
RISC-Vの備えるアクセラレータインタフェースについて • 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 のレジスタデータ ・デコード情報など
Rocket-Chipのカスタマイズ例: Dot Product Acceleratorを作ってRocket Coreに接続 2つの行列のアドレスと長さを指定して、 自動的にデータをフェッチ+MAD処理をするアクセラレータ RoCC I/F は64bitなので、uint32_tを2つフェッチして2-waySIMDで計算した
× = 2-way SIMDで 要素2つ分計算 実装はgithubに公開してあります。 https://github.com/msyksphinz/rocket-chip/tree/feature/matrix32 ハードウェアを使って、メモリのフェッ チ処理とデータの演算処理をオーバラッ プさせることで高速化を狙う CMD RESP RESP CMD Rocket Core L1 D-cache Accelerator CMD RESP External H_addr MAD V_addr Chiselで記述
Rocket-Chipのカスタマイズ例:性能評価 ZedBoardで動作させた SW: ソフトウェアで実行 HW1: ハードウェアで実行
行列積を「行」「列」の順番で実行 HW2: ハードウェアで実行 行列積を「列」「行」の順番で実行 行列のサイズが大きくなると、8倍以上の性能向上 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 2 x 2 x 2 4 x 4 x 4 8 x 8 x 8 16 x16 x16 18 x24 x28 性能比率 行列サイズ ソフトウェア実行を1とした場合の、 ハードウェア実行の性能向上率 SW/SW HW1/SW HW2/SW SW HW1 HW2 2 x 2 x 2 233 119 139 4 x 4 x 4 1094 325 310 8 x 8 x 8 7299 1287 1296 16 x16 x16 58610 8258 7122 18 x24 x28 172256 19581 19565 SW/SW HW1/SW HW2/SW 2 x 2 x 2 1.0 1.958 1.676 4 x 4 x 4 1.0 3.366 3.529 8 x 8 x 8 1.0 5.671 5.632 16 x16 x16 1.0 7.097 8.229 18 x24 x28 1.0 8.797 8.804 ソフトウェア実行を1とした場合 のハードウェア実行の性能向上率 Dot Product Acceleratorを使った 行列積サイクル数 Acceleratorを使って 8倍高速化
まとめ: RISC-V オープンソースデザインは 弱い者の味方 • オープンソースのデザインでRISC-Vをトライ • お金が無くてもRISC-Vを試行できる • ハードウェア・ソフトウェアのRISC-V対応は着実に
進んでいる。 • いろんな手段が用意されている • FPGAボードを使う : カスタムデザインでゴリゴリに最適化 • 評価ボードを買う : 簡単にアプリケーション評価可能 • まずは資料を探してみよう • https://riscv.org/specifications/ (RISC-Vの仕様書一覧) • https://www.sifive.com (SiFiveのWebSite) • https://github.com/freechipsproject/rocket-chip (Rocket Chip) • https://github.com/sifive/freedom-e-sdk (Freedom SDK) • http://msyksphinz.hatenablog.com (発表者のブログ)