syn.compile.pipeline_loops
コンフィギュレーション コマンドを使用すると、反復回数に基づくループの自動パイプライン処理をイネーブルにできます。トリップカウントが指定した制限よりも大きいループは、すべて自動的にパイプライン処理されます。デフォルトの制限数は 64 です。
次のようなコードがあるとします。
loop1: for (i = 0; i < 5; i++) {
// do something 5 times ...
}
syn.compile.pipeline_loops
コマンドを 4 に設定すると、for
ループ (loop1
) がパイプライン処理されます。これは、次のコードに示すように、PIPELINE プラグマを追加することと同じです。
loop1: for (i = 0; i < 5; i++) {
#pragma HLS PIPELINE II=1
// do something 5 times ...
}
ただし、入れ子のループの場合、ツールは最も内側のループから開始し、パイプライン処理できるかどうかを判断し、ループ ネストの上方向に移動していきます。次の例では、syn.compile.pipeline_loops
のしきい値はまだ 4 で、最も内側のループ (loop1
) がパイプライン処理されるようマークされています。次に、ループ ペアの親ループ (loop2
) を評価したところ、これもパイプライン処理できることがわかりました。この場合、ツールは loop1
を loop2
に展開し、loop2
をパイプライン処理するようにマークします。この後、親ループ (loop3
) に移動して、解析を繰り返します。
loop3: for (y = 0; y < 480; y++) {
loop2: for (x = 0; x < 640; x++) {
loop1: for (i = 0; i < 5; i++) {
// do something 5 times ...
}
}
}
自動パイプライン処理を適用するべきでないループがデザインに含まれる場合は、そのループに PIPELINE 指示子を off
設定で適用します。この指示子を off
に設定すると、ループの自動パイプライン処理は実行されなくなります。
重要: ツールでは、ユーザー指定の指示子をすべて実行された後に、
syn.compile.pipeline_loops
コマンドが適用されます。たとえば、ループにユーザー指定の UNROLL 指示子が適用される場合、このループがまず展開され、ループが削除される際に自動ループ パイプラインは適用されません。