High-level synthesis
High-level synthesis, sometimes referred to as C synthesis, electronic system-level 'synthesis, algorithmic synthesis, or behavioral synthesis', is an automated design process that takes an abstract behavioral specification of a digital system and finds a register-transfer level structure that realizes the given behavior.
Synthesis begins with a high-level specification of the problem, where behavior is generally decoupled from low-level circuit mechanics such as clock-level timing. Early HLS explored a variety of input specification languages, although recent research and commercial applications generally accept synthesizable subsets of ANSI C/C++/SystemC/MATLAB. The code is analyzed, architecturally constrained, and scheduled to transcompile from a transaction-level model into a register-transfer level design in a hardware description language, which is in turn commonly synthesized to the gate level by the use of a logic synthesis tool.
The goal of HLS is to let hardware designers efficiently build and verify hardware, by giving them better control over optimization of their design architecture, and through the nature of allowing the designer to describe the design at a higher level of abstraction while the tool does the RTL implementation. Verification of the RTL is an important part of the process.
Hardware can be designed at varying levels of abstraction. The commonly used levels of abstraction are gate level, register-transfer level, and algorithmic level.
While logic synthesis uses an RTL description of the design, high-level synthesis works at a higher level of abstraction, starting with an algorithmic description in a high-level language such as SystemC and ANSI C/C++. The designer typically develops the module functionality and the interconnect protocol. The high-level synthesis tools handle the micro-architecture and transform untimed or partially timed functional code into fully timed RTL implementations, automatically creating cycle-by-cycle detail for hardware implementation. The implementations are then used directly in a conventional logic synthesis flow to create a gate-level implementation.
History
Early academic work extracted scheduling, allocation, and binding as the basic steps for high-level-synthesis. Scheduling partitions the algorithm in control steps that are used to define the states in the finite-state machine. Each control step contains one small section of the algorithm that can be performed in a single clock cycle in the hardware. Allocation and binding maps the instructions and variables to the hardware components, multiplexers, registers and wires of the data path.First generation behavioral synthesis was introduced by Synopsys in 1994 as Behavioral Compiler and used Verilog or VHDL as input languages. The abstraction level used was partially timed processes. Tools based on behavioral Verilog or VHDL were not widely adopted in part because neither languages nor the partially timed abstraction were well suited to modeling behavior at a high level. 10 years later, in early 2004, Synopsys end-of-lifed Behavioral Compiler.
In 1998, Forte Design Systems introduced its Cynthesizer tool which used SystemC as an entry language instead of Verilog or VHDL. Cynthesizer was adopted by many Japanese companies in 2000 as Japan had a very mature SystemC user community. The first high-level synthesis tapeout was achieved in 2001 by Sony using Cynthesizer. Adoption in the United States started in earnest in 2008.
In 2006, an efficient and scalable "SDC modulo scheduling" technique was developed on control and data flow graphs and was later extended to pipeline scheduling. This technique uses the integer linear programming formulation. But it shows that the underlying constraint matrix is totally unimodular. Thus, the problem can be solved in polynomial time optimally using a linear programming solver in polynomial time. This work was inducted to the FPGA and Reconfigurable Computing Hall of Fame 2022.
The SDC scheduling algorithm was implemented in the xPilot HLS system developed at UCLA, and later licensed to the AutoESL Design Technologies, a spin-off from UCLA. AutoESL was acquired by Xilinx in 2011, and the HLS tool developed by AutoESL became the base of Xilinx HLS solutions, Vivado HLS and Vitis HLS, widely used for FPGA designs.
Process stages
The high-level synthesis process consists of a number of activities. Various high-level synthesis tools perform these activities in different orders using different algorithms. Some high-level synthesis tools combine some of these activities or perform them iteratively to converge on the desired solution.- Lexical processing
- Algorithm optimization
- Control/Dataflow analysis
- Library processing
- Resource allocation
- Scheduling
- Functional unit binding
- Register binding
- Output processing
- Input Rebundling
Functionality
Architectural constraints
Synthesis constraints for the architecture can automatically be applied based on the design analysis. These constraints can be broken into- Hierarchy
- Interface
- Memory
- Loop
- Low-level timing constraints
- Iteration
Interface synthesis
Vendors
Data reported on recent Survey| Status | Compiler | Owner | License | Input | Output | Year | Domain | Test bench | FP | FixP |
| In use | Cadence Design Systems | Commercial | C–C++ SystemC | RTL | 2015 | All | ||||
| In use | TIMA Lab. | Academic | C subset | VHDL | 2012 | All | ||||
| In use | Y Explorations | Commercial | C | VHDL–Verilog | 2001 | All | ||||
| In use | PoliMi | Academic | C | VHDL–Verilog | 2012 | All | ||||
| In use | Bluespec | BlueSpec, Inc. | BSD-3 | Bluespec SystemVerilog | SystemVerilog | 2007 | All | |||
| In use | Commercial | C, C++, Fortran | Host executable + FPGA bit file | 2018 | All - multi-core and heterogeneous compute | |||||
| In use | CHC | Altium | Commercial | C subset | VHDL–Verilog | 2008 | All | |||
| In use | CoDeveloper | Impulse Accelerated | Commercial | Impulse-C | VHDL | 2003 | Image streaming | |||
| In use | MathWorks | Commercial | MATLAB, Simulink, Stateflow, Simscape | VHDL, Verilog | 2003 | Control systems, signal processing, wireless, radar, communications, image and computer vision | ||||
| In use | NEC | Commercial | C, BDL, SystemC | VHDL–Verilog | 2004 | All | Cycle, formal | |||
| In use | Siemens EDA | Commercial | C–C++ SystemC | VHDL–Verilog | 2004 | All | ||||
| In use | DWARV | TU. Delft | Academic | C subset | VHDL | 2012 | All | |||
| In use | University of Western Brittany | Academic | C, C++ | VHDL | 2010 | DSP | ||||
| In use | Lombiq Technologies | BSD-3 | C#, C++, F#,... | VHDL | 2015 | .NET | ||||
| In use | FPGA Cores | Commercial | C, C++ | VHDL–Verilog | 2019 | All | ||||
| In use | Intel FPGA | Commercial | C, C++ | Verilog | 2017 | All | ||||
| In use | LegUp Computing | Commercial | C, C++ | Verilog | 2015 | All | ||||
| In use | University of Toronto | Academic | C | Verilog | 2010 | All | ||||
| In use | MaxCompiler | Maxeler | Commercial | MaxJ | RTL | 2010 | Data-flow analysis | |||
| In use | Jacquard Comp. | Commercial | C subset | VHDL | 2010 | Streaming | ||||
| In use | Symphony C | Synopsys | Commercial | C, C++ | VHDL–Verilog, SystemC | 2010 | All | |||
| In use | Xilinx | Commercial | C–C++ SystemC | VHDL–Verilog, SystemC | 2013 | All | ||||
| In use | University of Cambridge | Academic | C# | Verilog | 2008 | .NET | ||||
| In use | CHiMPS | University of Washington | Academic | C | VHDL | 2008 | All | |||
| In use | gcc2verilog | Korea University | Academic | C | Verilog | 2011 | All | |||
| In use | Ajax Compilers | Commercial | C/NAC | VHDL | 2012 | All | ||||
| In use | University of Illinois Urbana-Champaign | Academic | C | Verilog | 2013 | All | ? | ? | ||
| In use | Trident | Los Alamos NL | Academic | C subset | VHDL | 2007 | Scientific | |||
| Aban- doned | AccelDSP | Xilinx | Commercial | MATLAB | VHDL–Verilog | 2006 | DSP | |||
| Aban- doned | C2H | Altera | Commercial | C | VHDL–Verilog | 2006 | All | |||
| Aban- doned | CtoVerilog | University of Haifa | Academic | C | Verilog | 2008 | All | |||
| Aban- doned | DEFACTO | University South Cailf. | Academic | C | RTL | 1999 | DSE | |||
| Aban- doned | Garp | University of California, Berkeley | Academic | C subset | bitstream | 2000 | Loop | |||
| Aban- doned | MATCH | Northwest University | Academic | MATLAB | VHDL | 2000 | Image | |||
| Aban- doned | Napa-C | Sarnoff Corp. | Academic | C subset | VHDL–Verilog | 1998 | Loop | |||
| Aban- doned | PipeRench | Carnegie Mellon University | Academic | DIL | bistream | 2000 | Stream | |||
| Aban- doned | SA-C | University of Colorado | Academic | SA-C | VHDL | 2003 | Image | |||
| Aban- doned | SeaCucumber | Brigham Young University | Academic | Java | EDIF | 2002 | All | |||
| Aban- doned | SPARK | University of California, Irvine | Academic | C | VHDL | 2003 | Control |
- from EPFL/ETH Zurich
- MATLAB HDL Coder from Mathworks
- HLS-QSP from CircuitSutra Technologies
- C-to-Silicon from Cadence Design Systems
- Concurrent Acceleration from Concurrent EDA
- Symphony C Compiler from Synopsys
- QuickPlay from PLDA
- PowerOpt from ChipVision
- Cynthesizer from Forte Design Systems
- Catapult C from Calypto Design Systems, part of Mentor Graphics as of 2015, September 16. In November 2016 Siemens announced plans to acquire Mentor Graphics, Mentor Graphics became styled as "Mentor, a Siemens Business". In January 2021, the legal merger of Mentor Graphics with Siemens was completed - merging into the Siemens Industry Software Inc legal entity. Mentor Graphics' name was changed to Siemens EDA, a division of Siemens Digital Industries Software.
- PipelineC
- CyberWorkBench from NEC
- Mega Hardware
- C2R from CebaTech
- CoDeveloper from Impulse Accelerated Technologies
- HercuLeS by Nikolaos Kavvadias
- Program In/Code Out from Synfora, acquired by Synopsys in June 2010
- xPilot from University of California, Los Angeles
- Vsyn from vsyn.ru
- ngDesign from SynFlow