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
Verilator + Rust + gRPC と Efinix の RISC-V でAIアク...
Search
Ryuji Fuchikami
November 05, 2025
Programming
0
20
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
RTLを語る会用発表資料 2025/11/08
https://talkrtl.connpass.com/event/367389/
Ryuji Fuchikami
November 05, 2025
Tweet
Share
More Decks by Ryuji Fuchikami
See All by Ryuji Fuchikami
オリジナルの深層学習で HLS Challenge にチャレンジ
ryuz88
0
610
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
2.1k
LUT-Network ~その後の話~
ryuz88
0
99
Rust で RTOSを考える
ryuz88
0
140
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~
ryuz88
0
150
Fast and Light-weight Binarized Neural Network Implemented in an FPGA using LUT-based Signal Processing and its Time-domain Extension for Multi-bit Processing
ryuz88
0
130
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
ryuz88
0
63
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
0
1.2k
Other Decks in Programming
See All in Programming
CSC509 Lecture 09
javiergs
PRO
0
280
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1.2k
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.4k
CSC509 Lecture 11
javiergs
PRO
0
280
Inside of Swift Export
giginet
PRO
1
310
Introducing RemoteCompose: break your UI out of the app sandbox.
camaelon
2
430
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
740
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.7k
マイベストのシンプルなデータ基盤の話 - Googleスイートとのつき合い方 / mybest-simple-data-architecture-google-nized
snhryt
0
120
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
330
data-viz-talk-cz-2025
lcolladotor
0
110
Swift Concurrency 年表クイズ
omochi
3
220
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
4 Signs Your Business is Dying
shpigford
186
22k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Become a Pro
speakerdeck
PRO
29
5.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
KATA
mclloyd
PRO
32
15k
The Cult of Friendly URLs
andyhume
79
6.7k
The Pragmatic Product Professional
lauravandoore
36
7k
For a Future-Friendly Web
brad_frost
180
10k
Gamification - CAS2011
davidbonilla
81
5.5k
Transcript
Verilator + Rust + gRPC と Efinix の RISC-V で
AIアクセラレータをAIで作ってる話 RTLを語る会(2025/11/8) 発表資料 渕上 竜司 (Ryuji Fuchikami)
@Ryuz88 渕上 竜司(ふちかみ りゅうじ) 24年間の電機メーカーの研究開発職を経た後に、現在フリーランス。 福岡を拠点に副業的なこともあれやらこれやら。 基本的にFPGAどまりのソフト屋さん。 でもせっかくRTL書くならCPUやGPUじゃ出来ない試作がしたいがモットー 2 ICCE2018
(国際会議) 高速度カメラと FPGAで高速AI認識 2023年10月号 FPGAマガジンNo.1 FPGAで リアルタイムOS 動体リアルタイム プロジェクションマッピング 単眼3Dモーションセンサ FPGA(AMD)で 1000fps AI認識 趣味/副業などの自由すぎる活動の成果 電機メーカー時代の職務発明など 2024年10月号 FPGAマガジンNo.3 過去の渕上の成果 「パソコンでは出来ないことをFPGAの上でやってみる」をコンセプトに活動中 特許とかで公開されているものしか書けませんが・・・ FPGA(GOWIN) 超小型 AI認識 2024年10月号 GOWING Vol.4 10年前のアイコン 最近追加で 2025年12月号も!
フューチャー株式会社 (ki-labs) 3 Ki-labs(knowledge innovation laboratories) イン・メモリー コンピューティング スパイキング ニューラルネット
ニューロモフィック コンピューティング リザバー コンピューティング 非ノイマン型 コンピューティング バイナリ ネットワーク ニューラル 状態空間モデル 共同研究 千葉工業大学 数理工学研究センター
千里の道も一歩から まずはFPGAで古典AIを試作しよう 4 そうは言ってもいきなりチップも作れないので...
本日は サブタイトルを無視して EfinixのFPGAの話 5 と、いうことで
Titanium Ti375 C529開発キット 6 RISC-Vが4コア入ってる Linux(buildroot)動く わりと速い... そして安い.... DSPが1344個
まずはFPGAでAIアクセラレータを作ってみよう! • 基本は大事! • LLMはメモリ的に厳しそうなので、古典的なCNNをまずやろう • とりあえず効率のいい行列乗算が出来れば大抵のAIに応用可能 • シストリックアレイを作ってみよう •
理由:名前がかっこいいから! 7 名前は大事です
当然全部RTLで書く 8
DSPの仕様を眺めてみる 9 Single (INT18) Dual (INT8) Quad (INT4) 画像だしオーソドックスにINT8ぐらいの量子化狙い? DSP数の2倍使える!
⇒ 最大2688個
DSP仕様をもっと眺めてみる 10 Reg × Reg + Reg Reg A B
O CASCIN CASCOUT Reg × Reg + Reg Reg Reg Reg × Reg + Reg Reg Reg Reg × Reg + Reg Reg Reg Reg × Reg + Reg Reg Reg Reg × Reg + Reg Reg Reg Reg × Reg + Reg Reg Reg b0 b1 b0 x0 x1 y0 y1 y2 W00 W10 W20 W01 W11 W12 y = W・x + b つまりこういう接続をしろという天の声が聞こえる... いわゆるDSPな構造
論よりRUNで、とりあえず書いてみる 11 generate for 最高! メタプログラミング楽しい
こいつ... 速いぞ... 12 DSP24 DSP24 DSP24 DSP24 ・・・ DSP24 DSP24
DSP24 DSP24 ・・・ DSP24 DSP24 DSP24 DSP24 ・・・ DSP24 DSP24 DSP24 DSP24 ・・・ ・・・ ・・・ ・・・ ・・・ 16列 16行 01 02 03 10 11 12 20 21 00 10 20 22 00 02 01 11 21 13 23 03 12 21 13 単体で合成&配置配線してみた 幅Nのデータ転送で O(N2)の演算ができるのが シストリックアレイの醍醐味 256並列積和やってみた
よし、じゃあみんなでちゃんとした AIアクセラレータにしてみよう! 13
大矢敏 あっという間に部隊発足 14 PE PE PE 外部メモリ(LPDDR4-SDRAM) READ-DMA WRITE-DMA MaxPooling
RISC-V コントローラ INT8 16x16 行列乗算 (シストリックアレイ) 出力:INT24 + leaky ReLU 16lane@8bit 16lane@20bit post-Scaling 16lane @8bit 16lane@20bit Pre-Scaling アドレス 演算コア 累算入力 /バイアス入力 (20bit x 16) 累算出力 (20bit x16) データ出力 (8bit x16) データ 入力 (8bit x16) 重み (8bit x256) BRAM BRAM BRAM メモリファイル (BRAM 10bit x 1024) 16bank x 16lane 128bit@500MHz 512bit@200MHz 128bit@500MHz 512bit@200MHz ローカルストア 制御 PINK (Parallel INterconnect Kernel) Mark-I モデル開発 量子化 チューニング SPU (Systolic Processing Unit) どっかのDPUみたいとか言わないで... 北本愁 AI指南役 三宅弘樹 渕上 竜司 石橋国人 宮下 悠希 総括 私はシストリック アレイ試した勢いで そのまま演算部担当w
面倒事はRISC-V から命令コードを流し込む形でソフトに丸投げ • プログラマが頭の中で考えるべきこと • シストリックアレイと後計算で30段を超えるパイプラインでの衝突回避 • 演算器とSDRAMロードストアの6ポートのバンク衝突回避 • 完了割り込みとコマンドキューの残量管理
• 演算オーバーフローしないように適切にスケール管理 • CNN演算のIM2COLアドレッシング生成 • 画像境界でのボーダー処理/ユニットを跨いだ糊代処理 • ローカルストアに載りきれないパラメータのスピルアウト • などなど... 15 ごめん、北本さん、ちょっと人間やめてもらっていいですか? ホモ・サピエンスには 難しすぎる ホモ・デウスへの進化が必要 注:どっかで聞いたような話ですが、あんまりツッコまないでくださいw これだからハード屋は....
え? ソフトウェアシミュレータ欲しいですか? 16 むしろなぜ要らないとおもった?
面倒なのでRTLをVerilatorに食わせて ソフトウェアシミュレータっぽくでっちあげよう 17 | \ __ / _ (m) _ピコーン
|ミ| / `´ \ ∧ ∧ (・∀ ・) ノ( )ヽ < >
昔Python用に作ってたライブラリを Rust 接続で復刻する 18 BLUE SDRAMモデル (AXI-Slave疑似モデル) Mark-I (AI アクセラレータ)
直接読み書き AXI4-Lite Master Clock Reset イベントキュー シミュレーション 進行管理 SystemVerilog C++ Rust Verilator 内部管理 Mark-I runtime SDRAM 読み書き API ローカルストア 読み書き API SPU制御API PINK制御API Jelly (私のOSS) 要するにTLM(Transaction Level Modeling) こいつの話を 次ページ以降で 実機で core::ptr::read_volatile() core::ptr::write_volatile() に置き換わる部分をSimに繋ぐ https://github.com/ryuz/jelly
C++から SystemVerilog のイベント進行管理をする話 19 Region 説明 Preponed アサーションのサンプリング準備 Active ブロッキング代入/代入予約
Inactive #0 遅延の実行 NBA ノンブロッキング代入 Observed アサーション評価用 Reactive assign や always_comb Postpend $strobeや$monitor SystemVerilog の Time Slot の処理定義 Verilatorに対しては eval() 関数しかない! シングルクロックでのVerilatorの使い方 複数クロック使いたい&AXIバスとかをC++から使いたい
クロックモジュール クロックモジュール [内部解説] C++モデルもフェーズを分けて処理 20 時刻を進める 事前の信号を取得 イベント信号設定 [Verilator] eval()
信号変化を受けた処理 イベントキュー 先頭から取り出す 変化チェック 波形ダンプ クロックモジュール (C++) リセットモジュール (C++) AXI-バスマスタ (C++) PrefetchProc() EventProc() EvalProc() CheckProc() まだやることがある もう変化する信号は無い PrefetchProc() EventProc() EvalProc() CheckProc() PrefetchProc() EventProc() EvalProc() CheckProc() イベントキュー (優先度キュー) 次の自発イベントを 登録 Rustコード
作ったコードが動き出す~♪ 21 ステップ実行など自在にできる 期待値一致! テストコードもRustで 書ける 如何にもシストリックアレイ なぜか VCDが出てくるw
Verilator + Rust シミュレータの利点 • メリット • ソフトウェアシミュレータよりRTLとの等価性が高い • RISC-V実機用と同一のRustコードがx86上で実行できる
• ⇒ なので、Rust 上でブレークポイント張りながら実行できる (なんなら Jupyter でも Rust 動く) • 波形ファイルが出力できる(バグをRTL設計者と一緒に追える) • SVAなどでバンク衝突や違反コードの実行を見張れる • 一度C++にするのでまあまあ速い • 期待値実験用に Python バインディングも作ってたり • デメリット • コンパイルが長い (最初の一度だけだが) • ソフトウェアシミュレータよりは遅いと思われる ⇒ なので gRPCで実機併用する 22
GitHub Copilot(BeastMode) で gRPC も実装した話 23 シミュレータ (Verilator) Efinix実機 RISC-V
+ FPGA Rust コード gRPC サーバー Rust コード gRPC クライアント Rust コード LAN gRPC サーバー Rust コード gRPC クライアント VPN 実機FPGA PC環境 同一ソースコードが使える 共通API (trait) 共通API (Trait) 共通API (Trait) 共通API(Trait) ノマド可 AIが書いたAPI仕様書投げ込んだら AIが勝手に作った部分 実機を使うとシミュレータがアクセラレートできるぞ!(本末転倒) UIO RTL 大矢氏オススメ
AIもネコ人並みに活用 • リバースエンジニアリング的にドキュメント作らせるのは賢い • レジスタ仕様書 • API仕様書 • README.md •
バグは案外よく見つけてくれる • コードレビューのお供にはオススメ • RTL以外の周辺のコード生成は世間並の水準(それはそう) • テストコードの生成/gRPC とか Pythonバインディングとか BeastModeが無双 • ROM用のHEXファイル弄らせるとか、パラメータ変換とかツール類 • Linuxのブートシーケンスを解析してレポートさせる • RTLのVibe Coding は場合によるが、まだ苦戦中 • ベンダー固有のテクノロジを考慮した高速な回路とか考えるのはまだ苦手 • 三段論法/四段論法必要な複雑な状態遷移と影響は難しそう • 高クロックで動かしたいなら丸投げはやめておいた方がいい • Efinixのアーキでの論理の深さを想像しながらのコードまでは書いてくれない模様 24 AI + WaveDrom で自動生成したレジスタ仕様書 ki-labs の AI エバンジェリスト 大矢敏氏監修のもとAI活用推進中 AI作ってるのに 人並みじゃダメでしょ
なお、このプレゼンもAIチェック済みですw 25 プレゼンを AIがレビューしてくれる システム作ったよー
まとめ •Verilator すごい •BeastMode つおい 26 しまったRTLを一言も語らずに終わってしまった(汗
ご清聴ありがとうございました この後の「RTLをシバク会」にて、 フューチャー株式会社の石橋にもお声がけください 27 我々の取り組みに興味のある方は是非お気軽にアクセスください インターン 新卒採用 キャリア採用 https://www.future.co.jp/recruit/recruit/rec-fresh/