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
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
150
Other Decks in Technology
See All in Technology
書き手が人でもAIでも正しくなる道、SREを埋め込んだDeveloper Platform / tech drivers day8
chmikata
4
800
キヨさん67歳 AIコーディングエージェント物語
happysamurai294
0
120
ポケモン対戦を自動で記録して振り返ろう
fufufukakaka
0
410
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
630
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
580
How we choose session proposals
kawaguti
PRO
1
180
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
13k
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
1
330
[re:Invent2026事前勉強会(有志開催)]続きは、ラスベガスの廊下で / continue-in-the-vegas-hallway
sh_fk2
0
360
1週間、Opus封印でお願いします
kintotechdev
0
340
Draft AIエージェントの トークン消費を最小化する 8つの原則
kinopeee
6
1.8k
アカウント統制の健康診断
kenichinakamura
1
210
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
My Coaching Mixtape
mlcsv
0
370
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
4 Signs Your Business is Dying
shpigford
187
23k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
860
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
330
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
Skip the Path - Find Your Career Trail
mkilby
1
260
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とはアーキテクチャの異なるアクセラレータも作ってみたい
以上