High-Level Synthesis

What Is High-Level Synthesis?

High-level synthesis is the process of converting a high-abstraction-level description of a design to a register-transfer-level (RTL) description for input to traditional ASIC and FPGA implementation workflows. This high-level design description can be expressed in high-level languages such as C, C++, SystemC™, or MATLAB®, or graphical environments such as Simulink®. High-level synthesis tools use these as forms of design entry, and then synthesize—or generate—synthesizable Verilog® or VHDL® from them for use in ASIC or FPGA designs.

Working at a high level of abstraction lets hardware designers focus on developing the functionality in the context of a hardware architecture that meets their project requirements. With high-level synthesis, hardware designers can focus at a high level without implementation detail. This enables easy adjustment to changes, reuse across projects, and more productive functional verification.

Since many ASIC and FPGA designs start as algorithms in MATLAB and Simulink, these are natural environments to perform design and verification prior to high-level synthesis.

High-level synthesis involves the specification of some hardware architecture detail, such as parallelism, some notion of timing where appropriate, and hardware data types, which are usually fixed point. Many high-level synthesis users rely on graphical environments such as Simulink to visualize the architecture and data flow. Some high-level synthesis offerings such as HDL Coder™ offer automatic fixed-point conversion or even RTL implementation of native floating-point operations.

HDL Coder supports two types of high-level synthesis workflows:

  • RTL code generation: HDL Coder supports generation of synthesizable Verilog and VHDL from MATLAB functions or Simulink subsystems. The generated RTL can then be synthesized using either FPGA or ASIC synthesis tools.
  • SystemC code generation: HDL Coder supports the generation of synthesizable SystemC from MATLAB functions. (SystemC code generation from Simulink subsystems is not supported.) The generated SystemC can serve as an input to Cadence® Stratus™ HLS, a high-level synthesis tool that is widely used in ASIC design. Through the integration of Stratus HLS with the Genus logic synthesis solution and the Joules RTL power solution, designers get early visibility on the Power-Performance-Area of implementations.

ASIC and FPGA design teams can use several MathWorks products in high-level synthesis workflows:

  • HDL Coder to automatically generate synthesizable Verilog or VHDL code from Simulink and MATLAB for implementing hardware designs
  • Fixed-Point Designer™ to analyze floating-point simulations, propose fixed-point data types to accommodate the precision and ranges seen during simulation, and manage the process of applying proposed or adjusted fixed-point types
  • HDL Verifier™ to verify that HDL implementations from high-level synthesis—either in RTL or as netlists—are functionally correct implementations of the MATLAB code or Simulink models that describe algorithms
  • HDL toolboxes for deep learning, signal processing, vision, and wireless communications, providing design teams with many popular application-specific building blocks for implementation in hardware
  • Simulink verification, validation, and test products to add test suite automation, formal verification, coverage, and requirements validation to high-level design and verification

See also: HDL Coder, HDL Verifier, Fixed-Point Designer, Deep Learning HDL Toolbox, DSP HDL Toolbox, Vision HDL Toolbox, Wireless HDL Toolbox