説明
インプリメントされたカーネルでのリソースの割り当てを制限するインスタンス制限を指定します。特定の関数、ループ、演算、またはコアをインプリメントするのに使用される RTL インスタンスおよびハードウェア リソースの数を定義して制限できます。ALLOCATION
プラグマは関数の本体、ループ、またはコード領域内に指定します。
たとえば、C ソース コードに foo_sub
という関数のインスタンスが 4 つある場合、ALLOCATION
プラグマを使用して最終 RTL で foo_sub
のインスタンスを 1 つだけにできます。C 関数の 4 つのインスタンスすべてが、同じ RTL ブロックを使用してインプリメントされます。これにより関数で使用されるリソースは削減されますが、パフォーマンスが低下することがあります。
加算、乗算、配列読み出し、書き込みなどの C コードでの演算は、ALLOCATION
プラグマを使用して制限できます。合成中に演算子がマップされるコアは、それらの演算子と同じ方法で制限できます。乗算演算子の総数を制限する代わりに、組み合わせ乗算器コアの数を制限して、残りの乗算がパイプライン乗算器を使用して実行されるようにすることもできます (逆も可能)。
ALLOCATION
プラグマは、指定された関数、ループ、またはコード領域内に適用されますが、config_bind
コマンドの -min_op
引数を使用して、デザイン全体で演算子の数を最小限に抑えることもできます。
構文
このプラグラマは、適用する関数の本体、ループ、または領域内に配置します。
#pragma HLS allocation instances=<list>
limit=<value> <type>
説明:
-
instances=<list>
- 関数、演算子、またはコアの名前を指定します。
-
limit=<value>
- カーネルで使用されるインスタンスの制限を指定します (オプション)。
-
<type>
- ALLOCATION プラグマが、関数、演算、またはコア (デザインを作成するのに使用される加算器、乗算器、パイプライン乗算器、ブロック RAM などのハードウェア コンポーネント) に適用されることを指定します。次のいずれかを指定します。
-
function
-
instances=
にリストされた関数に適用されることを指定します。関数には、次の条件を満たす元の C または C++ コードの関数を指定できます。-
pragma HLS inline
またはset_directive_inline
コマンドによりインライン展開されていない。 - Vivado HLS ツールで自動的にインライン展開されていない。
-
-
operation
-
instances=
にリストされた演算に適用されることを指定します。ALLOCATION
プラグマを使用して制限可能な演算のリストは、 『Vivado Design Suite ユーザー ガイド: 高位合成』 (UG902) を参照してください。 -
core
-
ALLOCATION
がコア (加算器、乗算器、パイプライン乗算器、ブロック RAM などのデザイン作成のために使用される特定ハードウェア コンポーネント) に適用されるよう指定します。使用するコアは、instances=
オプションで指定します。コアを指定する場合、ツールで使用される必要のあるコアを指定するか、または指定したコアの制限を定義できます。
-
例 1
デザインに関数 foo
のインスタンスが複数含まれているとします。この例では、ハードウェア カーネルの RTL における foo
のインスタンス数を 2 に制限しています。
#pragma HLS allocation instances=foo limit=2 function
例 2
次の例では、関数 my_func
のインプリメンテーションに使用される乗算演算の数を 1 に制限しています。この制限は、my_func
外にある乗算器、または my_func
のサブ関数に含まれる乗算器には適用されません。
my_func
にインライン展開します。void my_func(data_t angle) {
#pragma HLS allocation instances=mul limit=1 operation
...
}