説明
ループで実行される反復回数の合計を指定します。 Vitis HLS により、各ループの合計レイテンシ、つまりループのすべての反復を実行するためのサイクル数がレポートされます。ループ レイテンシは、トリップカウント (ループの反復回数) に依存します。
重要:
syn.directive.loop_tripcount
は解析専用で、合成結果には影響しません。トリップカウントは、定数値であることもあり、ループ式 (x<y
など) で使用される変数の値やループ内の制御文によって異なる場合もあります。
Vitis HLS でトリップカウントを決定できないことがあります。これは、トリップカウントの決定に使用される変数が次のような場合です。
- 入力引数。
- ダイナミック演算により計算される変数。
次の例では、for ループの最大反復数が num_samples
入力の値により決定されます。num_samples
の値は C 関数で定義されず、外部から関数に供給されます。
void foo (num_samples, ...) {
int i;
...
loop_1: for(i=0;i< num_samples;i++) {
...
result = a + b;
}
}
ループのレイテンシが不明または算出できない場合、syn.directive.loop_tripcount
を使用してループの反復回数の最小値、最大値、および平均値を指定できます。これにより、ループのレイテンシがデザインの総レイテンシのどの程度を占めているのかがツールで解析されてレポートされるので、デザインに適切な最適化を判断するのに役立ちます。
ヒント: C の assert マクロをループ変数のサイズを制限するために使用すると、Vitis HLS でレポートするループの制限を定義でき、これらの制限に適したサイズのハードウェアを作成できます。
構文
syn.directive.loop_tripcount=[OPTIONS] <location>
-
<location>
: トリップカウントを指定するループの場所をfunction[/label]
の形式で指定します。
オプション
-
avg=<integer>
- 反復の平均回数を指定します。
-
max=<integer>
- 反復の最大回数を制限します。
-
min=<integer>
- 反復の最小回数を制限します。
例
関数
foo
の loop_1
の最小トリップカウントを 12、最大トリップカウントを 16 に指定します。syn.directive.loop_tripcount=min=12 max=16 avg=14 foo/loop_1