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
170
オレオレ言語 soramame の紹介
matsud224
0
140
Other Decks in Technology
See All in Technology
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
2
640
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
200
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
180
Pavlokで始める電撃駆動開発
sgrsn
0
180
モバイルアプリ開発概論2026
recruitengineers
PRO
3
500
新しい SLO が良い感じにハマっている話
z63d
5
2.1k
事業価値と Engineering 2026年度版
recruitengineers
PRO
44
22k
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
450
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
430
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
20260804_Q4AzureUpdateBite_FabricDataAgentの精度を高める設計.pdf
matayuuu
1
120
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Embracing the Ebb and Flow
colly
88
5.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Crafting Experiences
bethany
1
240
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Leo the Paperboy
mayatellez
8
2.1k
Odyssey Design
rkendrick25
PRO
2
750
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
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とはアーキテクチャの異なるアクセラレータも作ってみたい
以上