描述
允许并发执行操作,以缩短函数或循环的启动时间间隔 (II)。欲知详情,请参阅
Vitis 高层次综合用户指南(UG1399) 的“流水打拍范例”小节。流水线函数或循环每隔 N 个时钟周期即可处理新输入,其中 N 为启动时间间隔 (II)。如果 II 为 1,则表示每个时钟周期都处理新输入。
该工具默认根据指定的时钟周期约束,为设计生成最小 II。除非指定 -II,否则重点强调满足时序,而不是实现 II。
syn.compile.pipeline_style 用于定义流水线命令的默认类型,如 编译选项 所述。您可使用 PIPELINE 编译指示或指令将其覆盖。
如果 Vitis HLS 无法使用指定 II 创建设计,那么它会发出警告,并以可达成的最低 II 来创建设计。您可利用警告消息来分析此设计,以判定要采取哪些步骤才能创建满足所需启动时间间隔的设计。
语法
syn.directive.pipeline=[OPTIONS] <location>
其中:
-
<location>是要流水打拍的位置(格式为function[/label])。
选项
-
II=<integer> - 指定期望的流水线启动时间间隔。Vitis HLS 会尝试满足此请求。根据数据依赖关系,实际结果的 II 可能更大。
-
off - 关闭特定循环或函数的流水线。使用
config_compile -pipeline_loops全局进行循环流水打拍时,请使用该选项。 -
rewind -
注释: 仅适用于循环。
-
style=<stp | frp | flp> - 指定要用于指定的函数或循环的流水线类型。如需了解有关流水线样式的更多信息,请参阅
Vitis 高层次综合用户指南(UG1399) 的“刷新流水线和流水线类型”章节。流水线类型包括:
-
stp - 停止流水线。仅当输入数据可用时才运行,否则停滞。这是默认设置,也是 Vitis HLS 用于循环和函数流水打拍的流水线类型。无需可刷新的流水线时,请使用该选项。例如,没有导致停滞的性能或死锁问题时即可用。
-
flp - 将流水线定义为可刷新流水线。此类型的流水线通常耗用更多资源并且 II 可能较大,因为您无法在流水线迭代间共享资源。
-
frp - 自由运行的可刷新流水线。即使输入数据不可用也可运行。如果由于流水线控制信号扇出减少而导致需要更好的时序,或者如果需要提升性能以免死锁,则可使用此类型。但此流水线样式可能功耗更大,因为即使没有数据也会对流水线寄存器进行计时。
重要: 这是约束,但并非硬性约束。工具会检查设计启用流水打拍的条件。部分循环可能不遵循特定样式,如果需要,该工具会还原为默认样式 (stp)。 -
示例
函数 func 按指定启动时间间隔进行流水打拍。
syn.directive.pipeline=func II=1