PLM インターフェイス (XilPLMI) - 2023.2 日本語

Versal アダプティブ SoC システム ソフトウェア開発者向けガイド (UG1304)

Document ID
UG1304
Release Date
2023-10-18
Version
2023.2 日本語

PLM インターフェイス (XilPLMI) は、PLM メイン アプリケーションおよびその他の PLM モジュール用の低レベル インターフェイス層です。XilPLMI は PLM で動作する各モジュールが必要とする一般的な機能を提供します。新規モジュールは、サポートされているコマンド ハンドラーを使用して登録できます。これらのコマンド ハンドラーは、ほかのモジュールまたはサブシステムから受信した要求に基づいて実行されます。

XilPLMI には、任意の CDO コマンドを解析して実行する CDO パーサーも含まれます。XilPLMI は汎用モジュールを実装しており、この中にはほかのすべてのモジュールが使用する汎用コマンドが用意されています。XilPLMI レイヤーは次のものを提供します。

  • CDO ファイル解析用のインターフェイス
  • 汎用 PLM CDO コマンドのインプリメンテーション
  • CDO または IPI に含めることのできるコマンドのハンドラーを登録するためのインターフェイス
  • エラー イベントに対するエラー アクションを設定し、通知を登録するためのインターフェイス
  • タイマー イベントをスケジュールするためのインターフェイス
  • デバッグ プリント レベルと共通ユーティリティ
  • 割り込みイベント登録用のインターフェイス
  • SSI ベースの PLM 間通信へのインターフェイス
  • タンパー イベント、ブート エラーの停止、任意のマスター (APU/RPU) からの IPI 要求に対して、デバイスのセキュア ロックダウンを実行するためのインターフェイス
タスク ディスパッチャー ループ
XilPLMI は、リアルタイム動作を確保するために、実行開始から終了まで中断されることのない (Run-to-Completion)、時間制限付きのシンプルな優先タスク ループ モデルを採用しています。メイン プログラムは、タスク キューから次のタスクを参照し、そのタスクを実行するための関数を呼び出すだけの簡単なループです。

このモデルは、すべてのタスクが実行完了まで中断されないため、クリティカル領域もなく、ロックが不要なため、非常にシンプルです。PLM 内のコードからグローバル データにアクセスする際も、別のタスクがデータの更新中である可能性を考慮する必要がありません。

図 1. タスク ディスパッチ ループ

モジュール
XilPLMI は、各モジュールが PLM にコマンドを登録するためのインターフェイス層を提供します。コマンドは、CDO または IPI から取得できます。
コンフィギュレーション可能パラメーター
モジュール
コンフィギュレーションにより、必要なモジュールやブート ドライバーのみを含めることができます。
デバッグ出力
コンフィギュレーションにより、複数のレベルの print 文を含めることができます。詳細は、PLM のビルド フラグ を参照してください。
CDO
CDO ファイルには、ツールで生成された CDO コマンド形式のコンフィギュレーション情報が格納されています。CDO をサポートしているモジュールは、モジュール初期化フェーズで自分自身を PLM に登録します。XilPLMI は、CDO ファイルを解析してコマンドとそのペイロードを各モジュールに伝搬するための API を提供します。
IPI 処理
PLM は、PLM と Versal デバイス上のほかのプロセッサとの間でメッセージを交換できるように、IPI 割り込みを処理します。IPI 経由で送信されるデータは、CDO フォーマットに従います。
スケジューラ
これは、周期的タスクの実行をサポートするシンプルなタイマー ベースのファンクション スケジューラです。XilSEM などのモジュールが SEU 検出スキャンなどの周期的タスクをサポートするためにはスケジューラが必要です。
注記: スケジューラの精度は、PMC IRO クロック精度の影響を受けます。
PLM ウォッチドッグ タイマー
PLM には、PLM の健全性を周期的に更新するためのフレームワークがあります。PLM は MIO (Multiplexed I/O) を切り替えて、外部ウォッチドッグ タイマー (WDT) に対して健全性を更新します。この場合、PMC MIO の使用が推奨されます。LPD MIO を使用する場合は、PS LPD がパワーダウンすると WDT が無効になることに注意が必要です。

WDT は Vivado CIPS で有効にできます。CIPS は、PLM で WDT を有効にする前に必要なすべてのコマンドを生成します。

PLM WDT を有効にするには、SetWdt CDO コマンドにパラメーター MIO PINperiodicity を指定して実行します。SetWdt CDO コマンドを実行する前に、MIO を GPIO として設定し、対応する PMC/LPD CDO をロードしておく必要があります。周期の最小値は 20ms です。

PLM は次のように実装されます。

通常コンテキスト
  • PLM は、タスクとタスクの間で毎回、ALIVE を示す変数をセットします。
  • PDI のロード中、PLM Alive ビットは、遅延や待機時間が発生するフロー内のさまざまな場所に設定されます。この Alive ビットが設定される例としては、CDO 処理の各チャンク後、パーティションでのセキュア オペレーション、ブート ドライバーの遅延/待機、マスクポーリング時などがあります。
  • LPD MIO を使用する場合、LPD シャットダウン中は WDT が無効になります。
  • いずれかのタスクの実行時間が WDT の周期より長い場合、ALIVE ビットがセットされ、外部 WDT がデバイスをリセットできます。
割り込みコンテキスト
  • 現在のスケジューラの周期は 10ms です。つまり、10ms ごとの周期で PLM がタイマー割り込みを受信し、タスクをスケジューリングします。
  • WDT ハンドラーがスケジューラ内で呼び出されます。
  • WDT を有効にすると、設定した周期に基づいて WDT ハンドラーが次の動作を周期的に実行します (たとえば周期 100ms の場合、次のタスクが周期タイムアウトの約 10ms 前まで実行されます)。PLM の ALIVE ステータスがセットされている場合のみ WDT ハンドラーは MIO ピンをトグルし、PLM の ALIVE ステータスをクリアします。
表 1. Set PLM WDT
コマンド: Set PLM WDT
予約 [31:24]=0 長さ [23:16]=2 PLM=1 CMD_SET_PLM_WDT=22
ノード IDx - PMC MIO ピン/LPD MIO ピン
[31:16] 予約 [15:0] 周期 (ms 単位)。デフォルト = 100 ms
注記: セーフティ アプリケーションの場合、PMC MIO0 (ノード ID は 0x1410801B) 上で周期 150 ms の WDT を有効にするには、CDO に set_plm_wdt 0x1410801B 150 コマンドを追加します。PLM 内で外部 WDT を有効にするには、この CDO コマンドをユーザー CDO に追加する必要があります。このユーザー CDO は、bif 内で PMC CDO より後の任意の場所に配置できます。すべての MIO ノード ID のリストについては、XilPM ライブラリの xpm_nodeid.h ファイルを参照してください。