Is Real Data Type Synthesizable in SystemVerilog?


Heather Bennett

Is Real Data Type Synthesizable in SystemVerilog?

The real data type in SystemVerilog is used to represent floating-point numbers. It is a non-synthesizable data type, meaning it cannot be directly synthesized into hardware. However, there are ways to work with real numbers in a synthesizable manner by using fixed-point representation or implementing custom floating-point arithmetic.

Fixed-Point Representation

Fixed-point representation is a technique used to approximate real numbers using integers. It involves scaling the values by a factor of 2^n, where n is an integer representing the number of fractional bits. By doing so, real numbers can be represented as integers and operate within the limitations of hardware resources.

To use fixed-point representation in SystemVerilog, you can define a custom data type and perform arithmetic operations using scaled integer values. This allows you to work with real numbers in a synthesizable manner while sacrificing some precision.


typedef logic [15:0] fixed_point_t;

function fixed_point_t float_to_fixed(real value);
    return value * (1 << 8); // Scale by 2^8

function real fixed_to_float(fixed_point_t value);
    return value / (1 << 8); // Unscale by 2^8

Custom Floating-Point Arithmetic

If precision is crucial and fixed-point representation is not sufficient, you can implement custom floating-point arithmetic operations in SystemVerilog. This involves designing custom hardware modules that perform arithmetic operations according to the IEEE 754 floating-point standard.

By designing your own floating-point units, you have full control over the precision and functionality of the operations. However, this approach requires extensive knowledge of floating-point arithmetic and hardware design.


While the real data type in SystemVerilog is non-synthesizable, there are ways to work with real numbers in a synthesizable manner. Fixed-point representation provides a simple approach for approximating real numbers using integers.

If precision is crucial, custom floating-point arithmetic can be implemented to achieve the desired level of accuracy. It's important to understand the limitations and trade-offs of each approach when dealing with real numbers in a hardware description language like SystemVerilog.

Discord Server - Web Server - Private Server - DNS Server - Object-Oriented Programming - Scripting - Data Types - Data Structures

Privacy Policy