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

Zenoh on Zephyr on LiteX

Zenoh on Zephyr on LiteX

Zephyr Project Meetup: Sapporo, Japan 2026
2026/06/26(金)
https://zephyr-rtos.connpass.com/event/386410/

Avatar for takasehideki

takasehideki

June 26, 2026

More Decks by takasehideki

Other Decks in Technology

Transcript

  1. 4 不揮発メモリ積層LSI/FPGAによる 短時間リカバリ可能なロボットIoTシステム基盤技術 • 次世代不揮発性メモリを活用した3次元積層LSIによる 迅速かつ安全な電源断リカバリシステムの創出 −不揮発メモリ積層LSIのチップ試作 −蓄電素子(ミニUPS)積層による電源信頼性向上 −不揮発FPGAアーキテクチャ設計試作 −短時間リカバリ可能なシステムソフトウェア技術

    • 科研費基盤(B) 25K03095 −熊大・東大・高知工科大・広大 −2025-04-01 – 2028-03-31 電源復旧 データ復元 電源断信号 バックアップ電源 :猶予時間 :データ退避 不揮発メモリ (MRAM) FPGA ロジック 電源供給 キャパシタ マイクロ プロセッサ 多階層の協調最適化によって 高信頼なロボットIoTシステムを実現 TSV積層による 超多並列通信・ 超広帯域接続
  2. 6 https://github.com/enjoy-digital/litex • Build your hardware, easily! −FPGA上にSoCを構築するためのオープンソースのフレームワーク −RISC-V等のCPUコアと周辺IPを容易に統合可能 −FPGA上での迅速なプロトタイピングに最適

    → 3次元積層LSIエミュレータの基盤構築に活用 https://docs.zephyrproject.org/latest/boards/ enjoydigital/litex_vexriscv/doc/index.html モチのロンで Zephyr 対応!
  3. 7 • 環境構築 https://github.com/enjoy-digital/litex python3 -m venv litex_venv source litex_venv/bin/activate

    mkdir -p litex_setup && cd litex_setup wget https://raw.githubusercontent.com/enjoy- digital/litex/master/litex_setup.py chmod +x litex_setup.py python3 litex_setup.py --init --install pip install meson sudo apt install gcc-riscv64-unknown-elf お手軽にスクリプト インストール SoC イメージ生成に必要 Verilator も試したければ追加 Official Guidance: https://github.com/enjoy-digital/litex/wiki/Installation 詳細手順 venv で仮想環境整備 (Zephyr とは別環境で)
  4. 8 • SoC イメージ生成 https://github.com/enjoy-digital/litex source /tools/Xilinx/2025.1/Vivado/settings64.sh mkdir -p fpga_image/arty_a7_100

    cd fpga_image/arty_a7_100 mkdir -p build python3 -m litex_boards.targets.digilent_arty \ --toolchain vivado \ --variant a7-100 \ --cpu-type vexriscv \ --timer-uptime \ --with-ethernet \ --csr-json build/csr.json \ --output-dir build \ --build Viva道 に入信:D (F4PGA でもアリ) Arty A7-100T を ターゲットに使用 Zenoh 通信を 見越して追加 詳細手順
  5. 9 • FPGA へのイメージ書き込み (揮発性) • configuration flash への書き込み (不揮発化)

    https://github.com/enjoy-digital/litex python3 -m litex_boards.targets.digilent_arty \ --variant a7-100 \ --output-dir build \ --load sudo apt install openfpgaloader openFPGALoader -b arty_a7_100t -f \ fpga_image/arty_a7_100/build/gateware/digilent_arty.bit OpenOCD と udev rule は必要 詳細手順
  6. 11 • 組込み向けの軽量オープンソースRTOS −マルチスレッドやデバイス管理を標準サポート −ドライバ経由でハードウェアを抽象化 −Linux Foundation hosted!! • 今回の推しポイント

    −LiteX SoC / RISC-V との親和性がよき ✓ litex_json2dts_zephyr.py: csr.json -> overlay.{dts,config} ✓ シュッとやるなら zephyr-on-litex-vexriscv もある −コミュニティがアツいっ https://www.zephyrproject.org/ https://speakerdeck.com/iotengineer22/zephyr- rtos-dearmtorisc-vnokoajian-tong-xin-wositemita
  7. 12 • 環境構築 python3 -m venv zephyr_venv source zephyr_venv/bin/activate pip

    install west west init -l manifest west update zephyr west zephyr-export west packages pip --install mkdir -p toolchains cd zephyr west sdk install \ --install-dir ../toolchains/zephyr-sdk \ --gnu-toolchains riscv64-zephyr-elf venv で仮想環境整備 (LiteX とは別環境で) Zephyr 本体 だけで,,, riscv64-zephyr-elf だけで,,, Official Guidance: https://docs.zephyrproject.org/latest/develop/getting_started/index.html 詳細手順 https://www.zephyrproject.org/
  8. 13 • Overlay の作成 cd litex_ws/fpga_image/arty_a7_100/ python3 litex_ws/litex_setup/litex/litex/tools/litex_json2dts_zephyr.py \ --dts

    build/overlay.dts \ --config build/overlay.config \ build/csr.json LiteX で生成された SoC のペリフェラル情報を Zephyr 向け Overlay に変換 詳細手順 https://www.zephyrproject.org/
  9. 14 • Hello, World!! のビルド • 動作確認 (on LiteX terminal)

    https://www.zephyrproject.org/ cd zephyr_ws west build -p always \ -b litex_vexriscv \ zephyr/samples/hello_world \ -d build/hello_litex \ -- \ -DDTC_OVERLAY_FILE=<litex_ws_path>/fpga_image/arty_a7_100/build/overlay.dts 変換された Overlay を利用 詳細手順 litex_term /dev/ttyUSB1 \ --speed 115200 \ --kernel build/hello_litex/zephyr/zephyr.bin
  10. 15 • dhcpv4_client のビルド • 動作確認 (on LiteX terminal) https://www.zephyrproject.org/

    cd zephyr_ws west build -p always \ -b litex_vexriscv \ zephyr/samples/net/dhcpv4_client \ -d build/dhcp_litex \ -- \ -DDTC_OVERLAY_FILE=<litex_ws_path>/fpga_image/arty_a7_100/build/overlay.dts 詳細手順 litex_term /dev/ttyUSB1 \ --speed 115200 \ --kernel build/dhcp_litex/zephyr/zephyr.bin Ethernet での疎通を シュッと確認してみる,,,
  11. Peer to Peer Clique Mesh Brokered Routed Peer Peer Peer

    Peer Peer Peer Peer Peer Peer client client Router Router Router client client client client client client Router Router • 軽量かつ柔軟な通信ミドルウェア基盤 −Zero network overhead protocol −ネットワーク内ではDDSライク,ネットワーク間ではMQTTライク −広域分散IoTシステムに適したルータ機能 (zenohd) • 4つのポイント ① とにかくかるい! ② なんでもつかえる! ③ いろいろつながる! ④ よしなにしゃべれる! 17 https://zenoh.io/blog/2023-03-21-zenoh-vs-mqtt-kafka-dds/ • Pub / Sub (Push) - basic pub/sub method • Pub / Sub (Pull) - Sub receives in its own timing • Pub / Store / Get - KVS based computation • Get / Reply - RPC-like communication node node node node node node node node Pub Sub(callback) Sub(Pull) Pub Pub Get Reply Pull https://zenoh.io/
  12. 19 • zenoh-pico モジュールの追加 cd zephyr_ws west update zenoh-pico 詳細手順

    https://zenoh.io/ submanifests で追加 不具合っぽい?? 挙動があったので,,, (TODO: 要詳細調査)
  13. export ZENOH_LOCATOR="tcp/192.168.11.105:7447" west build -p always \ -b litex_vexriscv \

    app/zenoh_pubsub \ -d zephyr_ws/build/zenoh_pubsub \ -- \ -DDTC_OVERLAY_FILE=<litex_ws_path>/fpga_image/arty_a7_100/build/overlay.dts 20 • zenoh-pico アプリのビルド • 実装はこんな感じ,,, (prj.conf が鬼門,多少は Zephyr アプリっぽく?? −https://github.com/takasehideki/zenoh_zephyr_litex/pull/6/changes −https://github.com/takasehideki/zenoh_zephyr_litex/tree/main/zeph yr_ws/app/zenoh_pubsub 詳細手順 https://zenoh.io/ 今回は client 縛り Zenoh ルータを指定
  14. 22 https://zenoh.io/ $ size build/*/zephyr/zephyr.elf text data bss dec hex

    filename 14412 64 8308 22784 5900 build/hello_litex/zephyr/zephyr.elf 245296 1372 39696 286364 45e9c build/dhcp_litex/zephyr/zephyr.elf 455168 4048 241612 700828 ab19c build/zenoh_pubsub/zephyr/zephyr.elf 452016 4048 241468 697532 aa4bc build/zenoh_pub/zephyr/zephyr.elf 444824 4048 241468 690340 a88a4 build/zenoh_sub/zephyr/zephyr.elf prj.conf をもっと 最適化すれば,,,
  15. 24 • Plumbing: 通信モデルとミドルウェア • Tools: 開発促進のためのツール群 • Capabilities: 再利用性の高い車輪

    • Community: 世界規模のOSS体制 ロボットソフトウェアの開発を加速するプラットフォーム https://www.ros.org/blog/ecosystem/ https://www.ros.org/ node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg
  16. 26 の 対応 … … rclcpp rclpy node.cpp node.py RCL

    (ROS Client Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS rclrs node.rs Zenoh DDSと同じようにZenohを 選択できるようになる DDSと同じレイヤに Zenohが追加される (現時点ではDDSノードとの 相互通信は未対応) ユーザアプリ/クライアントライブラリの レベルでは影響なし つまり, こうなる!
  17. 29 つまりこういうおきもち https://github.com/takasehideki/zenoh_zephyr_litex/pull/8 • Zenoh Key <-> ROS 2 Topic

    の対応 −<domain_id>/<fully_qualified_name>/<type_name>/<type_hash> −hash 値は rosidl で計算されるもの(をとりまマクロで決め打ち :D • Zenoh Payload <-> ROS 2 Message の Serialize/Deserialize −それっぽいヘルバ関数群を整備 −とはいえとりま String/chatter, Twist/cmd_vel のみで決め打ち • その他 −liveliness token: entity の模倣による ROS graph への対応 −attachment: Zenoh sample へのメタデータの付与 −zenoh-pico v1.8.0 への雑な patch commit 1193d97 (TODO: contribution )
  18. 30 String だけじゃおもんない:D • teleop_pico: ボードの傾きに応じてロボットを操作 −Pmod ACL2 を追加 Zephyr

    標準な ADXL362 搭載 −加速度値に応じた geometry_msgs/msg/Twist を turtle1/cmd_vel に Publish! • やったこと −LiteX で Pmod と SPI master の有効化 (patch作成) −SoC イメージと Zephyr Overlay の再生成 −pmod_acl2/adxl362 向け DTS の追加 −デバドラ的な実装 (deadzone と速度クランプを 適用して Twist に変換)