Visible to Intel only — GUID: ewa1462826746626
Ixiasoft
Visible to Intel only — GUID: ewa1462826746626
Ixiasoft
3.2. C and C++ Libraries
HLS Header File | Description |
---|---|
HLS/hls.h | Required for component identification and component parameter interfaces. |
HLS/math.h | Includes FPGA-specific definitions for the math functions from the math.h for your operating system. |
HLS/extendedmath.h | Includes additional FPGA-specific definitions of math functions not in math.h. |
HLS/ac_int.h | Provides FPGA-optimized arbitrary width integer support. |
HLS/ac_fixed.h | Provides FPGA-optimized arbitrary precision fixed point support. |
HLS/ac_fixed_math.h | Provides FPGA-optimized arbitrary precision fixed point math functions. |
HLS/ac_complex.h | Provides FPGA-optimized complex number support. |
HLS/hls_float.h | Provides FPGA-optimized arbitrary-precision IEEE-754 compliant floating-point number support. |
HLS/hls_float_math.h | Provides FPGA-optimized floating-point math functions. |
HLS/math_dsp_control.h | Provides the ihc::math_dsp_control function to control the hardware implementation for supported data types and math functions at a local-scope. |
HLS/stdio.h | Provides printf support for components so that printf statements work in x86 emulations, but are disabled in component when compiling to an FPGA architecture. |
<iostream> | To use cout and cerr in your component, guard the statements with the HLS_SYNTHESIS macro. |
math.h
To access functions in math.h from your component function, include the "HLS/math.h" file in your source code. The header ensures that the components call the hardware versions of the math functions.
For more information about supported math.h functions, see Supported Math Functions.
stdio.h
Synthesized component functions generally do not support C and C++ standard library functions such as FILE objects.
A component can call printf by including the header file HLS/stdio.h. This header changes the behavior of printf depending on the compilation target:
- For compilation that targets the x86-64 architecture (that is, -march=x86-64 ), the printf call behaves as normal.
- For compilation that targets the FPGA architecture (that is, ‑march="<FPGA_family_or_part_number>"), the compiler removes the printf call.
If you use printf in a component function without first including the #include "HLS/stdio.h" line in your code, you get an error message similar to the following error when you compile hardware to the FPGA architecture:
$ i++ -march="<FPGA_family_or_part_number>" --component dut test.cpp
Error: HLS gen_qsys FAILED.
See ./a.prj/dut.log for details.
You can use C and C++ standard library functions such as fopen and printf as normal in all testbench functions.
iostream
The C++ standard output streams (cout or cerr) output streams are not supported in RTL, but you can use them to debug your component in emulation. However, you must guard any cout or cerr statements with the HLS_SYNTHESIS macro.
#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;
}
If you attempt to use cout or cerr in a component function without guarding the line in your code with the HLS_SYNTHESIS macro , you get an error message similar to the following error when you compile hardware to the FPGA architecture:
$ i++ -march="<FPGA_family_or_part_number>" run.cpp
run.cpp:5: Compiler Error: Cannot synthesize std::cout used inside of a component.
HLS Main Optimizer FAILED.