説明
関数、ループ、または領域にレイテンシの最大値と最小値のいずれか、または両方を設定します。
Vitis HLS は常にレイテンシを最短にすることを目標にします。レイテンシの最大値および最小値を指定すると、ツールの動作は次のようになります。
- レイテンシが最小値未満: Vitis HLS で指定の最小レイテンシ未満を達成できる場合は、レイテンシが指定値に拡張されます。リソース共有を増加できる可能性があります。
- レイテンシが最小値より大きい: 制約は満たされています。これ以上の最適化は実行されません。
- レイテンシが最大値より小さい: 制約は満たされています。これ以上の最適化は実行されません。
- レイテンシが最大値を超える: Vitis HLS で最大値以下でスケジューリングできない場合は、指定された制約を満たすことができるようエフォート レベルが上げられます。それでも最大レイテンシを満たすことができない場合は、警告が表示され、Vitis HLS で達成可能な最小レイテンシでデザインが作成されます。
ヒント:
syn.directive.latency
を使用すると、ツールで最良のソリューションを探すエフォートを制限することもできます。コード内のループ、関数、または領域にレイテンシ制約を指定すると、そのスコープ内で可能なソリューション数が削減され、ツールのコンパイル時間を短縮できます。詳細は、「合成ランタイムおよび容量の改善」を参照してください。すべてのループ反復のレイテンシ合計を制限するには、次の例のようにループ全体を含む領域にレイテンシ指示子 (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