syn.directive.function_instantiate - 2024.1 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2024-07-03
Version
2024.1 日本語

説明

デフォルトでは次のようになります。

  • 関数は、RTL では個別の階層ブロックとして残るか、上位レベルの関数に分解 (インライン展開) されます。
  • 同じ階層レベルにある関数のすべてのインスタンスは、同じ RTL インプリメンテーション (ブロック) を使用します。

syn.directive.function_instantiate コマンドは、関数のインスタンスに固有の RTL インプリメンテーションを作成し、各インスタンスが特定の引数または変数に最適化できるようにします。

デフォルトでは、次のコードの場合、3 つのインスタンスすべてに対して func_sub 関数の RTL インプリメンテーションが 1 つ作成されるか、func_sub が小さい関数の場合は、func 関数にインライン展開されます。

ヒント: デフォルトでは、Vitis HLS ツールは自動的に小さな関数をインライン展開します。これは、関数のインスタンシエーションでも同様です。set_directive_inline off オプションを使用すると、この自動インライン展開が実行されないようにできます。
char func_sub(char inval, char incr)
{
  return inval + incr;
}
void func(char inval1, char inval2, char inval3,
  char *outval1, char *outval2, char * outval3)
{
  *outval1 = func_sub(inval1, 1);
  *outval2 = func_sub(inval2, 2);
  *outval3 = func_sub(inval3, 3);
}

下の例に示す方法でこの指示子を使用すると、3 つのバージョンの関数 func_sub が作成され、変数 incr に対してそれぞれが個別に最適化されます。

構文

syn.directive.function_instantiate=<location> <variable>
  • <location>: 関数の固有のインスタンスを作成する場所を function[/region label] の形式で指定します。
  • <variable> は、さまざまな関数のインスタンシエーションで定数として指定する関数引数を指定します。

オプション

このコマンドにはオプションはありません。

先ほどの例は、次の Tcl (または関数 func_sub に配置されたプラグマ) により、関数 func_sub の各インスタンスが入力 incr に対して個別に最適化されるようにしています。

syn.directive.inline off=func_sub
syn.directive.function_instantiate=func_sub incr