set_directive_function_instantiate - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

描述

默认情况下:

  • 函数在 RTL 中作为独立层级块保留,或者分解(或内联)到更高层次的函数中。
  • 同一层级上的任一函数的所有实例都使用相同 RTL 实现(块)。

set_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 变量进行最优化。

语法

set_directive_function_instantiate <location> <variable>
  • <location> 即生成函数的唯一实例的位置(格式为 function[/region label])。
  • <variable> 可指定函数实参,所指定的函数实参将在各种函数例化中被指定为常量。

选项

此命令不含任何选项。

示例

对于以上所示示例代码,以下 Tcl(或置于 func_sub 函数中的编译指示)支持对 func_sub 函数的每个实例进行与 incr 输入相关的独立最优化。

set_directive_inline -off func_sub
set_directive_function_instantiate func_sub incr