Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
RISC-V オープンソース ハードウェア 概説
msyksphinz
December 28, 2017
Technology
0
2.3k
RISC-V オープンソース ハードウェア 概説
msyksphinz
December 28, 2017
Tweet
Share
More Decks by msyksphinz
See All by msyksphinz
次世代を担うオープン命令セットアーキテクチャRISC-Vの最新動向
msyksphinz
3
1.9k
Rustで作るフルスクラッチQEMU型エミュレータ
msyksphinz
6
3.5k
ハードウェア記述言語Chiselを もっと活用するためのDiplomacy概説
msyksphinz
1
1.3k
ますます注目される オープンCPUアーキテクチャ RISC-Vの最新動向
msyksphinz
1
2k
オープンソースCPUアーキテクチャ 「RISC-V」を中心に変わる半導体の世界
msyksphinz
1
2k
ますます注目されるオープンCPUアーキテクチャRISC-Vの最新動向
msyksphinz
0
3.5k
Introduction of Technologies and People Supporting RISC-V Ecosystem
msyksphinz
0
3k
RISC-Vエコシステムを 構成する技術と立役者たち
msyksphinz
0
3.1k
試しながら学ぶ オープンソースプロセッサ RISC-V の世界
msyksphinz
1
3.6k
Other Decks in Technology
See All in Technology
Building smarter apps with machine learning, from magic to reality
picardparis
4
3.1k
プロダクトグロースと技術のベースアップを両立させるRettyのアプリ開発スタイル / Achieve Product Growth and Tech Update
imaizume
1
250
Power BI ”を” 可視化しよう!
hanaseleb
0
140
1年間のポストモーテム運用とそこから生まれたツール sre-advisor / SRE NEXT 2022
fujiwara3
5
2.6k
TypeScript 4.7と型レベルプログラミング
uhyo
5
2.7k
三越伊勢丹の接客DXを支える「DevOps基盤」とは
imdigitallab
0
250
Power BI Premiumでデータ準備!
hanaseleb
1
170
モデリング、コンテキスト トランジション +1 / Data modeling
ishiayaya
0
110
Kubernetesの上に作る、統一されたマイクロサービス運用体験
tkuchiki
1
690
SRE_チーム立ち上げから1年_気づいたら_SRE_っぽくない仕事まで貢献しちゃってる説
bitkey
PRO
0
1.6k
tfcon-2022-cpp
cpp
5
4.4k
AWS全体のセキュリティ管理と快適なセキュリティ運用
cmusudakeisuke
2
10k
Featured
See All Featured
Creatively Recalculating Your Daily Design Routine
revolveconf
205
10k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
103
16k
Ruby is Unlike a Banana
tanoku
91
9.2k
Learning to Love Humans: Emotional Interface Design
aarron
261
37k
Documentation Writing (for coders)
carmenhchung
48
2.5k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
350
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_i
21
14k
How GitHub (no longer) Works
holman
296
140k
YesSQL, Process and Tooling at Scale
rocio
157
12k
Infographics Made Easy
chrislema
233
17k
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 (発表者のブログ)