所以我对 vitis hls 还很陌生,但我已经阅读了大部分文档,并且我担心使用 C 而不是 C++ 是否会有限制。我已经相当习惯使用 C 并且多年来一直使用它进行编码并且从未真正使用过 C++ 但我知道它的主要目的是在 C 中实现 OOP。我关于 C 是否受 vitis hls 限制的问题是使用这样的类作为 hls::task、hls::stream 和 hls::stream_of_blocks。我想如果我想在我的 IP 块上实现一个 AXIS 接口,我必须使用 hls::stream 定义数据(输入/输出),假设我的函数的输入是“int a”,我随后会使用# pragma HLS interface axis depth=50 port=a offset=off 为输入端口a定义我的接口。
我担心的是,由于代码在 C 中,它无法识别 hls 中的类,即 hls::stream。因此,我想知道这是否真的是我需要提防的问题,或者它是否只是缺乏理解的疏忽。这也有助于我知道我是否应该继续使用 C 工作或将我的代码转换为 C++(在学习 C++ 之后)。
感谢您的帮助!
您可以在 Vitis 或 Vivado HLS 中编写 C 代码并使用 HLS 库,因为它们旨在与 C/C++ 代码兼容。但是,有几点需要考虑:
使用 HLS 库时,您需要为您的项目使用 C++ 编译器。这意味着您的源文件应该有一个“.cpp”扩展名,即使您主要使用 C 代码也是如此。
为确保您的 C++ 代码和 C 代码之间的兼容性,您可以使用以下代码块:
#ifdef __cplusplus
extern "C" {
#endif
// Your C code that uses HLS libraries
#ifdef __cplusplus
}
#endif
请记住,在使用 HLS 库时,您应该像在编写 C++ 代码一样对待它们,即使您的其余代码主要是基于 C 的。
如需了解更多信息,请参阅《Vivado Design Suite 用户指南》第 3 章,标题为“高级综合编码样式”。
https://docs.xilinx.com/v/u/en-US/ug902-vivado-high-level-synthesis