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 PIN
とperiodicity
を指定して実行します。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 ファイルを参照してください。