PMUを使いこなして、より安全なシステム設計にチャレンジ!

PMUを使ってMPSoCの温度と電力を監視する

今回は、MPSoCのPMUを活用してみましょう。これまではMPSoCのArm Cortex-A53とArm Cortex-R5を活用してきましたが、今回はもう一つのプロセッサであるであるPMUを活用してみましょう。PMUは、アプリケーションを処理するArm Cortex-A53、Arm Cortex-R5とは独立して動作し、システムの起動、電源の管理、エラー通知などの安全機能を担います。機能安全を実現するシステムにおいては重要なユニットですね。

PMUにはXilinxのFPGAをお使いの方にはお馴染みの「MicroBlaze」が採用されています。MicroBlazeについて詳しく知りたい方はこちらをご覧ください。

MicroBlaze

実際にPMUを試してみよう

それでは早速、PMUファームウェアを動作させてみましょう。

ビルド方法とサンプルプログラム

ビルド方法はXilinxのWikiを参考にします。

Xilinx Wiki : PMU Firmware

こちらの温度と電圧をモニタリングするサンプルプログラムを使用します。

Xilinx Wiki : Zynq UltraScale Plus MPSoC - PS Temperature and Voltage Monitor

Xilinx SDKのプロジェクトを作成する

お馴染みのXilinx SDKを起動します。

図図1:Xilinx SDK

Create Application Project をクリックします。

  • Project name: には任意のプロジェクト名を指定します。
  • OS Platform: はデフォルトの standalone のままでOKです。
  • Target Hardware の Hardware Platform: はお使いのハードウェアを選択します(動画では ZCU102_hw_platform (pre-defined) を選択しています)。
  • Processor: はpsu_pmu_0 を選択ます。

最後に、Next>をクリックします。

図図2:プロジェクトの設定

ZynqMP PMU Firmware が選択されていることを確認して、Finish をクリックします。前の画面でFinishをクリックしても問題ありません。

図図3:開発対象としてPMUを選択

aps_pmufw_bsp 選択してから右クリックして Board Support Package をクリックします。

図図4:Board Support Packageを開いたところ

PMUファームウェアがUART1を使用するように設定を行います。また、LinuxはUART1を使用しないように設定します。設定方法の詳細は、第3回の「次にLinuxからCortex-R5を制御し、Cortex-R5にUART1を制御させるために project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi をこのように変更します」をご参照ください。

図図5:UART出力先の設定

サンプルプログラムをプロジェクトに組み込む

サンプルプログラムの「xpfw_mod_sysmon_psu.h」と「xpfw_mod_sysmon_psu.c」をプロジェクトのソースディレクトリ「workscape/aps_pmufw/src」に追加します。

今回の動画では、温度のモニターに注目するためにSysmonPsuPolledExamplePrint()関数の以下の行より下を削除しています。電圧のモニターも表示する場合はソースの編集は不要です。

/*
 * Read the SUPPLY1 VCC_PSINTLP Voltage Data (Current/Maximum/Minimum) from the
 * ADC data registers.
 */

ソースを保存すると自動でビルドが実行されます。下記のファイルが生成されていればビルド成功です。

  • workscape/aps_pmufw/Debug/aps_pmufw.elf

ブートイメージの作成と実行

ビルドしたPMUファームウェアを組み込んだブートイメージを生成します。まず、PetaLinux Toolsの環境変数を設定します。PetaLinuxのインストール パスはお使いの環境に合わせてください。

$ source ~/tools/petalinux/settings.sh

次に、下記のコマンドでブート イメージにビルドしたPMUファームウェアを組込みます。

$ petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf --fpga images/linux/download.bit --pmufw images/linux/aps_pmufw.elf u-boot

最後に、生成されたBoot.binをSDカードにコピーしてボードを起動してみましょう!

図図6:UARTにて温度をモニタリングできる

このようにUART1からPMUでモニタリングした温度が出力されます。詳しくは動画をご覧ください。

まとめ

PMUファームウェアをさらにカスタマイズすることで温度が特定の値まで上昇したらシステムを停止する等の処理を行うことができます。Arm Cortex-A53、Arm Cortex-R5のアプリケーション プロセッサとは独立して動作するためアプリケーション プログラムがハング アップした場合でもPMUはシステムをより安全にすることができます。

みなさんもPMUを活用して安心安全な世界を創っていきましょう!

前の記事を読む