Intel® High Level Synthesis Compiler Pro Edition: Best Practices Guide
ID
683152
Date
1/23/2025
Public
1. Discontinuation of the Intel® HLS Compiler
2. Intel® HLS Compiler Pro Edition Best Practices Guide
3. Best Practices for Coding and Compiling Your Component
4. FPGA Concepts
5. Interface Best Practices
6. Loop Best Practices
7. fMAX Bottleneck Best Practices
8. Memory Architecture Best Practices
9. System of Tasks Best Practices
10. Datatype Best Practices
11. Advanced Troubleshooting
A. Intel® HLS Compiler Pro Edition Best Practices Guide Archives
B. Document Revision History for Intel® HLS Compiler Pro Edition Best Practices Guide
6.1. Reuse Hardware By Calling It In a Loop
6.2. Parallelize Loops
6.3. Construct Well-Formed Loops
6.4. Minimize Loop-Carried Dependencies
6.5. Avoid Complex Loop-Exit Conditions
6.6. Convert Nested Loops into a Single Loop
6.7. Place if-Statements in the Lowest Possible Scope in a Loop Nest
6.8. Declare Variables in the Deepest Scope Possible
6.9. Raise Loop II to Increase fMAX
6.10. Control Loop Interleaving
10.2. Avoid Negative Bit Shifts When Using the ac_int Datatype
The ac_int datatype differs from other languages, including C and Verilog, in bit shifting. By default, if the shift amount is of a signed datatype ac_int allows negative shifts.
In hardware, this negative shift results in the implementation of both a left shifter and a right shifter. The following code example shows a shift amount that is a signed datatype.
int14 shift_left(int14 a, int14 b) { return (a << b); }
If you know that the shift is always in one direction, to implement an efficient shift operator, declare the shift amount as an unsigned datatype as follows:
int14 efficient_left_only_shift(int14 a, uint14 b) { return (a << b); }