失敗しない!Versal™ リモートアップデート完全解説

皆さま、こんにちは!
以前 Zynq™ UltraScale+™ MPSoC でのリモートアップデートについてご紹介しましたが、今回は、Versal™ で同じようにリモートアップデートの実機確認を行いました。
本ブログでは、Versal™ をこれから触る方、Zynq™ UltraScale+™ MPSoC の経験がある方を対象に、Versal™ のリモートアップデートの概要を解説します。
以下のような状況をイメージしてみてください。

「遠隔地で運用している Versal™ で不具合が発生」
「ブートデバイスに格納したブートイメージを書き換えれば解決できそう」
「早急に修正したいが、すぐにたどり着けるような場所ではない」
そのような状況に対処することができるのが、リモートアップデートです。
リモートアップデートを行う上で必要となる機能や知識の概要は以下の通りです。
- (1)イメージ転送用の外部インターフェイスの考え方
- (2)イメージを書き込むためのコントローラと制御
- (3)フェイルセーフの考え
今回のブログでは、全体像の説明から、(1)、(2) をどのように実現しているかをご理解いただけるかと思います。
また、説明している一例は、VCK190 評価ボード上で実機確認をしているため、評価ボードをお持ちの方はすぐにお試しいただけます。
詳細な内容を記載した資料は、ブログ最後に記載のリンクからダウンロード可能です。
資料では、(1)、(2) の詳細と実機確認の内容をご確認いただけます。
それでは参りましょう!
1. 用語解説
本ブログで登場する単語について解説します。
- リモートアップデート
- ブートデバイスに格納したブートイメージの全体、または一部を遠隔から書き換える仕組みを指します。運用中の FPGA に使用するブートイメージを現場に行かず、遠隔から書き換えるといった場合に本機能の使用が想定されます。
- TFTP(Trivial File Transfer Protocol)
- IP ネットワーク上でファイル転送を行うためのプロトコルです。
シンプルなプロトコルで機能が限定されているため、動作が軽く、データを非常に高速に転送可能です。一方で、ユーザー認証機能や高度なエラーチェック機能がありません。本ブログでは、手軽さを重視し TFTP を使用していますが、実製品ではセキュリティを考慮したプロトコル選定が必要です。 - U-Boot
- オープンソースで開発されているブートローダーで、特に組込み機器によく使用されています。U-Boot はブートローダーのため、基本的に OS を起動するのが仕事です。しかし、OS の起動以外にも保守モードに切り替えることによって、プロンプトを起動することが可能です。今回は、このプロンプトから U-Boot のコマンドを実行してリモートアップデートを行っていきます。
2. 今回確認しているリモートアップデート構成の説明
以下の図1が実機確認をしている全体構成のイメージです。
Ethernet 経由でホスト PCから書き換え用のブートイメージを取得します。取得したブートイメージは、一時的にDDRメモリにデータが保存され、U-Bootを使用してブートデバイスのQSPI Flashに書き込みを行います。
今回の例ではこのような仕組みでブートイメージのアップデートを行います。

本構成では、Ethernet 経由で取得したブートイメージを一度 DDR メモリに展開し、その後 U-Boot を用いて QSPI Flash へ書き込みを行います。
以下に、リモートアップデート時に必要となる主な要素を示します。
| 外部インターフェイス | Ethernet |
|---|---|
| Ethernet制御(TFTP)とイメージ書き込み制御 | U-Boot |
これらはあくまで1つの手段のため、同じような内容を別の方法で実現することも可能です。
書き込み失敗時に備えたフェイルセーフ機構として、フォールバック機能も用意されています。本ブログでは扱いませんが、運用を前提とした設計では、非常に重要な要素となるため、今後別のブログで解説予定です。
最低限リモートアップデートをするための少し詳細な手順は以下の通りです。
- (1)ホスト PC で TFTP サーバーを構築、ブートイメージを格納
- (2)U-Boot 上からTFTP サーバー上のブートイメージを指定
- (3)指定したブートイメージを受信
- (4)U-Boot 上から受信したブートイメージを DDR にロード
- (5)U-Boot 上からDDR にロードされたブートイメージを QSPI Flashに書き込み
3. 資料の実行環境
本ブログの内容は、以下の環境で実機確認を行っております。
| ホスト PC | CPU : AMD Ryzen™ 9 7950X |
|---|---|
| OS :Ubuntu 22.04 LTS | |
| 評価ボード | VCK190 |
| AMD Tools | Vivado™ 2025.1 |
| Vitis™ 2025.1 | |
| Yocto Manifests | rel-v2025.1 |
4. 資料ダウンロード
本ブログでご紹介した内容の詳細な手順やその他のリモートアップデート方法について確認されたい場合は、以下より資料をダウンロード可能です。
資料には以下の内容が含まれています。
- リモートアップデートの基礎知識
UART・TFTP・Kermitの用語解説とリモートアップデートの仕組み・利点を解説 - 実機確認手順
Yocto ProjectでU-Bootをビルドし、Vitis™でHello Worldアプリを2種類作成する - ブートイメージ全体のリモートアップデート
BOOT.BIN作成→QSPIへ初期書き込み→U-Bootでイメージ転送・全体上書きまでの手順 - ブートイメージ一部のリモートアップデート
reserve領域を確保したBOOT.BINを使い、アプリケーションのみを差し替える手順 - 複数のアップデート方法
Ethernet(TFTP+tftpboot)とUART(Kermit+loadb)の2通りの転送・書き込み手順 - 実機での動作確認結果
VCK190評価ボードで全体・一部アップデートをEthernet/UARTの両経由で検証し成功を確認
ブログでは概要のみ紹介しましたが、資料では実際に手を動かして試していただけるレベルの詳細な手順を記載しています。
5. まとめ
いかがでしたでしょうか。
今回は Versal™ におけるリモートアップデートの概要と、実機での確認例を紹介しました。
リモートアップデートの注意点として、製品化したブートイメージを運用中に書き換える場合、データの書き込み失敗や誤ったデータの書き込みなどを想定する必要があります。そのためにフォールバックという機能が用意されていますが、これについては別途ブログに掲載予定です。
最後までご覧いただき、ありがとうございました!




