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 interprets an algorithmic description of a desired behavior and creates digital hardware that implements that behavior. Synthesis begins with a high-level specification of the problem, where behavior is generally decoupled from e.g. 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 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 2004, there emerged a number of next generation commercial high-level synthesis products which provided synthesis of circuits specified at C level to a register transfer level specification. Synthesizing from the popular C language offered accrued abstraction, expressive power and coding flexibility while tying with existing flows and legacy models. This language shift, combined with other technical advances was a key enabler for successful industrial usage. High-level synthesis tools are used for complex ASIC and FPGA design.
High-level synthesis was primarily adopted in Japan and Europe in the early years. As of late 2008, there was an emerging adoption in the United States.

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.
In general, an algorithm can be performed over many clock cycles with few hardware resources, or over fewer clock cycles using a larger number of ALUs, registers and memories. Correspondingly, from one algorithmic description, a variety of hardware microarchitectures can be generated by an HLS compiler according to the directives given to the tool. This is the same trade off of execution speed for hardware complexity as seen when a given program is run on conventional processors of differing performance, yet all running at roughly the same clock frequency.

Architectural constraints

Synthesis constraints for the architecture can automatically be applied based on the design analysis. These constraints can be broken into
Interface Synthesis refers to the ability to accept pure C/C++ description as its input, then use automated interface synthesis technology to control the timing and communications protocol on the design interface. This enables interface analysis and exploration of a full range of hardware interface options such as streaming, single- or dual-port RAM plus various handshaking mechanisms. With interface synthesis the designer does not embed interface protocols in the source description. Examples might be: direct connection, one line, 2 line handshake, FIFO.

Vendors

Data reported on recent Survey
StatusCompilerOwnerLicenseInputOutputYearDomainTest
Bench
FPFixP
In UseTIMA Lab.AcademicC subsetVHDL2012AllYesNoNo
In UseY ExplorationsCommercialCVHDL/Verilog2001AllYesNoYes
In UsePoliMiAcademicCVHDL/Verilog2012AllYesYesNo
In UseBluespecBlueSpec Inc.CommercialBSVSystemVerilog2007AllNoNoNo
In UseCHCAltiumCommercialC subsetVHDL/Verilog2008AllNoYesYes
In UseCoDeveloperImpulse AcceleratedCommercialImpulse-CVHDL2003Image
Streaming
YesYesNo
In UseMathWorksCommercialMATLAB, Simulink, Stateflow, SimscapeVHDL / Verilog2003Control Systems, Signal Processing, Wireless, Radar, Communications, Image and Computer VisionYesYesYes
In UseStratusCadenceCommercialC/C++ SystemCRTL2015AllYesNoYes
In UseCyberWorkbenchNECCommercialBDL, SystemCVHDL/Verilog2011AllCycle/
Formal
YesYes
In UseCatapultMentor
CommercialC, C++, SystemCVHDL/Verilog2004StreamingNoNoYes
In UseDWARVTU. DelftAcademicC subsetVHDL2012AllYesYesYes
In UseU. BretagneAcademicC/C++VHDL2010DSPYesNoYes
In UseLombiq TechnologiesCommercialC#/C++/F#...
VHDL2015.NETYesYesYes
In UseFPGA CoresCommercialC/C++VHDL/Verilog2019AllYesNoNo
In UseIntel FPGA CommercialC/C++Verilog2017AllYesYesYes
In UseLegUp ComputingCommercialC/C++Verilog2017AllYesYesYes
In UseU. TorontoAcademicCVerilog2011AllYesYesNo
In UseMaxCompilerMaxelerCommercialMaxJRTL2010DataFlowNoYesNo
In UseJacquard Comp.CommercialC subsetVHDL2010StreamingNoYesNo
In UseSymphony CSynopsysCommercialC/C++VHDL/Verilog/
SystemC
2010AllYesNoYes
In Use
XilinxCommercialC/C++/SystemCVHDL/Verilog/
SystemC
2013AllYesYesYes
In UseU. CambridgeAcademicC#Verilog2008.NETNoYesYes
In UseCHiMPSU. WashingtonAcademicCVHDL2008AllNoNoNo
In Usegcc2verilogU. KoreaAcademicCVerilog2011AllNoNoNo
In UseAjax CompilersCommercialC/NACVHDL2012AllYesYesYes
In UseU. IllinoisAcademicCVerilog2013AllYes??
In UseTridentLos Alamos NLAcademicC subsetVHDL2007ScientificNoYesNo
Aban-
doned
AccelDSPXilinxCommercialMATLABVHDL/Verilog2006DSPYesYesYes
Aban-
doned
C2HAlteraCommercialCVHDL/Verilog2006AllNoNoNo
Aban-
doned
CtoVerilogU. HaifaAcademicCVerilog2008AllNoNoNo
Aban-
doned
DEFACTOU. South Cailf.AcademicCRTL1999DSENoNoNo
Aban-
doned
GarpU. BerkeleyAcademicC subsetbitstream2000LoopNoNoNo
Aban-
doned
MATCHU. NorthwestAcademicMATLABVHDL2000ImageNoNoNo
Aban-
doned
Napa-CSarnoff Corp.AcademicC subsetVHDL/Verilog1998LoopNoNoNo
Aban-
doned
PipeRenchU.Carnegie M.AcademicDILbistream2000StreamNoNoNo
Aban-
doned
SA-CU. ColoradoAcademicSA-CVHDL2003ImageNoNoNo
Aban-
doned
SeaCucumberU. Brigham Y.AcademicJavaEDIF2002AllNoYesYes
Aban-
doned
SPARKU. Cal. IrvineAcademicCVHDL2003ControlNoNoNo