ZephyrとKV260からDPUを接続・監視してみる

本サイトはアフィリエイト広告を利用しています。
Zephyr

KV260のFPGA上のDPUステータスを確認してみました。

DPU…(Deep Learning Processor Unit)

リアルタイムOS「Zephyr」(Cortex-R5)側から接続・監視するシステムを構築したメモです。

 

スポンサーリンク

ZephyrとKV260からDPUを接続・監視してみる

KV260のFPGA上のDPUステータスを確認してみました。

DPU…(Deep Learning Processor Unit)

 

リアルタイムOS「Zephyr」(Cortex-R5)側から接続・監視するシステムを構築します。

 

デモ動画は下記となっています。

 

詳細は下記hackster.ioの記事でも書いています。

AI Safety Monitor with FPGA + Zephyr RTOS
Monitoring AI Inference (DPU) on AMD Kria KV260 with Zephyr RTOS for Functional Safety. By misoji engineer.

 

KV260でZephyrのメモリアクセス

下記でKV260でのZephyr(RTOS)を使ったメモリアクセスの手法を紹介しています。

この準備が前提の記事となっています。

ZephyrのR5コアからFPGA(PL)のメモリ・GPIO制御してみた

ZephyrのR5コアからFPGA(PL)のメモリ・GPIO制御してみた
KV260上で動作するリアルタイムOS「Zephyr」から、PMODインターフェースのGPIOを制御するテストを実施しました。Vivadoでのハードウェア作成から、デバイスツリーのコンパイル、そしてxmutilを使用したアプリケーションのロ...

 

VivadoでのDPUの準備

DPU(Deep Learning Processor Unit)を実装するため、Zynq UltraScale+ MPSoC(ZynqMP)を構成し、必要なクロックおよびリセットブロックを設定します。

詳細な手順は下記記事で紹介しています。

Implementation DPU, GPIO, and PWM for KR260
This project is part of a subproject for the AMD Pervasive AI Developer Contest. We Implemented DPU, GPIO, and PWM for K...

DPUをビルドした後は、Vivado上で追加のGPIOを配置し、Address Editorを用いてDPUおよびGPIOのアドレスが正しくマッピングされているか確認・検証しておきます。

VitisでのDPUモデルの準備

Vitis Classic Modeを使って、特定のDPUアーキテクチャに合わせた環境構築とモデルのコンパイルを行います。

モデル構築の詳細は下記記事を参照ください。
https://www.hackster.io/iotengineer22/implementation-dpu-gpio-and-pwm-for-kr260-f7637b#toc-integrating-dpu-in-vitis-5

ZephyrのDPUモニター設定

Zephyr側でDPUの監視を行うための設定を行います。

プロジェクト内にデバイスツリー・オーバーレイ(.overlay)ファイルを作成し、DPUとAXI GPIOをマッピングします。詳細は下記をご確認ください。

https://github.com/iotengineer22/zephyr-kv260/blob/main/src/zephyr/kv260_r5_dpu/boards/kv260_r5.overlay

 

 

続いて、メインプログラム(main.c)を実装します。

このプログラムは、Address Editorでの設定を基に各IPのベースアドレス(DPU、Softmax、割り込みコントローラ)を定義し、レジスタの特定のビット(Idleビットなど)を直接読み出して状態を監視、それに応じてLEDを制御(点滅または点灯)する仕組みです。

詳細は下記を参考ください。

zephyr-kv260/src/zephyr/kv260_r5_dpu/src at main · iotengineer22/zephyr-kv260
This repository present solution for the Best of 2025 Competition(FPGA Project) - iotengineer22/zephyr-kv260

コードの準備ができたら、Zephyrの開発環境(west)を用いて、kv260_r5ボード向けにビルドを実行します。

ビルドが正常に完了すると、ビルドディレクトリ内に zephyr.elf ファイルが生成されます。

PL(FPGA)へのデプロイ

生成したPL(FPGA)用のアーティファクトファイル(pl.dtboshell.jsondesign_1_wrapper.bit.bin)と、Zephyrのバイナリ(zephyr.elf)をKV260へ転送し配置します。

 

次に、Kriaのユーティリティである xmutil を使用して、新しく作成したDPU用のデザインをFPGA(PL領域)にロードします。

 

PLのロードが完了したら、Linuxの remoteproc フレームワークを利用して、R5コアにファームウェア(zephyr_dpu.elf)をロードして起動させます。

 

ZephyrからのDPU監視と動作確認

ファームウェアが正常に起動すると、KV260のMicroUSB経由で接続したシリアルコンソール上に、ZephyrのブートログおよびDPU、SFM(Softmax)、INTC(割り込み)の監視ログがリアルタイムに表示されるようになります。

コンソールに出力される実際のログ内容は以下の通りです。

 

DPUモニターのデモ動画

実装したDPU監視システムが、Linux上のAI推論の状態をCortex-R5(Zephyr RTOS)から正しく可視化・監視できている様子を実際のデモ動画で紹介します。

 

まとめ

KV260のFPGA上のDPUステータスを確認してみました。

DPU…(Deep Learning Processor Unit)

リアルタイムOS「Zephyr」(Cortex-R5)側から接続・監視するシステムを構築したメモを紹介しました。

コメント