syn.directive.dataflow - 2025.2 简体中文 - UG1399

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

Document ID
UG1399
Release Date
2026-01-22
Version
2025.2 简体中文

描述

该指令会按 C/C++ 描述中的顺序来执行所有运算。如无限制资源的任何指令(如 set_directive_allocation),则 Vitis HLS 会尝试最大限度减小时延并提高并发。数据依赖关系可对此加以限制。例如,访问阵列的函数或循环必须先完成对阵列的所有读写访问后才能完成操作。这样会阻止下一个使用该数据的函数或循环开始操作。

但函数或循环中的操作可在前一个函数或循环尚未完成其所有操作时就开始操作。syn.directive.dataflow 用于指定要对函数或循环执行的数据流优化,用于提高 RTL 实现的并发。当指定 syn.directive.dataflow 时,HLS 工具会分析顺序函数或循环之间的数据流并创建通道。这些通道是根据乒乓 RAM 或 FIFO 创建的,这些乒乓 RAM 或 FIFO 允许使用者函数或循环在生产者函数或循环完成前即开始操作。函数或循环可以并行操作,从而降低时延,并提升 RTL 吞吐量。

提示: syn.dataflow.xxx 命令会指定 syn.directive.dataflow 所使用的默认存储器通道和 FIFO 深度,如 数据流配置 所述。

要使 DATAFLOW 优化正常工作,数据必须逐一流经设计中的每个任务。请务必留意下列情况。如需了解更多详细信息,请参阅 控制驱动的任务级并行度的限制数据流区域编码风格

  • 单一生产者使用者违例
  • 任务间的反馈
  • 任务的有条件执行
  • 含多个退出条件的循环
重要: 如果存在上述任一编码样式,则 HLS 工具会发出一条消息,且不会执行 DATAFLOW 优化。

最后,DATAFLOW 优化默认不加以分层。如果子函数或循环包含可能受益于 DATAFLOW 优化的其他任务,那么请对该循环或子函数应用此优化。您还可以内联子函数。

语法

syn.directive.dataflow=<location> disable_start_propagation
  • <location> 是数据流优化的执行位置(格式为 function[/label])。
  • disable_start_propagation:禁用起始 FIFO 的创建,起始 FIFO 用于向内部进程传播起始令牌。此类 FIFO 有时可能会成为性能瓶颈。

示例

指定 DATAFLOW 优化在函数 foo 内执行。

syn.directive.dataflow=foo