pragma HLS loop_tripcount - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

説明

ループに適用すると、ループで実行される反復回数の合計を手動で指定できます。

重要: LOOP_TRIPCOUNT プラグマまたは指示子は解析専用なので、合成結果には影響しません。

Vitis HLS ツールにより、各ループの合計レイテンシ、つまりループのすべての反復を実行するためのクロック サイクル数がレポートされます。このため、ループ レイテンシは、ループ反復数 (トリップカウント) に依存します。

トリップカウントは、定数値であることもあり、ループ式 (x < y など) で使用される変数の値やループ内の制御文によって異なる場合もあります。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;
   }
}

ループのレイテンシが不明または算出できない場合、LOOP_TRIPCOUNT プラグマを使用してループの反復回数の最小値、最大値、および平均値を指定できます。これにより、ループのレイテンシがデザインの総レイテンシのどの程度を占めているのかがツールで解析されてレポートされるので、デザインに適切な最適化を判断するのに役立ちます。

ヒント: C の assert マクロをループ変数のサイズを制限するために使用すると、Vitis HLS でレポートするループの制限を定義でき、これらの制限に適したサイズのハードウェアを作成できます。

構文

C ソースのループ本体内に配置します。

#pragma HLS loop_tripcount min=<int> max=<int> avg=<int>

説明:

max= <int>
ループの反復回数の最大値を指定します。
min=<int>
ループの反復回数の最小値を指定します。
avg=<int>
ループの反復回数の平均値を指定します。

次の例は、関数 fooloop_1 の最小トリップカウントを 12、最大トリップカウントを 16 に指定します。

void foo (num_samples, ...) {
  int i;
  ...
  loop_1: for(i=0;i< num_samples;i++) {
   #pragma HLS loop_tripcount min=12 max=16
   ...
    result = a + b;
  }
}