1. 株式会社PALTEK
  2. TECHブログ
  3. 技術情報
  4. Zynq™ UltraScale+™ MPSoC リモートアップデートについて

TECHブログ

Zynq™ UltraScale+™ MPSoC リモートアップデートについて

Zynq™ UltraScale+™ MPSoC リモートアップデートについて

みなさま、こんにちは。
以下のような状況をイメージしてみてください。

困っている人の画像

「遠隔地で運用しているFPGAで不具合が発生している」
「ブートデバイスに格納したブートイメージを書き換えれば解決できそう」
「早急に修正したいが、すぐには到達できない場所にある」

本ブログでは、そのような状況に対処可能なリモートアップデートの概要を解説します。
以下は、リモートアップデートを行う上で必要になりそうな機能や知識の概要です。

  1. イメージ転送用の外部インタフェースの考え
  2. イメージを書き込む為のコントローラと制御
  3. フェイルセーフの考え

今回のブログでは全体像の説明から上記1, 2をどのように実現しているかをご理解いただけるかと思います。
また、AMD社のZCU104評価ボード上で実機確認をしているため、評価ボードをお持ちの方はすぐにお試しいただけます。

詳細な内容を記載した資料は、ブログ最後に記載のリンクからダウンロード可能です。
資料では、1, 2の詳細と実機確認の内容をご確認いただけます。

それでは参りましょう!

1. 用語解説

本ブログで登場する単語について解説します。

リモートアップデート
ブートデバイスに格納したブートイメージの、全体または一部を遠隔から書き換える機能です。運用中のFPGAに使用するブートイメージを、現場に行くことなく遠隔から書き換える際に使用されます。
TFTP(Trivial File Transfer Protocol)
IPネットワーク上でファイル転送を行うためのプロトコルです。
シンプルなプロトコルで機能が限定されているため、動作が軽くデータを高速に転送できます。一方で、認証機能やエラーチェック機能がないため、セキュリティ面での制約やデータ転送中の問題発生時にファイル破損の可能性があります。
U-Boot
オープンソースで開発されているブートローダーで、特に組込み機器によく使用されています。U-Bootはブートローダーのため、基本的にはOSを起動する役割を担います。しかし、OS起動以外にも保守モードに切り替えることで、コマンドプロンプトを起動することが可能です。今回は、このプロンプトからU-Bootのコマンドを実行してリモートアップデートを行います。

2. 今回確認しているリモートアップデート構成の説明

図1が実機確認している全体構成のイメージです。Ethernet経由でHOST PCから書き換え用のブートイメージを取得します。取得したブートイメージは、一時的にDDRメモリにデータが保存され、U-bootを使用してブートデバイスのQSPI Flashに書き込みを行います。

今回の例ではこのような仕組みでブートイメージのアップデートを行います。

以下、リモートアップデート時に必要な要素です。

外部インタフェース Ethernet
Ethernet制御(TFTP)とイメージ書き込み制御 U-Boot

これらはあくまで1つの手段のため、同じような内容を別の方法で実現することも可能です。
仮に書き込みを失敗した場合のフェイルセーフとして、フォールバック機能もありますが、これは今後のブログで説明を予定しています。

リモートアップデートの詳細手順

最低限のリモートアップデートを行うための、やや詳細な手順は以下の通りです。

  1. HOST PCでTFTPサーバーを構築し、ブートイメージを格納
  2. U-Boot上からTFTPサーバー上のブートイメージを指定
  3. 指定したブートイメージを受信
  4. U-Boot上から受信したブートイメージをDDRにロード
  5. U-Boot上からDDRにロードされたブートイメージをQSPIに書き込み

3. 資料の実行環境

本ブログの内容は、以下の環境で実機確認を行っています。

表1. 実行環境
Host PC CPU : AMD Ryzen™ 9 7950X
OS : Ubuntu 22.04 LTS
評価ボード ZCU104
AMD Tools Vivado™ 2023.1
Vitis™ 2023.1
PetaLinux 2023.1

4. 資料ダウンロード

本ブログで紹介した内容の詳細な手順や、その他のリモートアップデート方法について確認されたい場合は、以下より資料をダウンロード可能です。

資料には以下の内容が含まれています。

  • リモートアップデートの基礎知識
    注意事項や用語解説(UART、TFTP、Kermitなど)
  • 環境構築手順
    PetaLinuxプロジェクト作成からVitisプロジェクト作成まで
  • ブートイメージ全体のリモートアップデート
    作成から書き込みまでの詳細手順
  • ブートイメージ一部のリモートアップデート
    アプリケーション単位での更新方法
  • 複数のアップデート方法
    Ethernet経由(TFTP)とUART経由(Kermit)の両方
  • 実機での動作確認結果
    ZCU104評価ボードでの検証内容

ブログでは概要のみ紹介しましたが、資料では実際に手を動かして試していただけるレベルの詳細な手順を記載しています。

  資料をダウンロードする

5. まとめ

いかがでしたでしょうか。
今回はリモートアップデートの概要について紹介しました。

リモートアップデートを実装する際の注意点として、運用中のブートイメージを書き換える場合には、書き込み失敗や誤ったデータの書き込みなどのリスクを考慮する必要があります。そのためにフォールバックという機能が用意されていますが、これについては別の機会に紹介させていただければと思います。

最後まで閲覧いただき、ありがとうございました。

関連ブログ