説明
STABLE とマークされた引数は、カーネル実行中に変更できません。設定データを提供するポートなど、カーネルが動作していないときにのみ変更される入力は、STABLE プラグマまたは指示子でマークしておく必要があります。データ駆動型のタスク レベルの並列処理では、カーネルがアイドル状態であることを検出する方法がないため、STABLE プラグマは制御駆動型のタスク モデリングにのみ使用できます。
STABLE プラグマを使用すると、Vitis HLS に次の情報が伝えられます。
- ポートに適用されるデータが通常の動作中は安定していて変化しませんが、最適化可能な定数値ではありません。
- このポートからのファンアウトにはレジスタを付ける必要はありません。
DATAFLOW ネットワーク内の STABLE プラグマは、入力が最初のデータフロー プロセスによって読み出される必要がないこと、および出力がネットワーク内の最後のデータフロー プロセスによって書き込まれる必要がないことをコンパイラに伝えます。これにより、II を大幅に改善できる可能性があります。
set_directive_stable <location> <variable>
-
<location>
: 指示子を設定する関数またはループの名前。 -
<variable>
: 制約を付けるスカラーまたは配列変数の名前。
例
次の例では、STABLE 指示子を使用しないと、proc1
と proc2
が同期化され、その入力 (A
を含む) の読み出しが確認されます。この指示子を使用すると、A
は同期が必要な入力としては認識されなくなります。
void dataflow_region(int A[...], int B[…] ...
proc1(...);
proc2(A, ...);
この例の場合、次のように指示子を記述します。
set_directive_stable dataflow_region variable=A
set_directive_dataflow dataflow_region