When creating your IP using the HLS compiler, be aware
of the current set of software and programming
restrictions.
C++ Language Restrictions
The Intel® HLS Compiler accepts C++ code.
- A component cannot include virtual functions, function pointers, or bit fields.
- Function-scoped static variables that are a part of the component cannot use function arguments for initialization.
- A component or task function cannot contain an irreducible loop. That is, loops in component and task functions must have only one entry point into the loop.
- C++ restrictions
-
- The HLS compiler does not support using lambda functions as components.
- Class membership
-
- HLS component functions cannot be a C++ class member. However, you can declare your component function as a wrapper function. This wrapper function can call a member function of a class or a part of a namespace.
- Exception handling
-
- A component cannot contain exception handling.
- Library calls
-
- The HLS compiler does not currently support calls to C++ runtime libraries on Windows, including calls from the testbench code.
- Library functions
-
- A component cannot contain standard C or C++ library functions, unless they are explicitly supported by header files provided with the Intel® HLS Compiler.
- Multiple inheritance
-
- The HLS compiler does not support classes with multiple inheritance used as parameters. You may use classes as parameters provided that each class inherits from, at most, one class directly.
- Namespaces
-
- HLS component functions cannot be a part of a declared namespace. However, you can declare your component function as a global wrapper function. This wrapper function can call a member function of a class or a part of a namespace
- Parameters
-
- The HLS compiler does not support classes with multiple inheritance used as parameters. You may use classes as parameters if each class inherits from, at most, one class directly.
- Recursion
-
- The HLS compiler does
not support the synthesis of components that use
recursion; however, tail recursion is
supported.
If a component has an algorithm that uses recursion, and it is identified for FPGA acceleration, modify the algorithm to use tail recursion, if possible.
- The HLS compiler does
not support the synthesis of components that use
recursion; however, tail recursion is
supported.