Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Verilator + Rust + gRPC と Efinix の RISC-V でAIアク...

Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08

RTLを語る会用発表資料 2025/11/08
https://talkrtl.connpass.com/event/367389/

Avatar for Ryuji Fuchikami

Ryuji Fuchikami

November 05, 2025
Tweet

More Decks by Ryuji Fuchikami

Other Decks in Programming

Transcript

  1. Verilator + Rust + gRPC と Efinix の RISC-V で

    AIアクセラレータをAIで作ってる話 RTLを語る会(2025/11/8) 発表資料 渕上 竜司 (Ryuji Fuchikami)
  2. @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月号も!
  3. フューチャー株式会社 (ki-labs) 3 Ki-labs(knowledge innovation laboratories) イン・メモリー コンピューティング スパイキング ニューラルネット

    ニューロモフィック コンピューティング リザバー コンピューティング 非ノイマン型 コンピューティング バイナリ ネットワーク ニューラル 状態空間モデル 共同研究 千葉工業大学 数理工学研究センター
  4. 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な構造
  5. こいつ... 速いぞ... 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並列積和やってみた
  6. 大矢敏 あっという間に部隊発足 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
  7. 面倒事はRISC-V から命令コードを流し込む形でソフトに丸投げ • プログラマが頭の中で考えるべきこと • シストリックアレイと後計算で30段を超えるパイプラインでの衝突回避 • 演算器とSDRAMロードストアの6ポートのバンク衝突回避 • 完了割り込みとコマンドキューの残量管理

    • 演算オーバーフローしないように適切にスケール管理 • CNN演算のIM2COLアドレッシング生成 • 画像境界でのボーダー処理/ユニットを跨いだ糊代処理 • ローカルストアに載りきれないパラメータのスピルアウト • などなど... 15 ごめん、北本さん、ちょっと人間やめてもらっていいですか? ホモ・サピエンスには 難しすぎる ホモ・デウスへの進化が必要 注:どっかで聞いたような話ですが、あんまりツッコまないでくださいw これだからハード屋は....
  8. 昔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
  9. 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++から使いたい
  10. クロックモジュール クロックモジュール [内部解説] C++モデルもフェーズを分けて処理 20 時刻を進める 事前の信号を取得 イベント信号設定 [Verilator] eval()

    信号変化を受けた処理 イベントキュー 先頭から取り出す 変化チェック 波形ダンプ クロックモジュール (C++) リセットモジュール (C++) AXI-バスマスタ (C++) PrefetchProc() EventProc() EvalProc() CheckProc() まだやることがある もう変化する信号は無い PrefetchProc() EventProc() EvalProc() CheckProc() PrefetchProc() EventProc() EvalProc() CheckProc() イベントキュー (優先度キュー) 次の自発イベントを 登録 Rustコード
  11. Verilator + Rust シミュレータの利点 • メリット • ソフトウェアシミュレータよりRTLとの等価性が高い • RISC-V実機用と同一のRustコードがx86上で実行できる

    • ⇒ なので、Rust 上でブレークポイント張りながら実行できる (なんなら Jupyter でも Rust 動く) • 波形ファイルが出力できる(バグをRTL設計者と一緒に追える) • SVAなどでバンク衝突や違反コードの実行を見張れる • 一度C++にするのでまあまあ速い • 期待値実験用に Python バインディングも作ってたり • デメリット • コンパイルが長い (最初の一度だけだが) • ソフトウェアシミュレータよりは遅いと思われる ⇒ なので gRPCで実機併用する 22
  12. 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 大矢氏オススメ
  13. AIもネコ人並みに活用 • リバースエンジニアリング的にドキュメント作らせるのは賢い • レジスタ仕様書 • API仕様書 • README.md •

    バグは案外よく見つけてくれる • コードレビューのお供にはオススメ • RTL以外の周辺のコード生成は世間並の水準(それはそう) • テストコードの生成/gRPC とか Pythonバインディングとか BeastModeが無双 • ROM用のHEXファイル弄らせるとか、パラメータ変換とかツール類 • Linuxのブートシーケンスを解析してレポートさせる • RTLのVibe Coding は場合によるが、まだ苦戦中 • ベンダー固有のテクノロジを考慮した高速な回路とか考えるのはまだ苦手 • 三段論法/四段論法必要な複雑な状態遷移と影響は難しそう • 高クロックで動かしたいなら丸投げはやめておいた方がいい • Efinixのアーキでの論理の深さを想像しながらのコードまでは書いてくれない模様 24 AI + WaveDrom で自動生成したレジスタ仕様書 ki-labs の AI エバンジェリスト 大矢敏氏監修のもとAI活用推進中 AI作ってるのに 人並みじゃダメでしょ