PMUを使ってMPSoCの温度と電力を監視する
今回は、MPSoCのPMUを活用してみましょう。これまではMPSoCのArm Cortex-A53とArm Cortex-R5を活用してきましたが、今回はもう一つのプロセッサであるであるPMUを活用してみましょう。PMUは、アプリケーションを処理するArm Cortex-A53、Arm Cortex-R5とは独立して動作し、システムの起動、電源の管理、エラー通知などの安全機能を担います。機能安全を実現するシステムにおいては重要なユニットですね。
PMUにはXilinxのFPGAをお使いの方にはお馴染みの「MicroBlaze」が採用されています。MicroBlazeについて詳しく知りたい方はこちらをご覧ください。
実際にPMUを試してみよう
それでは早速、PMUファームウェアを動作させてみましょう。
ビルド方法とサンプルプログラム
ビルド方法はXilinxのWikiを参考にします。
こちらの温度と電圧をモニタリングするサンプルプログラムを使用します。
Xilinx Wiki : Zynq UltraScale Plus MPSoC – PS Temperature and Voltage Monitor
Xilinx SDKのプロジェクトを作成する
お馴染みの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>をクリックします。
ZynqMP PMU Firmware が選択されていることを確認して、Finish をクリックします。前の画面でFinishをクリックしても問題ありません。
aps_pmufw_bsp
を選択してから右クリックして 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
をこのように変更します」をご参照ください。
あわせて読みたい
サンプルプログラムをプロジェクトに組み込む
サンプルプログラムの「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カードにコピーしてボードを起動してみましょう!
このようにUART1からPMUでモニタリングした温度が出力されます。詳しくは動画をご覧ください。
まとめ
PMUファームウェアをさらにカスタマイズすることで温度が特定の値まで上昇したらシステムを停止する等の処理を行うことができます。Arm Cortex-A53、Arm Cortex-R5のアプリケーション プロセッサとは独立して動作するためアプリケーション プログラムがハング アップした場合でもPMUはシステムをより安全にすることができます。
みなさんもPMUを活用して安心安全な世界を創っていきましょう!
Xilinx社製 Zynq® UltraScale+™ MPSoC搭載ボード
ザイリンクス社のZynq UltraScale+ MPSoC デバイスは、Quad-core Arm® Cortex®-A53とDual-core Arm Cortex-R5、最大1143KロジックセルのFPGAを搭載した、All Programmable SoCデバイスです。CPUコアの性能はもちろんのこと、DDR4対応やセキュリティのサポート、GPUにはDual-coreのMali™-400、USB、GbE、PCIe Gen2x4、DisplayPortをも搭載しています。開発ツールは、Vivado® Design Suiteをはじめ、SDSoCによるプログラマブルデバイスならではのシステム開発環境が利用できます。今回の講座では、Zynq UltraScale+を搭載した「ZCU102/ZCU104評価キット」を使用します。
最新情報をメーカーサイトで見る
DTSインサイト社製 adviceLUNA Ⅱ
情報家電などの組込み製品には、高機能であることや高い処理性能が求められています。LinuxやAndroidなどのプラットフォームには、マルチコアCPUが搭載されるようになり、システムは複雑かつ大規模化し、ソフトウェアのデバッグは困難を増しています。adviceLUNA Ⅱは、従来デバッガのデバッグ機能に加え、Linuxデバッグやマルチコアデバッグに対応した高度なデバッグ機能、トレース機能、測定機能、解析機能を提供することで、MMUの仮想記憶環境やマルチコアCPUで並行動作するような複雑なソフトウェアのデバッグをサポートします。
最新情報をメーカーサイトで見る
組み込みLinux導入/開発支援サービス
組込みLinuxによりお客様の装置開発に新たな価値を提供します。
富士通コンピュータテクノロジーズ
こちらも是非
“もっと見る” 組み込みLinux|MPSoC編
adviceLUNA Ⅱを使ってOpenAMPのコア間通信をデバッグしよう!
今回は、Arm Cortex-A53上のLinuxとArm Cortex-R5上のFreeRTOSをデバッグしてみたいと思います。デバッガとしては、Armを使ったシステム開発にて根強い人気を誇る「adviceLUNA Ⅱ」を選択しています。
Zynqに搭載されたPS部を活用し、仮想化ソフトウェア「Xen」を実行してみよう!
今回は、MPSoCのPS部を活用して、Linuxの仮想化の実装であるXenを動かしてみましょう。MPSoCは、Arm Cortex-A53クアッド コアで複数のOSを動作させられる高いパフォーマンスなので、仮想マシン(VM)を動かすことができます。
ペリフェラルの割り込みを静的にコアに割り付けてみよう!
今回は、Cortex-A53上のLinuxでコアとペリフェラルの関係を見てみましょう。Linuxは基本的にはマルチコアはSMP(Symmetric Multi Processing)で動作するため、動的に空いているコアに処理を割り当てます。ただし、静的に特定の処理を特定のコアへ割り付けることも可能です。その具体的な方法を見てみましょう。