1. Tracks

  2. Introduction

    High-Level Synthesis (HLS) is a process that automates the generation of production-quality Register-Transfer Level (RTL) implementations from high-level specifications. The high-level specifications here refer to languages such as C/C++ which are traditionally used for software design. However, using these high-level languages, high level synthesis tools help to generate RTL in Verilog, VHDL or SystemVerilog. For designs which are sub-system level or need throughput accurate designing, SystemC is used to provide the final RTL.

    Designing hardware in RTL has its advantages of providing the designer fine grained control over how exactly the hardware is to be designed. While HLS uses some level of abstraction due to the nature of the input languages, it does provide other benefits to make HLS a viable alternative option in the future for hardware design.

  3. Advantages of HLS

    1. Abstraction: Due to the abstract nature of C/C++, HLS provides the advantage of abstraction where it is quite easy and clean to create modules and describe the required hardware in the higher level to make it easier to design, debug and read.
    2. Accelerated Design Time: By automating the RTL implementation process, HLS greatly accelerates design time, allowing design teams to complete projects more quickly.
    3. Reduced Verification Effort: Just like how designing is easy with HLS, verification can also be done at the higher level. This shift-left verification is called HLV or High-Level Verification where verification is done in C/C++ in terms of gcc and then co-simulation is done by comparing if the generated RTL matches with the C/C++.
    4. Efficient Resource Allocation: This is a complex issue with a large number of possibilities if a hardware designer is handling parallelism in every location of a complex design. HLS tools handle this efficiently.
    5. Better design space exploration: HLS facilitates better design space exploration. Tools provide knobs or directives to change various aspects of the HLS design which does not need code modification. Lesser debug period makes this exploration faster and easier.
    6. Lesser Time to Market: More design space exploration, easier learning curve due to input language abstraction, less time for verification leads to faster time to market.
    7. Reduction of Cost: Easier design process and easier debug process lead to lesser resources being needed thereby reducing the overall cost.
  4. How does HLS work?

    1. How does HLS work?

      1. HLS builds Concurrent RTL modules from C++ Classes or Functions

      • C++ Class/function synthesized as a concurrent process
      • Clocked process in RTL

      The first table shows the function and the class in C++.

      void simple_function(<function interface variables>){ 
      
        <function body> 
      
      } 
      
       
      
       
      
      class simpleClass{ 
      
        … 
      
        public: 
      
        void simple_function(<function interface variables>){ 
      
          <function body> 
      
        } 
      
      }; 

      The below table shows the RTL which is generated by the HLS tool:

      module simple_function ( <module ports> );  
      
        always@(posedge clk) 
      
          begin 
      
            <module body> 
      
          end 
      
      endmodule 

      2. HLS Adds Interface Protocols to Untimed C++

      • Adding an interface protocol to an untimed C++ design is known as “Interface Synthesis”
      • Port size and direction is inferred from the source
      • Source does not specify the protocol
      • Interface synthesis allows the protocol to be defined using the HLS tool

      3. HLS Infers Memories or Registers from C++ Arrays

      • Automatically mapped to ASIC or FPGA memories/registers
      • User control over memory mapping
      • Arrays on the design interface can be synthesized as memory interfaces

      4. HLS Explores Parallelism

      • Exploration done using loop transformations
      • Unrolling and pipelining

      5. HLS Automatically Analyzes C++ Designs

      • High-level synthesis analyzes the data dependencies between the various steps in the algorithm
      • Analysis leads to a Data Flow Graph (DFG) description

      6. HLS Performs Technology-Aware Optimizations

      • After DFG analysis each operation is mapped onto a hardware resource which is then used during scheduling
      • Resources are selected from a technology specific library

      7. HLS Automatically Closes Timing

      • High-level synthesis adds "time" to the design during the process known as "scheduling”
      • Scheduling automatically shares resources

      8. HLS Automatically Shares Resources

      • HLS shares resources
      • HLS shares registers

      9. HLS Builds Parallel Concurrent Processes from Sequential C++ Functions/Classes

      • Multi-block Design
        • Top-down or bottom-up
        • User specifies design blocks
      • Design-blocks/processes run in parallel
  5. Conclusion

    High level synthesis takes in input design in high level specification code such as C/C++, SystemC along with the target technology library to provide RTL. HLS provides abstraction to the user and helps reduce the overall code and time to market of designs. Verification is also easier with high level verification which is shift left verification making it a viable option for chip designers.

  6. HLS Basics Topics