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