syn.directive.latency - 2024.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2024-07-03
Version
2024.1 简体中文

描述

在函数、循环或区域上指定最大和/或最小时延值。

Vitis HLS 始终以最小时延为目标。指定最小和最大时延值时,该工具的行为如下所示:

  • 当时延小于最小值时:如果 Vitis HLS 可以实现小于最小指定值的时延,那么它可将时延扩展至指定值,这样可能增加共享。
  • 当时延大于最小值时:满足约束。不再执行进一步最优化。
  • 当时延小于最大值时:满足约束。不再执行进一步最优化。
  • 当时延大于最大值时:如果 Vitis HLS 无法调度到最大限值范围内,那么它会尽力实现指定约束。如果仍无法满足最大时延,则会发出警告。随后,Vitis HLS 会以可实现的最小时延来生成设计。
提示: 您还可以使用 syn.directive.latency 来限制该工具寻找最优解决方案的范围。为代码中的作用域(包括循环、函数或区域)指定时延约束即可减少该作用域内的可能的解决方案数量,从而改善工具编译时间。如需了解更多信息,请参阅Vitis 高层次综合用户指南(UG1399) 的“改善综合运行时间和容量”章节。

要限制所有循环迭代的总时延,应将时延指令应用于包含整个循环的区域,如以下示例所示:syn.directive.latency Region_All_Loop_A max=10

Region_All_Loop_A: {
Loop_A: for (i=0; i<N; i++) 
  { 
  ..Loop Body... 
  }
}

在此情况下,即使展开循环,时延指令仍会对所有循环操作设置最大限制。

语法

syn.directive.latency=[OPTIONS] <location>
  • <location> 是要约束的函数、循环或区域的位置(格式为 function[/label])。

选项

max=<integer>
限制最大时延。
min=<integer>
限制最小时延。

示例

指定 foo 函数采用最小时延值 4 和最大时延值 8。

syn.directive.latency=min=4 max=8 foo

foo 函数中,指定 loop_row 循环采用最大时延 12。

syn.directive.latency=max=12 foo/loop_row