説明
syn.directive.inline
は、RTL 階層の別エンティティとなっている関数を削除します。インライン展開された関数は呼び出し関数に分解され、別の階層として表示されなくなります。
重要: 子関数をインライン展開すると、その関数に適用されているプラグマまたは指示子も解除されます。Vitis HLS では、子のコンテキストに適用されていた指示子は無視されます。
関数をインライン展開すると、関数内の演算が共有され、呼び出し関数とより効率的に最適化できるようになる場合があります。ただし、インライン展開された関数は共有または再利用できないので、親関数がインライン展開された関数を複数回呼び出す場合、エリアおよびリソース使用率が増加する可能性があります。
デフォルトでは、インライン展開は関数階層のすぐ下の階層でのみ実行されます。
構文
syn.directive.inline=[OPTIONS] <location>
-
<location>
: インライン展開を実行する場所をfunction[/label]
の形式で指定します。
オプション
-
off
- デフォルトでは、Vitis HLS でコードの小さな関数のインライン展開が実行されます。
off
オプションを使用すると、指定の関数のインライン展開がディスエーブルになります。 -
recursive
- デフォルトでは、インライン展開は 1 つの階層でのみ実行されます。指定の関数に含まれる関数はインライン展開されません。
recursive
オプションを使用すると、指定の関数階層内のすべての関数が再帰的にインライン展開されます。
例
次の例は、関数 func_sub1
をインライン展開しますが、func_sub1
で呼び出されるサブ関数はインライン展開しません。
syn.directive.inline=func_sub1
次の例は、関数
func_sub1
をインライン展開し、関数 func_sub2
以外の下位階層の関数もインライン展開します。syn.directive.inline=recursive func_sub1
syn.directive.inline=off func_sub2