set_directive_stable - 2023.2 简体中文

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

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

描述

标记为 stable 的实参在内核执行期间不得更改。仅当内核未运行时才能更改的数据(例如,提供配置数据的端口)应以 STABLE 编译指示或指令来加以标记。STABLE 编译指示只能用于控制驱动的任务建模,因为,在数据驱动的任务级并行化中,无法检测内核何时处于空闲状态。

STABLE 编译指示会将以下信息告知 Vitis HLS

  • 应用于端口的数据在正常操作期间保持稳定,但不是可以最优化的常量值。
  • 此端口的扇出无需寄存。

DATAFLOW 网络中的编译指示 STABLE 会告知编译器,网络中第一个数据流进程无需读取输入,网络中最后一个数据流进程无需写入输出。这样即可显著改善 II。

set_directive_stable <location> <variable>
  • <location> 是要在其中对指令进行约束的函数名称或循环名称。
  • <variable> 是要约束的标量或阵列变量的名称。

示例

在以下示例中,不使用 STABLE 指令的情况下,proc1proc2 将同步,以确认其输入的读取操作(包括 A)。使用该指令后,A 将不再被视为需同步的输入。

void dataflow_region(int A[...], int B[…] ...
    proc1(...);
    proc2(A, ...);

此示例对应的指令脚本如下:

set_directive_stable dataflow_region variable=A
set_directive_dataflow dataflow_region