ウォッチポイントは、ブレークポイントの一種です。ウォッチポイントは、アドレスの値が変更されたときにコアの実行を停止するために使用できます。これらは、値が変更された場所を判断するのに役立ちます。たとえば、変数値が意図せずに上書きされると、プログラム フローが中断される可能性があります。ウォッチポイントは、このような状況を検出するのに役立ちます。
AI エンジン アーキテクチャでは、読み出し/書き込みウォッチポイントがサポートされます。これは、読み出しアクセスまたは書き込みアクセス、またはその両方 (設定に基づく) でウォッチポイントがトリガーされるということです。各 AI エンジン タイルで、メモリ バンクごとに 2 つのウォッチポイントがサポートされます。境界上のタイルを除くすべての AI エンジン コアが、隣接するタイルのメモリ バンクにアクセスできるので、コアごとに最大 8 つのウォッチポイントを使用できます。ただし、メモリ バンクは共有されるので、コアごとに使用可能なウォッチポイントの数は、メモリ バンクから既に使用されているウォッチポイントの数によって異なります。たとえば、1 つのコアが 4 つの隣接するメモリ バンクからの 8 つのウォッチポイントをすべて使用している場合、これら 4 つのメモリ バンクを共有するほかのコアは、共有メモリ バンクからのウォッチポイントを使用できません。デバッガーは、各バンクから割り当てられたウォッチポイントを監視し、そのタイルに未使用のウォッチポイントがない場合はエラーを生成します。
- Vitis IDE でウォッチポイントを追加するには、左下にある WATCH ウィンドウを使用します。そのウインドウにマウスを置いて、次の図のように Add Expression (+) コマンドをクリックします。
- 関連するメモリ アドレスまたは変数名を入力できます。ウォッチポイントが作成されたコア以外のコアを選択した場合、ウォッチポイントの値が「not available」と表示されることがあります。たとえば、[Debug] ビューでコアを選択してウォッチポイントを作成した場合、更新された値は選択したコアに対してのみ表示されます。それ以外のコアの場合、ウォッチポイントの値が「not available」と表示されることがあります。
- ウォッチポイントを右クリックすると、1 つまたはすべてのウォッチポイントを編集、コピー、または削除できます。
ウォッチポイントのトリガー
ウォッチポイントは、その設定によって、読み出しアクセスまたは書き込みアクセス、あるいはその両方でトリガーされます。ウォッチポイントがトリガーされると、コアはアドレスにアクセスした命令で停止します。デバッガーは、コアがウォッチポイントで停止したことを検出し、それをレポートします。
- ウォッチポイントはハードウェアでのみ機能します。AI エンジン SystemC モデルはサポートされません。
- メモリ バンクは共有されます。あるコアが特定のバンクの両方のウォッチポイントを使用している場合、別のコアでそのバンクにウォッチポイントを追加することはできません。
- ウォッチポイントは、未使用のタイル/メモリ バンクにあるメモリ アドレスに設定することはできません。ウォッチポイントを未使用のタイルに設定すると、AXI エラーが発生する可能性があります。使用されている AI エンジンおよびメモリ タイルは、
Work/aie/active_cores.json
にあります。 - ウォッチポイントは、16 バイト全体にアライメントされたアドレス範囲のメモリ アクセスに対してトリガーされます。
- デバッガーでは、2 つのブロードキャスト チャネルを使用してウォッチポイント イベントを処理します。デバッグ中にウォッチポイントをイネーブルにすると、これら 2 つのブロードキャスト チャネルを使用する際に競合が発生しないようにしてください。