説明
演算を同時実行できるようにすることにより、関数またはループの開始間隔 (II) を短縮します (『Vitis 高位合成ユーザー ガイド』 (UG1399) の「パイプライン パラダイム」を参照)。パイプライン処理された関数またはループは、N クロック サイクル (N は開始間隔 (II
)) ごとに新しい入力を処理できます。II=1 でクロック サイクルごとに新しい入力が処理されます。
デフォルトでは、syn.directive.pipeline
を使用すると、指定されたクロック周期制約に従ってデザインの最小 II が生成されます。-II
オプションが指定されていなければ、II の達成よりもタイミングの達成に重点が置かれます。
パイプラインのデフォルト タイプは syn.compile.pipeline_style
コマンドで定義しますが (コンパイル オプション を参照)、PIPELINE プラグマまたは指示子の方が優先されます。
Vitis HLS で指定した II でデザインを作成できない場合は、警告メッセージが表示されて、達成可能な最短の開始間隔でデザインが作成されます。警告メッセージを参考にデザインを解析し、必要な開始間隔を満たしてデザインを作成するためにどの手順が必要なのかを判断します。
構文
syn.directive.pipeline=[OPTIONS] <location>
説明:
-
<location>
: パイプライン処理が実行する場所をfunction[/label]
の形式で指定します。
オプション
-
II=<integer>
- パイプラインの開始間隔を指定します。Vitis HLS では、この指定を満たすことが試みられます。データの依存性によって、実際の開始間隔はこの指定より大きくなることがあります。
-
off
- 指定のループまたは関数のパイプライン処理をオフにします。
config_compile -pipeline_loops
でループのパイプラインがグローバルに指定されている場合に使用できます。 -
rewind
-
注記: ループにのみ使用可能です。
-
style=<stp | frp | flp>
- 指定した関数またはループに使用するパイプライン処理のタイプを指定します。パイプライン形式については、『Vitis 高位合成ユーザー ガイド』 (UG1399) の「パイプラインのフラッシュとパイプラインのタイプ」を参照してください。パイプライン処理のタイプは次のとおりです。
-
stp
- ストール パイプライン。入力データが使用可能になった場合にのみ実行され、それ以外の場合は停止します。これがデフォルト設定で、ループおよび関数のパイプラインの両方に対して Vitis HLS で使用されるパイプラインのタイプです。フラッシュ可能パイプラインが必要ない場合に使用してください。たとえば、ストールによるパフォーマンスやデッドロック問題がない場合に使用します。
-
flp
- パイプラインをフラッシュ可能パイプラインに定義します。このタイプのパイプラインは、パイプラインのイテレーション間でリソースを共有できないので、通常より多くのリソースを消費し、II も長くなります。
-
frp
- フリーランニング、フラッシュ可能パイプライン。入力データが使用可能でなくても実行されます。パイプライン制御信号のファンアウトが削減されたためにタイミングを改善する必要がある場合や、パフォーマンスを改善してデッドロックを回避する必要のある場合などに使用します。ただし、このパイプライン形式により、データがなくてもパイプライン レジスタにクロックが供給されるので、消費電力が増加する可能性があります。
重要: これは示唆であり、ハード制約ではありません。ツールにより、パイプライン処理を有効にするためのデザイン条件が確認されます。ループが特定の形式に従っていない場合は、必要に応じてデフォルト タイプ (stp
) に戻されます。 -
例
func
関数は、指定された開始間隔でパイプライン処理されます。
syn.directive.pipeline=func II=1