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
Cyclone V SoC の Ether MAC をベアメタルアプリから使ってみた話 / U...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
homelith
November 09, 2019
Programming
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Cyclone V SoC の Ether MAC をベアメタルアプリから使ってみた話 / Using EMAC peripherals on HPS bare metal apps for Cyclone V SoC
homelith
November 09, 2019
Other Decks in Programming
See All in Programming
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.4k
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
980
これからAgentCoreを触る方へトレンドはGatewayです
har1101
2
290
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
640
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7.1k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
8.5k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
280
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
120
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
140
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
210
Featured
See All Featured
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
580
Everyday Curiosity
cassininazir
0
240
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Music & Morning Musume
bryan
47
7.2k
The Cult of Friendly URLs
andyhume
79
6.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
400
My Coaching Mixtape
mlcsv
0
160
Transcript
Cyclone V SoC の Ether MAC を ベアメタルアプリから使ってみた話 @homelith 2019/11/09
RTLを語る会(16) Using EMAC peripherals on HPS bare metal apps for Cyclone V SoC
本日のお話 ARM コア CPU と FPGA が一緒になった SoC FPGA を触り始めました
ARM コア用に用意されたハードマクロのペリフェラル群 (Ethernet / SDCard / USB ...)を使い倒すために 頑張ろうとした話です
導入 Terasic DE10-Nano ・SoC FPGA 搭載品で 比較的安価&入手性高い ・SD Card にイメージを焼いて
差し込むと Linux 起動とお手軽 FPGA 部のみを使って PID 制御で GPS 同期周波数源 (GPSDO) を作ったりしました “GPSと仲良くなってNTPサーバを作ろう” (第二版出ました) https://chofutech.booth.pm/items/1310612
イーサネットが使いたい RJ45 コネクタがついている Linux を起動すると eth0 として見える 1. FPGA 部から直接アクセスして使えな
いか? 2. ギガビットイーサなので、 なるたけ高速に使いたい!
説明書を見ないでGO! DE10_NANO_SoC_GHRD.v の構造 (CPU 利用時のデザインテンプレート) クロックとか トップモジュール Ethernet RGMII PHY
接 続ピン hps_io (CPU 部の ポート定義) クロックとか トップモジュール Ethernet RGMII PHY 接 続ピン hps_io 自作 ネットワーク処 理 安直に考えた構造
ダメでした クロックとか トップモジュール Ethernet RGMII PHY 接 続ピン hps_io (CPU
部の ポート定義) ここは Cyclone V SoC においては HPS に接続固定 Arria 10 SoC などでは可能と思われる Shared Pin Multiplexer に接続されており、 HPS への接続と FPGA 部への接続を バンク単位で切り替え出来る 参考: Intel Arria 10 Hard Processor System Technical Reference Manual 26章 Hard Processor System I/O Pin Multiplexing
cv_5v4.pdf (Cyclone V Hard Processor System Technical Reference Manual) のブロック図
説明書を読む Ethernet MAC HPS 本体 メイン AXI インターコネクト FPGA 部 とのブリッジ
Connectivity Matrix (8章 System Interconnect) を見る限り、 FPGA to HPS Bridge
から Ether MAC まで のアクセス経路はありそう FPGA -> EMAC 直接 アクセス可能か? ※ FPGA 部とのブリッジは HPS 側 からの開通が必要なので、最低限 開通用のプログラムを書き込む必 要がある
Ethernet MAC peripheral は port 0 : 0xFF700000 port 1
: 0xFF702000 にマッピングされており、 FPGA-to-HPS bridge から見 える模様 (右図 Peripherals and L3 GPV 領域) FPGA -> EMAC 直接 アクセス可能か?
考えられるアプローチ 作業1 MAC の初期化 作業2 EMAC <-> FPGA 間 パケット転送
特徴 性能 Linux のネットワークド ライバに任せる Linux 上のプログラムとして実装 (libpcap 等使用?) 実装が簡便、 起動に少々時間が掛かる (数十秒) ARM ベアメタルアプリ ケーションで実装 ARM ベアメタルアプリとして実装 HWLib 使えば実装も容易 か? FPGA 側から直接 AXI バスを通じて アクセス ↑ 構成からアップグレードで きる FPGA 側から直接アク セスして初期化 FPGA 側から直接 AXI バスを通じて アクセス 参考にできそうなコードが無 く大変かも知れない (多分) 低 高
考えられるアプローチ 作業1 MAC の初期化 作業2 EMAC <-> FPGA 間 パケット転送
特徴 性能 Linux のネットワークド ライバに任せる Linux 上のプログラムとして実装 (libpcap 等使用?) 実装が簡便、 起動に少々時間が掛かる (数十秒) ARM ベアメタルアプリ ケーションで実装 ARM ベアメタルアプリとして実装 HWLib 使えば実装も容易 か? FPGA 側から直接 AXI バスを通じて アクセス ↑ 構成からアップグレードで きる FPGA 側から直接アク セスして初期化 FPGA 側から直接 AXI バスを通じて アクセス 参考にできそうなコードが無 く大変かも知れない (多分) 低 高
Linux を起動して性能にアタリを付ける sftp (暗号化負荷、ディスク書き込み)込みで 80Mbps 程度
もうちょっと欲しい 1ポート上り下り計 80Mbps → 2ポート間の中継では 40Mbps 程度となる可能性あり もう少し高速化したい
考えられるアプローチ 作業1 MAC の初期化 作業2 EMAC <-> FPGA 間 パケット転送
特徴 性能 Linux のネットワークド ライバに任せる Linux 上のプログラムとして実装 (libpcap 等使用?) 実装が簡便、 起動に少々時間が掛かる (数十秒) ARM ベアメタルアプリ ケーションで実装 ARM ベアメタルアプリとして実装 HWLib 使えば実装も容易 か? FPGA 側から直接 AXI バスを通じて アクセス ↑ 構成からアップグレードで きる FPGA 側から直接アク セスして初期化 FPGA 側から直接 AXI バスを通じて アクセス 参考にできそうなコードが無 く大変かも知れない (多分) 低 高
早速スタート マクニカ社の ”SoC FPGA ベアメタル All-in-One アプリケーション・サンプル” ( https://www.macnica.co.jp/business/semiconductor/articles/intel/131910/ )
を動かしてみる ARM DS-5 デバッガ(有償ライセンス)を使用して ・ARM コアへの命令ロード&起動 ・デバッグコンソールの使用 ・ブレークポイントの設定 等を行う方法が解説されているが、 実機の UART シリアルコンソールが開通している DE10-Nano なら、 デバッガ無し& printf デバッグ前提で無償環境のみで開発可能
実機 + printf デバッグで開発していくために SoC はじめてガイド - DS-5 によるベアメタル・アプリケーション・デバッグ (
https://www.macnica.co.jp/business/semiconductor/articles/intel/118693/ ) の 8 章 “ベアメタル・アプリケーションを SD カードからスタンドアローン実行する例 ” を参考に、ベアメタルアプリケーションバイナリを生成し、 FAT パーティションに配置 ブートシーケンスは @ikwzm さん “FPGA+SoC+Linuxのブートシーケンス” ( https://qiita.com/ikwzm/items/c22d15803ed98f0e52ab ) を参考にセットアップ BootROM (ハードコード) u-boot-spl (preloader-mkpimage.bin) 2nd stage プリローダ u-boot 1.FPGA 部を コンフィグレーション 2.自作アプリを起動する 自作アプリの バイナリ
いざイーサネット サンプルを使ってボタン押下 -> LED 点灯等の GPIO ペリフェラルの動作を確認 【大まかな手順】 GPIO ペリフェラルを
qsys 上で接続してアドレスを割り当て、 ARM ベアメタルプログラムから該当ペリフェラルの HWLib ヘッダファイルを ロードして、API を叩けば OK → いざイーサネットの HWLib をロードして・・・
None
イーサネットは未対応 ※本当にこの時点まで気づきませんでした・・
フォーラムにもこんな投稿が・・ Q. HWLib に Ethernet 関連らしき関数が 無いのだけど。 A. なさそう。
Altera さんが整備してくれることに期待。 A. Xilinx 環境にはあるのに!!!!! orz https://forums.intel.com/s/question/0D50P00003yySHOSA2 /altera-emac-hwlib-for-cyclone-v-soc?language=en_US Q. u-boot から移植しようと頑張ってるんだけど 色々詰まっている。 A. cv_5v4.pdf をちゃんと読み込むことだね。 俺はできた。君も頑張れ! https://forums.intel.com/s/question/0D50P00003yyQrYS AU/hps-baremetal-emac-driver?language=en_US その後3年音沙汰無し・・・ (※意訳)
仕方ないので u-boot/drivers/net/designware.c u-boot/drivers/net/dwmac_socfpga.c u-boot/drivers/net/phy/micrel_ksz90x1.c あたりを見ながら、レジスタアクセスを IOWR / IORD 等のプリミティブな関数で 置き換えて、頑張って移植
動いた レイテンシも 1 ミリ秒以下と優秀? ※ FPGA 部で折り返した時の ping パケット
性能測定してみる FPGA 部にループバックのコードを書いて試験 ※ ARP 応答しないと ping 等が送れず面倒なので、i++ 高位合成で ARP
応答コードを作成 RJ45 コネクタ Micrel Ether PHY チップ ARM コア 試験機PC (ostinato) DDR3 メモリ ARPパケット 抽出分離 出力合流器 ARPパケット 応答生成器 IPv4パケットは全て跳ね返す ARP リクエストには応答を返す ARM HPS 部 FPGA 部 ボード上デバイス
測定結果 102 bytes Ping Echo Request パケットで 6kpps / 4.4Mbps
測定結果 1518 bytes までパディングしたパケットで 445pps / 5.3Mbps
遅い・・
原因 EMAC <-> HPS 間 : DMA 有効なので、速い (※ EMAC ペリフェラルに
DMA コントローラが内蔵されている) HPS <-> FPGA 間 : IOWR / IORD レジスタアクセス(32bit)で逐次処理 されているため、遅い → mSGDMA(modular Scatter-Gather DMA)等を FPGA 側に付けて、 FPGA 側に SDRAM とのデータ転送作業を押し付ければ解決
その前に ARM ベアメタルアプリ自体のポテンシャルを見てみることに RJ45 コネクタ Micrel Ether PHY チップ 試験機PC
(ostinato) DDR3 メモリ ARM HPS 部 ARM コア HPS 内で 全パケットを折り返す ボード上デバイス
測定結果(HPS のみ) 102 bytes Ping Echo Request パケットで 82kpps /
69.8Mbps
測定結果(HPS のみ) 1518 bytes までパディングしたパケットで 17kpps / 208Mbps
考察 DMA 有効下で 1 ポート上り下り計 200Mbps 程度 → 2 ポート間の中継の場合、 100
Mbps 程度まで落ちる可能性も → 一旦 SDRAM を経由せずダイレクトに FPGA に転送 できればさらに高速化可能か
考えられるアプローチ 作業1 MAC の初期化 作業2 EMAC <-> FPGA 間 パケット転送
特徴 性能 Linux のネットワークド ライバに任せる Linux 上のプログラムとして実装 (libpcap 等使用?) 実装が簡便、 起動に少々時間が掛かる (数十秒) ARM ベアメタルアプリ ケーションで実装 ARM ベアメタルアプリとして実装 HWLib 使えば実装も容易 か? FPGA 側から直接 AXI バスを通じて アクセス ↑ 構成からアップグレードで きる FPGA 側から直接アク セスして初期化 FPGA 側から直接 AXI バスを通じて アクセス 参考にできそうなコードが無 く大変かも知れない (多分) 低 高
考えられるアプローチ 作業1 MAC の初期化 作業2 EMAC <-> FPGA 間 パケット転送
特徴 性能 Linux のネットワークド ライバに任せる Linux 上のプログラムとして実装 (libpcap 等使用?) 実装が簡便、 起動に少々時間が掛かる (数十秒) ARM ベアメタルアプリ ケーションで実装 ARM ベアメタルアプリとして実装 HWLib 使えば実装も容易 か? FPGA 側から直接 AXI バスを通じて アクセス ↑ 構成からアップグレードで きる FPGA 側から直接アク セスして初期化 FPGA 側から直接 AXI バスを通じて アクセス 参考にできそうなコードが無 く大変かも知れない (多分) 低 高 今後の課題としました (汎用性も低いので・・)
まとめ ・DE10-Nano イーサネットポートに FPGA 部から直接アクセスす るための ARM ベアメタルアプリを作りました ・100Mbps 程度まで出そうですが、まだまだ要改善です
・EMAC アクセス用のライブラリが出来たので、 他にも色々使って遊べそうです