syn.directive.latency - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語

説明

関数、ループ、または領域にレイテンシの最大値と最小値のいずれか、または両方を設定します。

Vitis HLS は常にレイテンシを最短にすることを目標にします。レイテンシの最大値および最小値を指定すると、ツールの動作は次のようになります。

  • レイテンシが最小値未満: Vitis HLS で指定の最小レイテンシ未満を達成できる場合は、レイテンシが指定値に拡張されます。リソース共有を増加できる可能性があります。
  • レイテンシが最小値より大きい: 制約は満たされています。これ以上の最適化は実行されません。
  • レイテンシが最大値より小さい: 制約は満たされています。これ以上の最適化は実行されません。
  • レイテンシが最大値を超える: Vitis HLS で最大値以下でスケジューリングできない場合は、指定された制約を満たすことができるようエフォート レベルが上げられます。それでも最大レイテンシを満たすことができない場合は、警告が表示され、Vitis HLS で達成可能な最小レイテンシでデザインが作成されます。
ヒント: syn.directive.latency を使用すると、ツールで最良のソリューションを探すエフォートを制限することもできます。コード内のループ、関数、または領域にレイテンシ制約を指定すると、そのスコープ内で可能なソリューション数が削減され、ツールのコンパイル時間を短縮できます。詳細は、『Vitis 高位合成ユーザー ガイド』 (UG1399) の「合成ランタイムおよび容量の改善」を参照してください。

すべてのループ反復のレイテンシ合計を制限するには、次の例のようにループ全体を含む領域にレイテンシ指示子 (syn.directive.latency Region_All_Loop_A max=10) を指定する必要があります。

Region_All_Loop_A: {
Loop_A: for (i=0; i<N; i++) 
  { 
  ..Loop Body... 
  }
}

この場合、ループが展開されていたとしても、レイテンシ指示子ですべてのループ演算の最大制限が設定されます。

構文

syn.directive.latency=[OPTIONS] <location>
  • <location>: 制約を設定する場所 (関数、ループ、または領域) を function[/label] の形式で指定します。

オプション

max=<integer>
最大レイテンシを制限します。
min=<integer>
最小レイテンシを制限します。

関数 foo のレイテンシの最小値を 4、最大値を 8 に指定します。

syn.directive.latency=min=4 max=8 foo

関数 foo にあるループ loop_row の最大レイテンシを 12 に指定します。

syn.directive.latency=max=12 foo/loop_row