Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
8日で作るオレオレRISC-V CPU
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Daiki Matsunaga
August 16, 2022
Technology
2.3k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
8日で作るオレオレRISC-V CPU
Daiki Matsunaga
August 16, 2022
More Decks by Daiki Matsunaga
See All by Daiki Matsunaga
Satyrographos Package Indexの宣伝
matsud224
0
240
Prolog
matsud224
1
200
GAMEBOYエミュレータ
matsud224
0
180
オレオレ言語 soramame の紹介
matsud224
0
140
Other Decks in Technology
See All in Technology
hackers_champloo_2026_tidb
makocchi
0
160
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.8k
パッチ更新でterraform initが落ちた日
grimoh
1
140
AI コーディングと人間の認知スループット / CTO Night & Day 2026 Morning Session / AI Coding and Human Cognitive Throughput
prog893
4
1.1k
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
170
WasmをRustにする
sansantech
PRO
0
250
事業成長とデータ活用を止めないためのマネジメントへ挑戦
hiracky16
0
390
Temporal 最高!でも改めて「日付」について調べたら人類の負債すぎる件
riyaamemiya
0
150
AIにシークレットを見せない、WSL2で安全な開発環境
yazm
0
300
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
770
USB PDを使ってスマホを労わりたい
raspython3
0
180
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
870
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
Docker and Python
trallard
47
4.2k
Practical Orchestrator
shlominoach
192
12k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
310
Building AI with AI
inesmontani
PRO
1
1.3k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Transcript
8日で作るオレオレRISC-V CPU 無線と実験_令和版@アックス京都本社 2022/AUG/16 株式会社アックス 松永大輝
自己紹介 • 松永 大輝 (@matsud224) • 株式会社アックス 勤務 • 趣味で作ったもの
◦ TCP/IP搭載のUNIXライクOS(matsud224/tinyos) ◦ オレオレプログラミング言語(matsud224/soramame) ◦ Prolog to WAM codeコンパイラ(matsud224/wamcompiler) ◦ ラズパイで動くハイパーバイザ( matsud224/raspvisor) ◦ GameBoyエミュレータ(matsud224/gb_emu) ◦ など...
きっかけ • OSSコンソーシアム様よりTang Primer FPGAをお借りした • とりあえず遊んでみた ◦ 大学の講義で少し触ったVerilog(ハードウェア記述言語)を思い出しながら、論理 を記述
◦ まずは定番のLチカ ◦ カラーバーやキャラクタのVGA出力 ▪ Verilog以上に、ピンヘッダのはんだ付けに苦戦...
きっかけ • 格安FPGAといえども、まだまだリソースには余裕がある • せっかくなので、もう少し複雑な論理を書きたい • そこで、CPUを作ることにした ◦ ISAは今流行りのRISC-Vで
今回実装したもの • RISC-V 32bit CPU ◦ ソースコード: https://github.com/matsud224/rvcpu/tree/simple-cpu ▪ Verilogで記述、500行を切っている
◦ 整数命令セット RV32I を実装 ▪ 整数演算・分岐・ロード・ストア • 以降、製作記...
0日目:仕様書読み • RV32Iの仕様は、Specifications - RISC-V International の”Volume 1, Unprivileged Spec”にある
◦ たったの18ページ! ◦ 40命令ある • イタリック体のメモ部分が面白い ◦ この仕様に決定した理由や、実装上の注意点が書かれている
1-2日目:実装 • 命令から各フィールドを切り出すデコーダの実装 ◦ 仕様書の後ろにある”Instruction Set Listings”とにらめっこ • 1命令の実行に複数サイクル使う実装にした ◦
ステートマシンを書く ◦ 命令の種類で分岐し、対応する演算やレジスタ書き込み、メモリアクセスを行う • 趣味ではあるが、まじめにテストも行う ◦ riscv-tests (https://github.com/riscv-software-src/riscv-tests) を使用 ◦ 命令ごとにテスト(アセンブリ言語で記述)が用意されている ◦ Verilogシミュレータ(Icarus Verilog)でシミュレーションを行い、このテストを流す
3-4日目:論理合成にかける • 全テストをパスしたので、次は実機動作を目指す • が、Tang Primerではリソース不足に • プログラマ的なVerilog記述になっていたことが原因 ◦ さまざまな場所で代入や演算を行っており、演算器が多数生成されてしまっていた
◦ (論理合成系がリソースシェアリングしてくれることを期待していたが.....) • ハードウェアを意識した書き方に変更してみた ◦ ALU部を独立させ、オペランドや演算種別の切り替え論理を明示的に記述 ◦ リソースシェアリングされるよう、入力オペランドの切り替えを明示的に記述 ◦ 書きやすさのために可変回数シフトを使用していたが、必要最小限に減らした ◦ 結果、リソース使用量が激減した
5-6日目:クロスコンパイル環境構築、ROM・RAM・LEDをCPUに接続 • ROM, RAMにはFPGAのIPを使用 • RISC-V用gccでクロスコンパイルしたプログラムをROMに書き込んだ状態で実行 できるようにする ◦ ELFから必要なセクションを抽出 ◦
FPGAのツールが認識する MIF形式に変換するツールを作成 • Lチカのために、RGB LEDをメモリにマッピング
7日目:Lチカ on 自作RISC-V CPUに成功 • デバッグを繰り返し... • RGB LEDの色を順番に切り替える、下記のコードが実機で動作した! •
この時点で、リソース使用はLUT 34%、REG 6%(2コアにできそう??) • 最大動作周波数は24MHz void main() { volatile unsigned int *led = (volatile unsigned int *)0x1000000; *led = 0; while (1) { for (volatile int i=0; i<2400000; i++); int prev = *led; *led = prev==8 ? 0 : prev+1; } }
他にやったこと • UARTの送信部を追加し、文字を出力できるようにした • CoreMarkベンチマークを移植し、走らせてみた ◦ CoreMark値: 35 ◦ CoreMark/MHz値:
1.46 ◦ (単純に比較はできないが、 ◦ E203は2.14, RocketChipは2.32) 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 1363203067 Total time (secs): 56 Iterations/Sec : 35 Iterations : 2000 Compiler version : GCC11.1.0 Compiler flags : -Wall -O2 -ffreestanding -nostartfiles -T link.ld -march=rv32im -mabi=ilp32 -mno-div Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x4983 Correct operation validated. See README.md for run and reporting rules.
データパス(概略)
Tang Primerについて • 激安FPGAだがRISC-Vコアが載る程度のリソース量はあり、楽しく遊べた • IDEが簡素で使いやすい • 論理合成系がかなり不安定 ◦ 正しいVerilogコードを入力しても、突然ハングアップすることが多々あった
◦ 合成が進むようコードの順番を無意味に入れ替えたりした ◦ 論理合成が通ることを祈るしかない • 中国語マニュアルしか付属しないが、ネットを探せば英語版も見つかった: ◦ Tang Dynasty (TD) Software Manual (v4.2, 2018.07) ◦ Anlogic Technology EAGLE Series FPGA Data Sheet
まとめ • 素朴なRISC-V CPUを作った • 動作は遅いが、消費するリソースが少ないという長所はある • 次はパイプライン化を行ってIPCと動作周波数を上げたい • FPGAならではの、CPUとはアーキテクチャの異なるアクセラレータも作ってみたい
以上