pragma HLS protocol - 2021.2 Chinese

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

Document ID
UG1399
Release Date
2021-12-15
Version
2021.2 Chinese

描述

此命令用于指定代码区域(协议区域),除非代码中明确指定,否则 Vitis HLS 不会在其中插入时钟操作。Vitis HLS 将不会在该区域内的运算之间插入任何时钟,包括读取或写入函数实参的运算。因此,读取和写入顺序严格遵循已综合的 RTL 中的顺序。

在 C/C++ 代码中可以通过使用“{ }”将区域括起或者对该区域进行命名来创建代码区域。以下示例定义了名为 io_section 的区域:
io_section:{
...
lines of code
...
}

在 C/C++ 代码中,可使用 ap_wait() 语句来显式指定时钟运算,在 C++ 代码中则可使用 wait() 语句来指定该运算。ap_waitwait 语句对于设计的仿真没有影响。

语法

将 C 语言源代码中的编译指示置于函数或协议区域的主体内。

#pragma HLS protocol [floating | fixed]

选项

floating
表示浮动模式,允许协议区域外的代码语句与最终 RTL 内协议区域中的语句重叠且并行执行。协议区域可保持时钟精确,但仍可同时发生外部运算。这是默认模式。
fixed
表示固定模式,fixed 模式可确保协议区域外部的语句不会与协议区域并行执行。

示例

此示例在函数 foo 内定义了 io_section 协议区域,其中通过编译指示将该区域定义为浮动协议区域(默认模式):

io_section: {
#pragma HLS protocol
...
}