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
8日で作るオレオレRISC-V CPU
Search
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
190
GAMEBOYエミュレータ
matsud224
0
160
オレオレ言語 soramame の紹介
matsud224
0
130
Other Decks in Technology
See All in Technology
発表と総括 / Presentations and Summary
ks91
PRO
0
140
プロダクト開発組織の現在地(Ver.2026/07) / product-organization
kaonavi
0
100
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
220
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
320
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.6k
OPENLOGI Company Profile for engineer
hr01
1
74k
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
2
130
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
280
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
4
1.4k
DatabricksにおけるMCPソリューション
taka_aki
1
280
AI時代の闇と光
tatsuya1970
0
110
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Producing Creativity
orderedlist
PRO
348
40k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
4 Signs Your Business is Dying
shpigford
187
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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とはアーキテクチャの異なるアクセラレータも作ってみたい
以上