规范主体 - 2023.2 简体中文

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

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

在规范区域内,规范主体应遵循如下准则:

  1. 使用局部非静态标量或阵列变量。局部变量是在函数体(对应函数中的数据流)或循环主体(对应循环中的数据流)内声明的。如需了解有关阵列的其他限制的信息,请参阅 控制驱动的任务级并行度的限制
  2. 在以下条件下,函数调用序列向前馈送数据(不含反馈,除非使用 hls::stream/hls::stream_of_blocks)的方式为从某一函数到按词法顺序位居其后的另一函数:
    1. 变量(标量除外)只能包含 1 个读进程和 1 个写进程。
    2. 如果使用稍后变为通道的局部非标量变量,请先使用写进程,再使用读进程(生产者位于使用者之前)。对于标量变量,允许先写后读和先读后写。
    3. 如果使用函数实参,请先使用读进程,再使用写进程(使用者位于生产者之前)。设计必须保留所有主体内部反依赖关系。
    4. 函数返回类型必须为空。
    5. 除非使用 FIFO,否则不允许在不同进程之间通过变量存在循环进位依赖关系。对于变换为串流的阵列,支持前向循环进位依赖关系,对于 hls::streams,前向和后向依赖关系均受支持。
      • 但在以下情况下例外:在连续调用顶层函数之间存在这些依赖关系(即,某一迭代编写的输入输出实参由后一迭代读取)。
    6. 数据流区域内部不支持任何形式的控制,但用于定义进程的函数调用内部的控制除外。
      • 对于规范数据流,不应存在任何条件、循环、return 语句、goto 语句或 C++ 例外(如 throw)。