描述
标记为 stable 的实参在内核执行期间不得更改。仅当内核未运行时才能更改的数据(例如,提供配置数据的端口)应以 STABLE 编译指示或指令来加以标记。STABLE 编译指示只能用于控制驱动的任务建模,因为,在数据驱动的任务级并行化中,无法检测内核何时处于空闲状态。
STABLE 编译指示会将以下信息告知 Vitis HLS:
- 应用于端口的数据在正常操作期间保持稳定,但不是可以最优化的常量值。
- 此端口的扇出无需寄存。
DATAFLOW 网络中的编译指示 STABLE 会告知编译器,网络中第一个数据流进程无需读取输入,网络中最后一个数据流进程无需写入输出。这样即可显著改善 II。
语法
#pragma HLS stable variable=<a>
其中:
-
variable=<a>
- 指定 STABLE 编译指示应用到的标量或阵列变量的名称。
示例
在以下示例中,不使用 STABLE 编译指示的情况下,proc1
与 proc2
将同步,以确认其输入的读取操作(包括 A
)。使用该编译指示后,A
将不再被视为需同步的输入。
void dataflow_region(int A[...], int B[…] ...
#pragma HLS stable variable=A
#pragma HLS dataflow
proc1(...);
proc2(A, ...);