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
人類には難しいZynqで組み込みRust
Search
kadu-v
April 26, 2022
Programming
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
人類には難しいZynqで組み込みRust
kadu-v
April 26, 2022
Other Decks in Programming
See All in Programming
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
460
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
130
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
270
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.7k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.9k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
1.1k
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
330
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
160
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
160
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
620
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Facilitating Awesome Meetings
lara
57
7k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Raft: Consensus for Rubyists
vanstee
141
7.6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
BBQ
matthewcrist
89
10k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Making the Leap to Tech Lead
cromwellryan
135
9.9k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
Transcript
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 人類には難しいZynqで組込みRust 株式会社ネフロック(@nefrock_inc )
@kadu-v ✖
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 自己紹介 • 名前:
池守和槻 (GitHub: kadu-v) • 所属: 東京工業大学 情報理工学院 数理・計算科学系 増原研究室 修士二年 • 研究: 型システムについて研究 ⇒組み込み開発は素人 • 2021/09~ネフロックでインターン
Copyright © 2022 Nefrock.Inc. All Rights Reserved. • リアルタイム音声合成AIチップの 開発(NEDO採択事業)
• WAVのAIによるリアルタイム演算 • AIの重みをボード起動時になるべ く早くFPGAに受け渡したい 背景 自社開発 K26子ボード Cortex-R5上のベアメタルプログラム から重みを受け渡す (Cortex-A9Cortex-A53はLinuxの動作 に用いる)
Copyright © 2022 Nefrock.Inc. All Rights Reserved. Cortex-R5ベアメタルアプリケーションの概要 Cortex-R5 DMA
Controller SD FPGA DDR Memory ①重みとバイアス の読み込み ②重みとバイアス の書き込み ③コントローラへ のDMAの発行 ④PLへ重みとバイアス をDMA Processing System Programmable Logic
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 従来のC/C++による組み込み開発 • 以下の課題がある
☹ ポインタ操作によるバグ ☹ マクロの安全性不足 ☹ モダンな言語機能の不足による開発効率の低下 ☹ エコシステムの不足 安全で効率的な開発のためには相当な経験が必要 FPGAとCPUが一体化しているZynqではなおさら…
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 安全かつ効率的な組み込み開発 Rustの言語機能で実現可能ではないか? •
Rustの機能 • 強力な型システムによるメモリ安全 • 明示的なunsafe ➢ 型シグネチャに現れない危険性を明示化 • モダンな言語機能 (ADT, ジェネリクス…) • エコシステムの充実 (rustup, cargo, …) 安全性 効率性 ⟹ RustでCortex-R5アプリケーションを実装
Copyright © 2022 Nefrock.Inc. All Rights Reserved. Rust開発の方針毎のメリット・デメリット • Pure
Rustなので,Rustの型シス テムの恩恵をフルで受ける フルスクラッチで実装 FFIでドライバを再利用 • Xilinxが提供する確かなドライバ • 既存のXilinxの資産を流用できる ので,開発コストが低い • Xilinxの仕様書を理解して,作成 するのはコストが非常に高い • 各アーキテクチャ向けのビルド プロセスを完全に理解する必要 がある • FFIはunsafeコードなので,安全 性をプログラマが保証する必要 がある メリット メリット デメリット デメリット
Copyright © 2022 Nefrock.Inc. All Rights Reserved. Rust開発の方針毎のメリット・デメリット • Pure
Rustなので,Rustの型シス テムの恩恵をフルで受ける フルスクラッチで実装 FFIでドライバを再利用 • Xilinxが提供する確かなドライバ • 既存のXilinxの資産を流用できる ので,開発コストが低い • Xilinxの仕様書を理解して,作成 するのはコストが非常に高い • 各アーキテクチャ向けのビルド プロセスを完全に理解する必要 がある • FFIはunsafeコードなので,安全 性をプログラマが保証する必要 がある メリット メリット デメリット デメリット 今回はこちらの 方針で実装 x
Copyright © 2022 Nefrock.Inc. All Rights Reserved. C/C++コードのRustバインドの作成 C header
file Raw Rust bindings Safe Rust bindings bindgen によるRust バインドの自動生成 ➢ FFIで呼ばれる関数の安全性はRustの型システムでは保 証できない 安全なシグネチャの関数で生のバインドをラップする ➢ 安全性をコンパイラが担保してくれる
Copyright © 2022 Nefrock.Inc. All Rights Reserved. AXI DMAバインドの作成例 C
header file Raw Rust bindings Safe Rust bindings XAxiDma_Config *XAxiDma_LookupConfig(u32 DeviceId); • DMAコントローラの設定を読み込む関数
Copyright © 2022 Nefrock.Inc. All Rights Reserved. AXI DMAバインドの作成例 C
header file Raw Rust bindings Safe Rust bindings XAxiDma_Config *XAxiDma_LookupConfig(u32 DeviceId); • 生ポインタが使われている ⟹そのままユーザに公開するのは危険 extern "C" { pub fn XAxiDma_LookupConfig( DeviceId: u32_, ) -> *mut XAxiDma_Config; }
Copyright © 2022 Nefrock.Inc. All Rights Reserved. AXI DMAバインドの作成例 C
header file Raw Rust bindings Safe Rust bindings pub fn lookup_config(id: u32) -> Result<Self, DmaError> { let ptr = unsafe { esys::XAxiDma_LookupConfig(id) }; if ptr.is_null() { Err(DmaError::ConfigInit) } else { Ok(Self { config: ptr }) } } extern "C" { pub fn XAxiDma_LookupConfig( DeviceId: u32_, ) -> *mut XAxiDma_Config; } XAxiDma_Config *XAxiDma_LookupConfig(u32 DeviceId); • nullチェック • 返り値を列挙型に変更 ⟹ 安全かつエラーハンドリングを容易にする
Copyright © 2022 Nefrock.Inc. All Rights Reserved. embeddedsw-rsクレート • Xilinxのベアメタルアプリケーション用のドライバ群
embeddedswのRustバインドクレート(ライブラリ) • Rustの型システムにより,C/C++よりも安全性が高い • C/C++,Rustコードをcargoを使用して一括でビルド可能 • 実装済みのモジュール ➢ xil_printf.rs, xscugic.rs, xaxidma.rs, ff.rs, xalloc.rs GitHubに公開しています 詳しくはまとめで!!
Copyright © 2022 Nefrock.Inc. All Rights Reserved. ビルドの全体像 バイナリ Rust
コード Xilinx ドライバ 静的ライブラリ リンカ rustc Rust バインド C/C++ヘッダファイル xsct (Xilinx Software Command-Line tool) XSA ファイル bindgen アプリケーション embeddedsw-rs
Copyright © 2022 Nefrock.Inc. All Rights Reserved. Demo:Hello Rust World
UARTでHello fpgaxを出力するプログラムを作成してみます.
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 開発苦労話 (1) ➢
当初はZynqで組み込みRustができるのかわからず,手探り状態が続い た.(私が組み込み開発の素人だったのも大きな要因) ➢ フィンランドのタンペレ大学の博士研究員の方がPYNQでの事例をブロ グに挙げているが,詳細は書かれていない. ➢ 日本語だと@ryuz88(https://github.com/ryuz)さんがRustでのRTOSな どを公開している. Zynqで組み込みRustをしている人の情報がほとんどない
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 開発苦労話 (2) C/C++の関数形式マクロはRustバインドでは自動生成されない
➢ C/C++の関数形式のマクロを用いてドライバが提供されている • Rustの関数として,自分で再実装する必要があった
Copyright © 2022 Nefrock.Inc. All Rights Reserved. 今後の課題 • ライブラリの拡充
• xil_printf.rs, xaxidma.rs, xcugic.rs, xalloc.rsのみ実装済 • ビルド時間の短縮 • 毎回のビルドでxsctを用いて,C/C++のソースコード 全体を再ビルドしてしまう • Cortex-A53ベアメタルアプリケーションへの対応 • featureフラグを使用して,Cortex-R5とCortex-A53の 切り替えを可能に
Copyright © 2022 Nefrock.Inc. All Rights Reserved. まとめ • 安全かつ効率的な組み込み開発に向けて,
➢ Zynqでの組み込みRustが可能なことを実証 ➢ C/C++にくらべてより安全なライブラリ embeddedsw-rsを作成 ➢ cargoでの開発環境の構築
Copyright © 2022 Nefrock.Inc. All Rights Reserved. まとめ • 安全かつ効率的な組み込み開発に向けて,
➢ Zynqでの組み込みRustが可能なことを実証 ➢ C/C++にくらべてより安全なライブラリ embeddedsw-rsを作成 ➢ cargoでの開発環境の構築 embeddedsw-rsはGitHubで公開しています PR待ってます!! ☆もお願いします!! https://github.com/nefrock/embeddedsw-rs