描述
注释: PERFORMANCE 编译指示适用于循环和循环嵌套,需要已知循环次数才能判定性能。如果您的循环包含可变循环计数,则必须同时指定 TRIPCOUNT 编译指示。
为循环的传输事务时间间隔 (target_ti
) 指定目标性能值;其中传输事务是一整组循环迭代(循环次数),时间间隔则是第一项传输事务开始到第二项传输事务开始之间的时间。PERFORMANCE
编译指示不保证将达成指定的值,仅作为目标。
- 目标传输事务时间间隔 (
target_ti
) - 指定循环的连续启动之间的时钟周期数。换言之,从循环或嵌套循环的第一项传输事务开始到此循环的下一项传输事务开始之间的时钟周期数。
传输事务时间间隔是循环的启动时间间隔 (II) 乘以迭代次数或循环次数:target_ti = II * loop tripcount。反之,target_ti
= 频率 (Hz) / 每秒操作数。
例如,假定图像处理函数每次调用处理一帧,吞吐量目标为 60 fps,则此函数的目标吞吐量为每秒 60 次调用。如果时钟频率为 180 MHz,则 target_ti
为 180M/60,或每次函数调用 3 百万各时钟周期。
Vitis HLS 始终尝试达成目标中指定的性能目标。指定 PERFORMANCE 编译指示时,该工具会自动应用 PIPELINE、UNROLL 或 ARRAY_PARTITION 等编译指示或指令来达成 target_ti
。
语法
将编译指示置于循环边界内或嵌套循环的外层循环边界内。
#pragma HLS performance target_ti=<value>
其中:
-
target_ti=<value>
- 指定目标传输事务时间间隔定义为代码的函数、循环或区域完成一次迭代的时钟周期数。<value> 可指定为整数、浮点或由该工具解析为整数的常量表达式。 注释: 如果发生截位,则返回警告。
示例 1
指定函数 func
的目标传输事务时间间隔为 4 个时钟周期。
int func(char x, char a, char b, char c) {
#pragma HLS performance target_ti=4
char y;
y = x*a+b+c;
return y
}