説明
関数、ループ、または領域にレイテンシの最大値と最小値のいずれか、または両方を設定します。
Vitis HLS は常にレイテンシを最短にすることを目標にします。レイテンシの最大値および最小値を指定すると、ツールの動作は次のようになります。
- レイテンシが最小値未満: Vitis HLS で指定の最小レイテンシ未満を達成できる場合は、レイテンシが指定値に拡張されます。リソース共有を増加できる可能性があります。
- レイテンシが最小値より大きい: 制約は満たされています。これ以上の最適化は実行されません。
- レイテンシが最大値より小さい: 制約は満たされています。これ以上の最適化は実行されません。
- レイテンシが最大値を超える: Vitis HLS で最大値以下でスケジューリングできない場合は、指定された制約を満たすことができるようエフォート レベルが上げられます。それでも最大レイテンシを満たすことができない場合は、警告が表示され、Vitis HLS で達成可能な最小レイテンシでデザインが作成されます。
ヒント: LATENCY プラグマまたは指示子を使用すると、ツールで最良のソリューションを探すエフォートを制限することもできます。コード内のループ、関数、または領域にレイテンシ制約を指定すると、そのスコープ内で可能なソリューションが削減され、ツールの実行時間が短縮されることがあります。詳細は、合成ランタイムおよび容量の改善を参照してください。
すべてのループ反復のレイテンシ合計を制限するのが目的の場合は、次の例 (set_directive
Region_All_Loop_A
) のようにループ全体を含む領域にレイテンシ指示子を指定する必要があります。
Region_All_Loop_A: {
Loop_A: for (i=0; i<N; i++)
{
..Loop Body...
}
}
この場合、ループが展開されていたとしても、レイテンシ指示子ですべてのループ演算の最大制限が設定されます。
Vitis HLS で最大レイテンシ制約を満たすことができない場合、レイテンシ制約が緩和され、できるだけ最適な結果が達成されます。
最小レイテンシ制約を設定し、Vitis HLS で必要とされる最小値よりも短いレイテンシでデザインが生成される場合は、最小レイテンシが満たされるようにダミー クロック サイクルが挿入されます。
構文
set_directive_latency [OPTIONS] <location>
-
<location>
: 制約を設定する場所 (関数、ループ、または領域) をfunction[/label]
の形式で指定します。
オプション
-
-max <
integer
> - 最大レイテンシを指定します。
-
-min <
integer
> - 最小レイテンシを指定します。
例
関数 foo
のレイテンシの最小値を 4、最大値を 8 に指定します。
set_directive_latency -min=4 -max=8 foo
関数 foo
にあるループ loop_row
の最大レイテンシを 12 に指定します。プラグマはループ本体に記述します。
set_directive_latency -max=12 foo/loop_row