Decision guide
HLS feasibility study
Decide whether a block is a good HLS candidate before committing to implementation.
A practical introduction to HLS: how C++ becomes RTL, why it changes the economics of chip design, and when to use it.
High-Level Synthesis (HLS) is a hardware design methodology in which digital circuits are described in a high-level language — typically C++ or SystemC — and automatically compiled into register-transfer level (RTL) code such as Verilog or VHDL. Instead of hand-writing the clock-by-clock behaviour of a circuit, the designer writes an untimed algorithmic description, and the HLS tool decides how to schedule operations onto clock cycles and hardware resources under the designer's constraints.
The result is the same kind of RTL that a hardware engineer would write by hand, ready for standard logic synthesis and place-and-route flows targeting an ASIC (application-specific integrated circuit) or FPGA (field-programmable gate array).
From algorithm to hardware
An HLS compiler performs three core transformations on the input C++:
The designer steers these decisions with constraints and directives rather than by rewriting code. The most important ones:
Because these decisions are expressed through code structure and constraints, one verified algorithm can produce several microarchitectures. A filter might use a resource-shared architecture for a cost-sensitive target and more parallel hardware for a throughput-sensitive target. Retargeting still requires technology-specific libraries, interfaces, constraints, and renewed optimisation.
Software integer types often carry more width than a hardware datapath needs, and unnecessary bits can increase area, delay, and power. HLS designs therefore commonly use bit-accurate arbitrary-precision types, such as the ac_int/ac_fixed (Algorithmic C) or ap_int/ap_fixed libraries, so a 12-bit ADC sample can remain 12 bits where the required range and arithmetic permit. Fixed-point conversion and precision analysis — choosing word lengths that meet accuracy requirements at minimum cost — is a core HLS design skill.
| Criterion | Hand-written RTL | High-Level Synthesis |
|---|---|---|
| Source representation | Cycle- and signal-level hardware description | Algorithm and architecture expressed in C++ or SystemC plus constraints |
| Functional simulation | RTL event simulation | Native compiled model for early functional testing, followed by RTL checks |
| Microarchitecture changes | Often require explicit RTL restructuring | Code structure and constraints can generate alternative schedules and resource mappings |
| Design-space exploration | Each alternative is implemented explicitly | Multiple latency, throughput, and resource points can be generated from one functional model |
| Retargeting | Technology-specific timing and implementation work | Re-synthesis is possible, but libraries, interfaces, constraints, and optimisation must be revisited |
| Cycle-exact control logic | Natural fit | Possible but often better left in RTL |
HLS does not remove the need for hardware architecture or RTL sign-off skills. Good results require understanding the hardware implied by the source, constraints, interfaces, memories, and target technology—not merely writing C++ that the tool accepts.
| Tool | Vendor | Typical use |
|---|---|---|
| Catapult HLS | Siemens EDA | ASIC and FPGA; C++/SystemC; widely used in production ASIC flows |
| Stratus HLS | Cadence | ASIC-oriented C++/SystemC synthesis |
| Vitis HLS | AMD (Xilinx) | FPGA and adaptive SoC targets |
| High Level Synthesis Compiler | Altera | FPGA targets in the Quartus ecosystem; formerly the Intel HLS Compiler |
| Bambu | Politecnico di Milano | Open-source academic/research HLS |
| XLS | Google (open source) | Alternative HLS approach with its own DSL |
HLS delivers the biggest advantage on algorithmic, datapath-dominated blocks — designs defined by mathematics rather than by protocol state machines:
Conversely, deeply control-oriented logic with cycle-exact external protocol behaviour, and gate-level hand-optimised datapaths, often remain better served by traditional RTL — a pragmatic project mixes both.
If the boundary or expected benefit is still uncertain, use the HLS feasibility-study framework. For an existing Verilog or VHDL implementation, see the RTL-to-HLS migration guide.
HLS moves a large part of functional verification to the C++ or SystemC model, where a self-checking testbench can compare the design with a trusted reference before synthesis. The generated RTL is then checked with C/RTL co-simulation and, where appropriate, equivalence methods. Standard RTL sign-off—including lint, clock/reset-domain checks, synthesis, timing, and implementation analysis—still applies. See the detailed HLS verification guide.
It can be competitive for suitable datapath-dominated blocks, but there is no universal result. Quality depends on the architecture, coding style, constraints, tool, target technology, and the skill of the designer. Critical designs should be compared with downstream synthesis or implementation evidence.
HLS supports both ASIC and FPGA development. The target libraries, memories, interfaces, timing constraints, and downstream flow differ, so the design must be synthesised and evaluated in the context of the intended technology.
Mainstream commercial HLS tools commonly accept C++ or SystemC and provide bit-accurate integer and fixed-point libraries. Supported language subsets, libraries, and pragmas vary by tool, so portable algorithm code still needs tool-specific integration and optimisation.
First, the C++ or SystemC model is checked with a self-checking testbench and a trusted reference. The generated RTL is then checked with C/RTL co-simulation and, where appropriate, equivalence methods. Normal RTL sign-off such as lint, CDC, synthesis, and timing analysis still applies.
HLS is usually a weaker fit for heavily control-oriented logic with cycle-exact protocol behaviour, asynchronous or mixed-signal circuitry, technology-specific structures, and blocks whose value depends on manual gate-level optimisation. Mixed HLS and RTL is often the pragmatic architecture.
There is no universal multiplier. The benefit depends on the block, starting point, verification burden, tool flow, and team experience. HLS tends to help most when a team can verify the algorithm at C++ level and explore several architectures without manually rewriting RTL.
Videalt helps ASIC and FPGA teams design and verify hardware in C++.