描述
默认情况下:
- 函数在 RTL 中作为独立层级块保留,或者分解(或内联)到更高层次的函数中。
- 同一层级上的任一函数的所有实例都使用相同 RTL 实现(块)。
syn.directive.function_instantiate
命令用于为函数的每个实例创建唯一的 RTL 实现,允许围绕特定实参或变量对每个实例进行最优化。
默认情况下,以下代码可为全部 3 个实例的 func_sub
函数生成单一 RTL 实现,或者如果 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