This article has multiple issues. Please help improve it or discuss these issues on the talk page . (Learn how and when to remove these template messages)
|
High-level synthesis (HLS), sometimes referred to as C synthesis, electronic system-level (ESL) 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. [1] [2] [3]
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, [4] 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 (TLM) into a register-transfer level (RTL) design in a hardware description language (HDL), 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. [5]
Hardware can be designed at varying levels of abstraction. The commonly used levels of abstraction are gate level, register-transfer level (RTL), 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. [6] The (RTL) implementations are then used directly in a conventional logic synthesis flow to create a gate-level implementation.
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 [7] and used Verilog or VHDL as input languages. The abstraction level used was partially timed (clocked) 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. [8]
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.[ citation needed ]
In 2006, an efficient and scalable "SDC modulo scheduling" technique was developed on control and data flow graphs [9] and was later extended to pipeline scheduling. [10] This technique uses the integer linear programming formulation. But it shows that the underlying constraint matrix is totally unimodular (after approximating the resource constraints). 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. [11]
The SDC scheduling algorithm was implemented in the xPilot HLS system [12] developed at UCLA, [13] and later licensed to the AutoESL Design Technologies, a spin-off from UCLA. AutoESL was acquired by Xilinx (now part of AMD) in 2011, [11] and the HLS tool developed by AutoESL became the base of Xilinx HLS solutions, Vivado HLS and Vitis HLS, widely used for FPGA designs.
The most common source inputs for high-level synthesis are based on standard languages such as ANSI C/C++, SystemC and MATLAB.
High-level synthesis typically also includes a bit-accurate executable specification as input, since to derive an efficient hardware implementation, additional information is needed on what is an acceptable Mean-Square Error or Bit-Error Rate etc. For example, if the designer starts with an FIR filter written using the "double" floating type, before he can derive an efficient hardware implementation, they need to perform numerical refinement to arrive at a fixed-point implementation. The refinement requires additional information on the level of quantization noise that can be tolerated, the valid input ranges etc. This bit-accurate specification makes the high level synthesis source specification functionally complete. [14] Normally the tools infer from the high level code a Finite State Machine and a Datapath that implement arithmetic operations.
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. [15]
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.
Synthesis constraints for the architecture can automatically be applied based on the design analysis. [5] 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. [16]
Data reported on recent Survey [17]
Status | Compiler | Owner | License | Input | Output | Year | Domain | Test Bench | FP | FixP |
---|---|---|---|---|---|---|---|---|---|---|
In Use | Stratus HLS | Cadence Design Systems | Commercial | C/C++ SystemC | RTL | 2015 | All | Yes | Yes | Yes |
AUGH | TIMA Lab. | Academic | C subset | VHDL | 2012 | All | Yes | No | No | |
eXCite Archived 2019-09-17 at the Wayback Machine | Y Explorations | Commercial | C | VHDL/Verilog | 2001 | All | Yes | No | Yes | |
Bambu | PoliMi | Academic | C | VHDL/Verilog | 2012 | All | Yes | Yes | No | |
Bluespec | BlueSpec Inc. | BSD-3 | BSV | SystemVerilog | 2007 | All | No | No | No | |
QCC | CacheQ Systems, Inc. | Commercial | C/C++/Fortan | Host Executable + FPGA Bit file (SystemVerilog is intermediate) | 2018 | All - multi-core and heterogeneous compute | Yes (C++) | Yes | Yes | |
CHC | Altium | Commercial | C subset | VHDL/Verilog | 2008 | All | No | Yes | Yes | |
CoDeveloper | Impulse Accelerated | Commercial | Impulse-C | VHDL | 2003 | Image Streaming | Yes | Yes | No | |
HDL Coder | MathWorks | Commercial | MATLAB, Simulink, Stateflow, Simscape | VHDL / Verilog | 2003 | Control Systems, Signal Processing, Wireless, Radar, Communications, Image and Computer Vision | Yes | Yes | Yes | |
CyberWorkBench | NEC | Commercial | C, BDL, SystemC | VHDL/Verilog | 2004 | All | Cycle/ Formal | Yes | Yes | |
Catapult | Siemens EDA | Commercial | C, C++, SystemC | VHDL/Verilog | 2004 | All | Yes | Yes | Yes | |
DWARV | TU. Delft | Academic | C subset | VHDL | 2012 | All | Yes | Yes | Yes | |
GAUT | U. Bretagne | Academic | C/C++ | VHDL | 2010 | DSP | Yes | No | Yes | |
Hastlayer | Lombiq Technologies | BSD-3 | C#/C++/F#... (.NET) | VHDL | 2015 | .NET | Yes | Yes | Yes | |
Instant SoC | FPGA Cores | Commercial | C/C++ | VHDL/Verilog | 2019 | All | Yes | No | No | |
Intel High Level Synthesis Compiler | Intel FPGA (Formerly Altera) | Commercial | C/C++ | Verilog | 2017 | All | Yes | Yes | Yes | |
LegUp HLS | LegUp Computing | Commercial | C/C++ | Verilog | 2015 | All | Yes | Yes | Yes | |
LegUp Archived 2020-07-24 at the Wayback Machine | U. Toronto | Academic | C | Verilog | 2010 | All | Yes | Yes | No | |
MaxCompiler | Maxeler | Commercial | MaxJ | RTL | 2010 | DataFlow | No | Yes | No | |
ROCCC | Jacquard Comp. | Commercial | C subset | VHDL | 2010 | Streaming | No | Yes | No | |
Symphony C | Synopsys | Commercial | C/C++ | VHDL/Verilog/ SystemC | 2010 | All | Yes | No | Yes | |
VivadoHLS (formerly AutoPilot from AutoESL [18] ) | Xilinx | Commercial | C/C++/SystemC | VHDL/Verilog/ SystemC | 2013 | All | Yes | Yes | Yes | |
Kiwi | U. Cambridge | Academic | C# | Verilog | 2008 | .NET | No | Yes | Yes | |
CHiMPS | U. Washington | Academic | C | VHDL | 2008 | All | No | No | No | |
gcc2verilog | U. Korea | Academic | C | Verilog | 2011 | All | No | No | No | |
HercuLeS | Ajax Compilers | Commercial | C/NAC | VHDL | 2012 | All | Yes | Yes | Yes | |
Shang | U. Illinois | Academic | C | Verilog | 2013 | All | Yes | ? | ? | |
Trident | Los Alamos NL | Academic | C subset | VHDL | 2007 | Scientific | No | Yes | No | |
Aban- doned | AccelDSP | Xilinx | Commercial | MATLAB | VHDL/Verilog | 2006 | DSP | Yes | Yes | Yes |
C2H | Altera | Commercial | C | VHDL/Verilog | 2006 | All | No | No | No | |
CtoVerilog | U. Haifa | Academic | C | Verilog | 2008 | All | No | No | No | |
DEFACTO | U. South Cailf. | Academic | C | RTL | 1999 | DSE | No | No | No | |
Garp | U. Berkeley | Academic | C subset | bitstream | 2000 | Loop | No | No | No | |
MATCH | U. Northwest | Academic | MATLAB | VHDL | 2000 | Image | No | No | No | |
Napa-C | Sarnoff Corp. | Academic | C subset | VHDL/Verilog | 1998 | Loop | No | No | No | |
PipeRench | U.Carnegie M. | Academic | DIL | bistream | 2000 | Stream | No | No | No | |
SA-C | U. Colorado | Academic | SA-C | VHDL | 2003 | Image | No | No | No | |
SeaCucumber | U. Brigham Y. | Academic | Java | EDIF | 2002 | All | No | Yes | Yes | |
SPARK | U. Cal. Irvine | Academic | C | VHDL | 2003 | Control | No | No | No |
A field-programmable gate array (FPGA) is a type of configurable integrated circuit that can be repeatedly programmed after manufacturing. FPGAs are a subset of logic devices referred to as programmable logic devices (PLDs). They consist of an array of programmable logic blocks with a connecting grid, that can be configured "in the field" to interconnect with other logic blocks to perform various digital functions. FPGAs are often used in limited (low) quantity production of custom-made products, and in research and development, where the higher cost of individual FPGAs is not as important, and where creating and manufacturing a custom circuit wouldn't be feasible. Other applications for FPGAs include the telecommunications, automotive, aerospace, and industrial sectors, which benefit from their flexibility, high signal processing speed, and parallel processing abilities.
VHDL is a hardware description language that can model the behavior and structure of digital systems at multiple levels of abstraction, ranging from the system level down to that of logic gates, for design entry, documentation, and verification purposes. The language was developed for the US military VHSIC program in the 1980s, and has been standardized by the Institute of Electrical and Electronics Engineers (IEEE) as IEEE Std 1076; the latest version of which is IEEE Std 1076-2019. To model analog and mixed-signal systems, an IEEE-standardized HDL based on VHDL called VHDL-AMS has been developed.
In computer engineering, a hardware description language (HDL) is a specialized computer language used to describe the structure and behavior of electronic circuits, most commonly to design ASICs and program FPGAs.
Reconfigurable computing is a computer architecture combining some of the flexibility of software with the high performance of hardware by processing with flexible hardware platforms like field-programmable gate arrays (FPGAs). The principal difference when compared to using ordinary microprocessors is the ability to add custom computational blocks using FPGAs. On the other hand, the main difference from custom hardware, i.e. application-specific integrated circuits (ASICs) is the possibility to adapt the hardware during runtime by "loading" a new circuit on the reconfigurable fabric, thus providing new computational blocks without the need to manufacture and add new chips to the existing system.
Electronic design automation (EDA), also referred to as electronic computer-aided design (ECAD), is a category of software tools for designing electronic systems such as integrated circuits and printed circuit boards. The tools work together in a design flow that chip designers use to design and analyze entire semiconductor chips. Since a modern semiconductor chip can have billions of components, EDA tools are essential for their design; this article in particular describes EDA specifically with respect to integrated circuits (ICs).
SystemC is a set of C++ classes and macros which provide an event-driven simulation interface. These facilities enable a designer to simulate concurrent processes, each described using plain C++ syntax. SystemC processes can communicate in a simulated real-time environment, using signals of all the datatypes offered by C++, some additional ones offered by the SystemC library, as well as user defined. In certain respects, SystemC deliberately mimics the hardware description languages VHDL and Verilog, but is more aptly described as a system-level modeling language.
Formal equivalence checking process is a part of electronic design automation (EDA), commonly used during the development of digital integrated circuits, to formally prove that two representations of a circuit design exhibit exactly the same behavior.
In computer engineering, logic synthesis is a process by which an abstract specification of desired circuit behavior, typically at register transfer level (RTL), is turned into a design implementation in terms of logic gates, typically by a computer program called a synthesis tool. Common examples of this process include synthesis of designs specified in hardware description languages, including VHDL and Verilog. Some synthesis tools generate bitstreams for programmable logic devices such as PALs or FPGAs, while others target the creation of ASICs. Logic synthesis is one step in circuit design in the electronic design automation, the others are place and route and verification and validation.
Hardware acceleration is the use of computer hardware designed to perform specific functions more efficiently when compared to software running on a general-purpose central processing unit (CPU). Any transformation of data that can be calculated in software running on a generic CPU can also be calculated in custom-made hardware, or in some mix of both.
SystemVerilog, standardized as IEEE 1800, is a hardware description and hardware verification language used to model, design, simulate, test and implement electronic systems. SystemVerilog is based on Verilog and some extensions, and since 2008, Verilog is now part of the same IEEE standard. It is commonly used in the semiconductor and electronic design industry as an evolution of Verilog.
Handel-C is a high-level hardware description language aimed at low-level hardware and is most commonly used in programming FPGAs. Handel-C is to hardware design what the first high-level programming languages were to programming CPUs. It is a turing-complete rich subset of the C programming language, with an emphasis on parallel computing.
Electronic system level (ESL) design and verification is an electronic design methodology, focused on higher abstraction level concerns. The term Electronic System Level or ESL Design was first defined by Gartner Dataquest, an EDA-industry-analysis firm, on February 1, 2001. It is defined in ESL Design and Verification as: "the utilization of appropriate abstractions in order to increase comprehension about a system, and to enhance the probability of a successful implementation of functionality in a cost-effective manner."
Jingsheng Jason Cong is a Chinese-born American computer scientist, educator, and serial entrepreneur. He received his B.S. degree in computer science from Peking University in 1985, his M.S. and Ph. D. degrees in computer science from the University of Illinois at Urbana-Champaign in 1987 and 1990, respectively. He has been on the faculty in the Computer Science Department at the University of California, Los Angeles (UCLA) since 1990. Currently, he is a Distinguished Chancellor’s Professor and the director of Center for Domain-Specific Computing (CDSC).
C to HDL tools convert C language or C-like computer code into a hardware description language (HDL) such as VHDL or Verilog. The converted code can then be synthesized and translated into a hardware device such as a field-programmable gate array. Compared to software, equivalent designs in hardware consume less power and execute faster with lower latency, more parallelism and higher throughput. However, system design and functional verification in a hardware description language can be tedious and time-consuming, so systems engineers often write critical modules in HDL and other modules in a high-level language and synthesize these into HDL through C to HDL or high-level synthesis tools.
IP-XACT, also known as IEEE 1685, is an XML format that defines and describes individual, re-usable electronic circuit designs to facilitate their use in creating integrated circuits. IP-XACT was created by the SPIRIT Consortium as a standard to enable automated configuration and integration through tools and evolving into an IEEE standard.
Forte Design Systems, Inc. was a San Jose, CA, based provider of high-level synthesis (HLS) software products, also known as electronic system-level (ESL) synthesis. Forte's main product was Cynthesizer. On February 14, 2014, Forte was acquired by Cadence Design Systems.
Catapult C Synthesis, a commercial electronic design automation product of Mentor Graphics, is a high-level synthesis tool, sometimes called algorithmic synthesis or ESL synthesis. Catapult C takes ANSI C/C++ and SystemC inputs and generates register transfer level (RTL) code targeted to FPGAs and ASICs.
High-level verification (HLV), or electronic system-level (ESL) verification, is the task to verify ESL designs at high abstraction level, i.e., it is the task to verify a model that represents hardware above register-transfer level (RTL) abstract level. For high-level synthesis, HLV is to HLS as functional verification is to logic synthesis.
Vivado Design Suite is a software suite for synthesis and analysis of hardware description language (HDL) designs, superseding Xilinx ISE with additional features for system on a chip development and high-level synthesis. Vivado represents a ground-up rewrite and re-thinking of the entire design flow.
VisualSim Architect is an electronic system-level software for modeling and simulation of electronic systems, embedded software, and semiconductors. VisualSim Architect is a commercial version of the Ptolemy II research project at the University of California Berkeley. The product was first released in 2003. VisualSim is a graphical tool that can be used for performance trade-off analyses using such metrics as bandwidth utilization, application response time, and buffer requirements. It can be used for architectural analysis of algorithms, components, software instructions, and hardware/software partitioning.