set_directive_performance - 2025.1 简体中文 - UG1399

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

Document ID
UG1399
Release Date
2025-09-10
Version
2025.1 简体中文

描述

提示: set_directive_performance 全局应用于整个被测设计 (DUT) 的顶层函数。它也可作为循环层 PERFORMANCE 指令应用于循环。

Vitis HLS 中的 set_directive_performance 指令为您的设计提供了用于定义高层次性能目标的机制,以便引导综合工具的优化工作。它可应用于两个不同的作用域:设计的顶层(内核/IP)和设计中的特定循环层。

顶层 PERFORMANCE 指令

在内核或 IP 顶层函数上应用 set_directive_performance 指令允许您指定整体性能目标,主要侧重于达成所需的吞吐量。在内核顶层函数上应用该指令时,会触发 HLS 工具对整个设计执行性能分析。该分析对整个设计结构进行评估,以判定满足指定性能目标的可行性。根据整体目标及此项分析,该工具会自动为设计层内的单个循环和循环嵌套推断适当的循环层性能指令。

循环层 PERFORMANCE 指令

直接将 set_directive_performance 指令应用于特定循环或循环嵌套使您能定义循环或循环嵌套的该特定部分的性能目标。循环层的 PERFORMANCE 指令支持您指定高层次约束 target_ti 来定义循环的连续启动之间的时钟周期数,并允许该工具推断达成期望结果所需的低层次 UNROLL、PIPELINE、ARRAY_PARTITION 和 INLINE 指令。PERFORMANCE 指令不保证将达成指定的值,仅作为目标。

适用于顶层(整个函数/DUT)和循环层的 set_directive_performance 指令使用 target_ti 参数来引导优化以达成特定性能目标。

  • target_ti (目标启动时间间隔):定义 DUT 或循环的连续启动之间的所需时钟周期数。
    • 顶层性能指令:
    • 顶层应用 target_ti 时,它会指定单次函数执行的开始时间与下一次函数执行的开始时间之间的目标时间间隔。来看一个示例,假设要为图像处理设计计算顶层性能指令,目标帧数为每秒 60 帧 (FPS)。要达到 60 FPS 的帧速,函数/DUT 必须在 1/60 秒内准备好重新启动并读取新的帧。
    • Target TI = 1/FPS = 1/60 ~= 16.67 毫秒。
    • 这意味着函数/DUT 必须在 16.7 毫秒内准备好重新启动并读取新的帧,以保持每秒 60 帧 (FPS) 的目标。
    • 循环层性能指令:
    • 循环层应用 target_ti 时,它会指定连续多次外层循环迭代中的循环的首次迭代开始时间与下一次开始迭代之间的目标时间间隔。在以下示例中,循环 L2 上的 target_ti=T 将循环 L2 开始执行一次 L1 迭代与循环 L2 开始执行 L1 的下一次迭代之间的目标时间间隔设为 T 个周期。
    • const int T = 100; 
      L1: for (int i=0; i<N; i++)  
      L2: for (int j=0; j<M; j++)
      { directive HLS performance target_ti=T   ...   }

传输事务时间间隔是循环的启动时间间隔 (II) 乘以迭代次数或循环次数:target_ti = II * loop tripcount。反之,target_ti = 频率 (Hz) / 每秒操作数。

例如,假定图像处理函数每次调用处理一帧,吞吐量目标为 60 fps,则此函数的目标吞吐量为每秒 60 次调用。如果时钟频率为 180 MHz,则 target_ti 为 180M/60,或每次函数调用 3 百万个时钟周期。

语法

指定已标记的循环的指令。

set_directive_performance <location> [OPTIONS]

其中:

<location> 用于指定顶层函数或循环。

选项

-target_ti=<value>
指定目标传输事务时间间隔定义为循环完成一次迭代的时钟周期数。传输事务时间间隔指的是循环开始处理传输事务的时间与它开始处理下一项传输事务之间的时间间隔。<value> 可指定为整数、浮点或由该工具解析为整数的常量表达式。
注释: 如果发生截位,则返回警告。
unit=[sec | cycle]
指定与 target_ti 值或 target_tl 值关联的单位。此单位可指定为秒数或时钟周期数。当指定的单位为秒数时,可用表示纳秒 (ns)、皮秒 (ps) 或微秒 (us) 的相应的值来指定单位。

示例 1

指定函数 func 中标记为 loop_1 的循环的目标传输事务时间间隔为 4 个时钟周期:

set_directive_performance func/loop_1 -target_ti=4