描述
此命令用于指定代码区域(协议区域),除非代码中明确指定,否则 Vitis HLS 不会在其中插入时钟操作。该工具不会在该区域内的运算之间插入任何时钟,包括读取或写入函数实参的运算。因此,读取和写入顺序严格遵循已综合的 RTL 中的顺序。
在 C/C++ 代码中可以通过使用“{ }”将区域括起或者对该区域进行命名来创建代码区域。以下示例定义了名为
io_section
的区域:io_section:{
...
lines of code
...
}
在 C 语言代码中,可使用 ap_wait()
语句来显式指定时钟运算,在 C++ 代码中则可使用 wait()
语句来指定该运算。
提示:
ap_wait
和 wait
语句对于设计的仿真没有影响。语法
syn.directive.protocol=[OPTIONS] <location>
<location>
用于指定定义协议区域的位置(格式为 function[/label]
)。
选项
-
mode=[floating | fixed]
-
-
floating
:表示浮动模式,允许协议区域外的代码语句与最终 RTL 内协议区域中的语句重叠且并行执行。协议区域可保持时钟精确,但仍可同时发生外部运算。这是默认模式。 -
fixed
:表示固定模式,fixed 模式可确保协议区域外部的语句不会与协议区域并行执行。
-
示例
此代码示例在函数
foo
内定义了协议区域 io_section
。以下指令用于将该区域定义为固定模式协议区域:syn.directive.protocol=mode=fixed foo/io_section