仅对英特尔可见 — GUID: ewa1462826746626
Ixiasoft
仅对英特尔可见 — GUID: ewa1462826746626
Ixiasoft
3.2. C和C++库
HLS头文件 | 描述 |
---|---|
HLS/hls.h | 组件识别和组件参数接口需要该文件。 |
HLS/math.h | 包含math.h中数学函数特定于FPGA的定义,以用于操作系统。 |
HLS/extendedmath.h | 包括math.h中没有的其他FPGA特定数学函数定义。 |
HLS/ac_int.h | 提供FPGA优化的任意宽度整数支持。 |
HLS/ac_fixed.h | 提供FPGA优化的任意精度定点支持。 |
HLS/ac_fixed_math.h | 提供FPGA优化的任意精度定点数学函数。 |
HLS/ac_complex.h | 提供FPGA优化的复数支持。 |
HLS/hls_float.h | 提供优化的FPGA任意精度IEEE-754编译浮点数支持。 |
HLS/hls_float_math.h | 提供FPGA优化的浮点数学函数。 |
HLS/math_dsp_control.h | 提供ihc::math_dsp_control函数以控制本地范围内支持的数据类型和数学函数的硬件实现。 |
HLS/stdio.h | 提供组件的printf支持,以便printf声明在x86仿真中有效,但在编译成为FPGA架构时在组件中被禁用。 |
<iostream> | 在组建中使用cout和cerr,通过HLS_SYNTHESIS宏守卫声明。 |
math.h
要访问您组件函数中math.h中的函数,包括您源代码中的"HLS/math.h”文件。头可以确保组件调用数学函数的硬件版本。
关于支持的math.h函数,请参阅支持的数学函数获得更多信息。
stdio.h
已综合的组件函数通常不支持C和C++标准库函数,例如FILE对象。
通过包含头文件HLS/stdio.h后,组件可以调用printf。此头会更改printf的行为,具体取决于编译对象,如下:
- 对于针对x86-64架构(即, -march=x86-64 )的编译,printf调用执行常规行为。
- 对于针对FPGA架构的编译(即,‑march="<FPGA_family_or_part_number>"),编译器会删除printf调用。
如果您在组件函数中使用printf,而未先将#include "HLS/stdio.h”行包含到代码中,当您将硬件编译为 FPGA架构时,就会收到类似于以下的错误消息:
$ i++ -march="<FPGA_family_or_part_number>" test.cpp Error: HLS gen_qsys FAILED. See ./a.prj/dut.log for details.
您可以使用C和C++标准库函数,例如,像所有测试台功能一样正常使用fopen和printf。
iostream
RTL中不支持C++标准输出流(cout或cerr),但您可以使用它们在仿真中调试组件。但是,您必须通过HLS_SYNTHESIS宏守卫任何cout或cerr声明。
#include "HLS/hls.h" #include <iostream> component int debug_component (int a){ #ifndef HLS_SYNTHESIS std::cout << "input value: " << a << std::endl; #endif return a; }
如果您尝试在组件函数中使用cout或cerr,而未先通过HLS_SYNTHESIS宏对代码中的命令行进行守卫,则当您将硬件编译为FPGA架构时,就会收到类似于以下的错误消息:
$ i++ -march="<FPGA_family_or_part_number>" test.cpp test.cpp:5: Compiler Error: Cannot synthesize std::cout used inside of a component. HLS Main Optimizer FAILED.