syn.directive.pipeline - 2023.1 日本語

Vitis 統合 IDE およびコマンド ライン リファレンス マニュアル (UG1553)

Document ID
UG1553
Release Date
2023-07-17
Version
2023.1 日本語

説明

演算を同時実行できるようにすることにより、関数またはループの開始間隔 (II) を短縮します (パイプライン パラダイムを参照)。パイプライン処理された関数またはループは、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
注記: ループにのみ使用可能です。
オプションのキーワードで、パイプライン処理されたループを巻き戻してパフォーマンスを改善で説明されるように、巻き戻しを有効にします。これにより、1 つのループ反復の終了と次の反復の開始の間に一時停止のない連続ループ パイプライン処理がイネーブルになります。巻き戻しは、最上位関数内に 1 つのループしかない (完全なループ ネスト) 場合にのみ効果的です。ループ前のコード部分は、次のようになります。
  • 初期化として処理されます。
  • パイプラインで一度だけ実行されます。
  • 条件文 (if-else) を含むことはできません。
style=<stp | frp | flp>
指定した関数またはループに使用するパイプライン処理のタイプを指定します。パイプライン形式については、「パイプラインのフラッシュとパイプラインのタイプ」を参照してください。パイプライン処理のタイプは次のとおりです。
stp
ストール パイプライン。入力データが使用可能になった場合にのみ実行され、それ以外の場合は停止します。これがデフォルト設定で、ループおよび関数のパイプラインの両方に対して Vitis HLS で使用されるパイプラインのタイプです。フラッシュ可能パイプラインが必要ない場合に使用してください。たとえば、ストールによるパフォーマンスやデッドロック問題がない場合に使用します。
flp
パイプラインをフラッシュ可能パイプラインに定義します。このタイプのパイプラインは、パイプラインのイテレーション間でリソースを共有できないので、通常より多くのリソースを消費し、II も長くなります。
frp
フリーランニング、フラッシュ可能パイプライン。入力データが使用可能でなくても実行されます。パイプライン制御信号のファンアウトが削減されたためにタイミングを改善する必要がある場合や、パフォーマンスを改善してデッドロックを回避する必要のある場合などに使用します。ただし、このパイプライン形式により、データがなくてもパイプライン レジスタにクロックが供給されるので、消費電力が増加する可能性があります。
重要: これは示唆であり、ハード制約ではありません。ツールにより、パイプライン処理を有効にするためのデザイン条件が確認されます。ループが特定の形式に従っていない場合は、必要に応じてデフォルト タイプ (stp) に戻されます。

func 関数は、指定された開始間隔でパイプライン処理されます。

syn.directive.pipeline=func II=1