9. Datatype Best Practices
After you optimize the algorithm bottlenecks of your design, you can fine-tune some datatypes in your component by using arbitrary precision datatypes to shrink data widths, which reduces FPGA area utilization. The Intel® HLS Compiler Pro Edition provides debug functionality so that you can easily detect overflows in arbitrary precision datatypes.
Because C++ automatically promotes smaller datatypes such as short or char to 32 bits for operations such as addition or bit-shifting, you must use the arbitrary precision datatypes if you want to create narrow datapaths in your component.
Tutorials Demonstrating Datatype Best Practices
The Intel® HLS Compiler Pro Edition comes with a number of tutorials that illustrate important Intel® HLS Compiler concepts and demonstrate good coding practices.
|You can find these tutorials in the following location on your Intel® Quartus® Prime system:
|best_practices/ac_datatypes||Demonstrates the effect of using ac_int datatype instead of int datatype.|
|ac_datatypes/ac_fixed_constructor||Demonstrates the use of the ac_fixed constructor where you can get a better QoR by using minor variations in coding style.|
|ac_datatypes/ac_int_basic_ops||Demonstrates the operators available for the ac_int class.|
|ac_datatypes/ac_int_overflow||Demonstrates the usage of the DEBUG_AC_INT_WARNING and DEBUG_AC_INT_ERROR keywords to help detect overflow during emulation runtime.|
|best_practices/single_vs_double_precision_math||Demonstrates the effect of using single precision literals and functions instead of double precision literals and functions.|
|ac_datatypes/ ac_fixed_constructor||Demonstrates the use of the ac_fixed math library functions.|
|hls_float/ 1_reduced_double||Demonstrates how your applications can benefit from changing the underlying type from double to hls_float<11,44> (reduced double).|
|hls_float/ 2_explicit_arithmetic||Demonstrates how to use explicit versions of hls_float binary operations to perform floating-point arithmetic operations based on your needs.|
|hls_float/ 3_conversions||Demonstrates when conversions appear in designs that use the hls_float data type and how to take advantage of different conversion modes to generate compile-type constants using hls_float types.|