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
                            
                        
                    
                9.1. Executing Multiple Loops in Parallel
 By using HLS tasks, you can run sequential loops in a pipelined manner within the context of the loop nest. 
  
 
  
   For example, in the following code sample, the first and second loops can be executing different invocations of the component foo() if the invocations can be pipelined by the  Intel® HLS Compiler Pro Edition:
   
 
  component void foo() {
  // first loop
  for (int i = 0; i < n; i++) {
    // Do something
  }
  // second loop
  for (int i = 0; i < m; i++) {
    // Do something else
  }
} 
  
   However, the same invocation of the component foo() cannot execute the two loops in parallel. System of tasks provides a way to achieve this by moving the loops into asynchronous tasks. With the first loop in an asynchronous task, the second loop can run concurrently with the first loop.
   
 
  void first_loop() {
  for (int i = 0; i < n; i++) {
    // Do something
  }
}
void second_loop() {
  for (int i = 0; i < m; i++) {
    // Do something else
  }
}
component void foo() {
  ihc::launch<first_loop>();
  ihc::launch<second_loop>();
  ihc::collect<first_loop>();
  ihc::collect<second_loop>();
} 
  Review the tutorial <quartus_installdir>/hls/examples/tutorials/system_of_tasks/parallel_loop to learn more about how to run multiple loops in parallel.