説明
関数、ループ、または領域にレイテンシの最大値と最小値のいずれか、または両方を設定します。
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