説明
リソース割り当てのためのインスタンス制限を指定します。
syn.directive.allocation
を使用すると、特定の関数、ループ、または演算をインプリメントするのに使用される RTL インスタンスおよびハードウェア リソースの数を制限できます。たとえば、C/C++ ソース コードに foo_sub
という関数のインスタンスが 4 つある場合、syn.directive.allocation
コマンドを使用して、最終 RTL での foo_sub
インスタンスの数を 1 つだけにできます。4 つのインスタンスがすべて、同じ RTL ブロックを使用してインプリメントされます。これにより関数で使用されるリソースは削減されますが、これらのリソースが共有されるので、パフォーマンスが低下することがあります。
加算、乗算、配列読み出し、書き込みなどの C/C++ コードでの演算は、syn.directive.allocation
コマンドを使用して制限できます。
構文
syn.directive.allocation=[OPTIONS] <location> <instances>
-
<location>
: 場所をfunction[/label]
の形式で指定します。 -
<instances>
: 関数または演算子を指定します。関数には、syn.directive.allocation
コマンドでインライン展開されたり、Vitis HLS で自動的にインライン展開されたりしていない元の C/C++ コードの関数を指定できます。
オプション
-
limit=<integer>
-
RTL デザインで使用されるインスタンス (
type
オプションで指定したタイプ) の最大数を設定します。 -
type=[function|operation]
- インスタンス タイプには、
function
(デフォルト) またはoperation
を指定できます。サポートされる演算すべてのリストは、演算子のコンフィギュレーション を参照してください。
例
関数 foo
のインスタンスが複数含まれているデザイン foo_top
に対して、RTL での foo
のインスタンス数を 2 に制限します。
syn.directive.allocation=limit=2 type=function foo_top foo
My_func
のインプリメンテーションに使用される乗算の数を 1 に制限します。この制限は、My_func
のサブ関数に含まれる乗算器には適用されません。サブ関数のインプリメンテーションに使用される乗算器の数を制限するには、そのサブ関数に ALLOCATION 指示子を指定するか、サブ関数を関数 My_func
にインライン展開します。
syn.directive.allocation=limit=1 type=operation My_func mul