クロス トリガー

クロス トリガーは、Arm で提供されるエンベデッド クロス トリガリング (ECT) モジュールでサポートされます。ECT には、SoC 内の複数サブシステムがデバッグ トリガーを交換することで互いに交信するメカニズムがあります。ECT には、次の 2 つのモジュールが含まれます。

  • クロス トリガー インターフェイス (CTI) - CTI はトリガー リクエストをまとめてマップし、それらを ETC 上のその他すべてのインターフェイスにチャネル イベントとしてブロードキャストします。CTI はチャネル イベントを受信すると、これをトリガー出力にマップします。これにより、サブシステムがイネーブルになり、相互にクロス トリガーできるようになります。
  • クロス トリガー マトリックス (CTM) - CTM はチャネル イベントの分配を制御し、CTI または CTM のいずれかへ接続するためのチャネル インターフェイスを提供します。これにより、複数の ECT を互いに接続できるようになります。

次の図は、CTI と CTM が一般的な設定でどのように使用されるかを示しています。

1: 一般的な設定の CTI および CTM


CTM は複数チャネルを持つイベント ブロードキャスト ネットワークを形成します。CTI は、1 つまたは複数チャネルでイベントを検出し、受信したイベントをトリガーにマップし、トリガーを CTI に接続された 1 つまたは複数の CoreSight コンポーネントに送信します。また、接続された CoreSight コンポーネントからのトリガーをまとめてマップして、それらを 1 つまたは複数チャネルのイベントとしてブロードキャストします。そのレジスタ インターフェイスを介して、各 CTI がイベント特定のチャネルを聞くようにしたり、トリガーを特定チャネルへイベントとしてブロードキャストしたりするように設定できます。

上記の例の場合、チャネルが 4 つあります。一番上の CTI が Trigger Input 0 のトリガー イベントを Channel 0 に伝搬するように設定されています。その他の CTI は、このチャネルでイベントを聞いて、トリガー出力を介してイベントをこれらの CTI の接続されたデバッグ コンポーネントへブロードキャストするように設定できます。CTI ではチャネル ゲーティングもサポートされており、チャネルをディスエーブルにして I/O マッピングをトリガーしなくても、選択したチャネルをオフにできるようになっています。

クロス トリガーのイネーブル

Debug Configurations ダイアログ ボックスでクロス トリガー ブレークポイントを作成/編集/削除して、ターゲットにブレークポイントを適用できるようになりました。クロス トリガーをイネーブルにする手順は、次のとおりです。

  1. Vitis ソフトウェア プラットフォームを起動します。
  2. スタンドアロン アプリケーション プロジェクトを作成します。既存プロジェクトを選択することも可能です。
  3. アプリケーションを右クリックし、Debug As > Debug Configuration をクリックします。
  4. Launch on Hardware (Single Application Debug) をダブルクリックして、新しいコンフィギュレーションを作成します。
  5. Target Setup タブで Enable Cross-Triggering をオンにします。
  6. Enable Cross-Triggering チェック ボックス横の ボタンをクリックします。Cross Trigger Breakpoints ダイアログ ボックスが開きます。
    Cross Trigger Breakpoints ダイアログ ボックスでは、新しいブレークポイントを作成したり、既存のブレークポイントを編集または削除したりできます。ダイアログ ボックスで使用可能なオプションは、次のとおりです。
    Create
    新しいクロス トリガー ブレークポイントが作成できます。[New Cross Trigger Breakpoint] ダイアログ ボックスが開きます。クロス トリガー ブレークポイントのソースまたはデスティネーションとなるクロス トリガー信号を選択する必要があります。OK ボタンは、少なくとも 1 つの入力と 1 つの出力信号を選択した場合にのみ有効となります。
    Edit
    既存のプレーくポイントを編集できます。[Edit Cross Trigger Breakpoint] ダイアログ ボックスが開き、選択した入力および出力信号が編集できます。
    Remove
    選択したブレークポイントを削除できます。

Zynq デバイスのクロス トリガー

Zynq デバイスの場合、ECT が 4 つのブロードキャスト チャネルと 4 つの CTI と 1 つの CTM でコンフィギュレーションされます。1 つの CTI が ETB/TPIU に接続され、もう 1 つが FTMに、もう 1 つが各 Cortex-A9 コアに接続されます。次の表は、各 CTI のトリガー入力とトリガー出力接続を示しています。

注記: 表の接続は、ハード ワイヤ接続です。
表 1. Zynq デバイスの CTI トリガー ポート
CTI トリガー ポート 信号
ETB、TPIU に接続される CTI
トリガー入力 2 ETB フル
トリガー入力 3 ETB 取得完了
トリガー入力 4 ITM トリガー
トリガー出力 0 ETB フラッシュ
トリガー出力 1 ETB トリガー
トリガー出力 2 TPIU フラッシュ
トリガー出力 3 TPIU トリガー
FTM CTI
トリガー入力 0 FTM トリガー
トリガー入力 1 FTM トリガー
トリガー入力 2 FTM トリガー
トリガー入力 3 FTM トリガー
トリガー出力 0 FTM トリガー
トリガー出力 1 FTM トリガー
トリガー出力 2 FTM トリガー
トリガー出力 3 FTM トリガー
CPU0/1 CTIs
トリガー入力 0 CPU DBGACK
トリガー入力 1 CPU PMU IRQ
トリガー入力 2 PTM EXT
トリガー入力 3 PTM EXT
トリガー入力 4 CPU COMMTX
トリガー入力 5 CPU COMMTX
トリガー入力 6 PTM TRIGGER
トリガー出力 0 CPU デバッグ リクエスト
トリガー出力 1 PTM EXT
トリガー出力 2 PTM EXT
トリガー出力 3 PTM EXT
トリガー出力 4 PTM EXT
トリガー出力 7 CPU 再起動リクエスト

Zynq UltraScale+ MPSoC のクロス トリガー

Zynq UltraScale+ MPSoC では、ECT が 4 つのブロードキャスト チャネルと 9 つの CTI と 1 つの CTM でコンフィギュレーションされます。次の表は、各 CTI のトリガー入力とトリガー出力接続を示しています。これらは、ハードワイヤ接続です。詳細は、『Zynq UltraScale+ デバイス テクニカル リファレンス マニュアル』 (UG1085: 英語版日本語版) を参照してください。

表 2. Zynq UltraScale+ MPSoC の CTI トリガー ポート
CTI トリガー ポート 信号
CTI 0 (soc_debug_fpd)
IN 0 ETF 1 FULL
IN 1 ETF 1 ACQCOMP
IN 2 ETF 2 FULL
IN 3 ETF 2 ACQCOMP
IN 4 ETR FULL
IN 5 ETR ACQCOMP
IN 6 -
IN 7 -
OUT 0 ETF 1 FLUSHIN
OUT 1 ETF 1 TRIGIN
OUT 2 ETF 2 FLUSHIN
OUT 3 ETF 2 TRIGIN
OUT 4 ETR FLUSHIN
OUT 5 ETR TRIGIN
OUT 6 TPIU FLUSHIN
OUT 7 TPIU TRIGIN
CTI 1 (soc_debug_fpd)
IN 0 FTM
IN 1 FTM
IN 2 FTM
IN 3 FTM
IN 4 STM TRIGOUTSPTE
IN 5 STM TRIGOUTSW
IN 6 STM TRIGOUTHETE
IN 7 STM ASYNCOUT
OUT 0 FTM
OUT 1 FTM
OUT 2 FTM
OUT 3 FTM
OUT 4 STM HWEVENTS
OUT 5 STM HWEVENTS
OUT 6 -
OUT 7 HALT SYSTEM TIMER
CTI 2 (soc_debug_fpd)
IN 0 ATM 0
IN 1 ATM 1
IN 2 -
IN 3 -
IN 4 -
IN 5 -
IN 6 -
IN 7 -
OUT 0 ATM 0
OUT 1 ATM 1
OUT 2 -
OUT 3 -
OUT 4 -
OUT 5 -
OUT 6 -
OUT 7 picture debug start
CTI 0、1 (RPU)
IN 0 DBGTRIGGER
IN 1 PMUIRQ
IN 2 ETMEXTOUT[0]
IN 3 ETMEXTOUT[1]
IN 4 COMMRX
IN 5 COMMTX
IN 6 ETM TRIGGER
IN 7 -
OUT 0 EDBGRQ
OUT 1 ETMEXTIN[0]
OUT 2 ETMEXTIN[1]
OUT 3 -(CTIIRQ、接続なし)
OUT 4 -
OUT 5 -
OUT 6 -
OUT 7 DBGRESTART
CTI 0、1、2、3 (APU)
IN 0 DBGTRIGGER
IN 1 PMUIRQ
IN 2 -
IN 3 -
IN 4 ETMEXTOUT[0]
IN 5 ETMEXTOUT[1]
IN 6 ETMEXTOUT[2]
IN 7 ETMEXTOUT[3]
OUT 0 EDBGRQ
OUT 1 DBGRESTART
OUT 2 CTIIRQ
OUT 3 -
OUT 4 ETMEXTIN[0]
OUT 5 ETMEXTIN[1]
OUT 6 ETMEXTIN[2]
OUT 7 ETMEXTIN[3]

ユース ケース

FPGA から CPU へのトリガー

これは、Zynq のクロス トリガーで最もよくあるユース ケースの 1 つです。FPGA CTI には 4 つのトリガー入力があり、どの 2 つの CPU でも停止 (EDBGRQ) するように設定できます。同様に、4 つの FPGA CTI トリガーの出力は、CPU が停止 (DBGACK) する際にトリガーできます。FPGA トリガー入力および出力を ILA コアに接続すると、CPU のいずれか 2 つが停止されたときに、ILA トリガーが CPU を停止できるほか、ILA が監視している信号を取り込むようにトリガーされるようにできます。Vivado Design Suite での FTM のクロス トリガーの設定については、 『Vivado Design Suite チュートリアル: エンベデッド プロセッサ ハードウェア デザイン』 (UG940) の「クロス トリガー デザイン」セクションを参照してください。

PTM から CPU へのトリガー

トレース キャプチャをプロセッサ ステートと同期します。たとえば、ETB full イベントは CPU を停止するトリガーとして使用できます。

CPU から CPU へのトリガー

クロス トリガーを使用すると、CPU 間のデバッグ ステートの開始と終了が同期できます。たとえば、CPU0 が停止されると、イベントを使用して CPU1 デバッグ リクエストをトリガーでき、CPU1 を停止できます。

XSCT クロス トリガー コンポーネント

XSCT ブレークポイント追加コマンド (bpadd) で異なるコンポーネント間のクロス トリガーがイネーブルになるようになりました。

たとえば、次のコマンドを使用すると、Zynq core 1 が core 0 が停止したときに停止するようにクロス トリガーを設定できます。

bpadd -ct-input 0 -ct-output 8

Zynq の場合、-ct-input 0 は、CTI CPU0 TrigIn0 (CPU0 に接続される CTI のトリガー入力 0) を示しており、これが DBGACK (コアが停止するとアサート) に接続されます。-ct-output 8CTI CPU1 TrigOut0 を示しており、CPU デバッグ リクエスト (このピンをアサートするとコアが停止) に接続されます。hw_server は使用可能なチャネルを使用して、これらのピン間のクロス トリガー パスを設定します。core 0 が停止すると、イベントが選択したチャネルを介して core 1 にブロードキャストされ、core 1 が停止します。

Zynq UltraScale+ MPSoC の場合に次のコマンドを使用すると、A53 core 0 が停止すると、A53 core 1 が停止します。

bpadd -ct-input 16 -ct-output 24