SystemVerilog Constructs - 2024.1 English

Vivado Design Suite User Guide: Synthesis (UG901)

Document ID
Release Date
2024.1 English

The following table lists the SystemVerilog constructs. Constructs that are not supported are shaded in gray.

Table 1. SystemVerilog Constructs
Construct Status
Data type
Singular and aggregate types Supported
Nets and variables Supported
Variable declarations Supported
Vector declarations Supported
2-state (two-value) and 4-state (four-value) data types Supported
Signed and unsigned integer types Supported
User-defined types Supported
Enumerations Supported
Defining new data types as enumerated types Supported
Enumerated type ranges Supported
Type checking Supported
Enumerated types in numerical expressions Supported
Enumerated type methods Supported
Type parameters Supported
Type operator Supported
Cast operator Supported
Bitstream casting Supported
Const constants Supported
$cast dynamic casting Not Supported
Real, shortreal, and realtime data types Supported
Aggregate data types
Structures Supported
Packed/Unpacked structures Supported
Assigning to structures Supported
Packed arrays Supported
Unpacked arrays Supported
Operations on arrays Supported
Multidimensional arrays Supported
Indexing and slicing of arrays Supported
Array assignments Supported
Arrays as arguments to subroutines Supported
Array manipulation methods (those that do not return queue type) Not Supported
Array querying functions Not Supported
Unpacked unions Supported
Tagged unions Not Supported(1)
Packed unions Supported
Combinational logic always_comb procedure Supported
Implicit always_comb sensitivities Supported
Latched logic always_latch procedure Supported
Sequential blocks Supported
Sequential logic always_ff procedure Supported
Iff event qualifier Supported
Aliases Supported
Conditional event controls Not Supported
Parallel blocks Not Supported
Procedural timing controls Not Supported
Sequence events Not Supported
Assignment statement
The continuous assignment statement Supported
Variable declaration assignment (variable initialization) Supported
Assignment-like contexts Supported
Array assignment patterns Supported
Structure assignment patterns Supported
Unpacked array concatenation Supported
Net aliasing Not Supported
Operators and expressions
$error, $warning, $info Supported only within initial blocks, and can only be used to evaluate constant expressions; for example, parameters.
Aggregate expressions Supported
Arithmetic expressions with unsigned and signed types Supported
Assignment operators Supported
Assignment within an expression Supported
Concatenation operators Supported
Constant expressions Supported
Increment and decrement operators Supported
Operations on logic (4-state) and bit (2-state) types Supported
Wildcard equality operators Supported
Concatenation of stream_expressions Supported
Operators with real operands Not Supported
Re-ordering of the generic stream Not Supported
Set membership operator Not Supported
Streaming concatenation as an assignment target (unpack) Supported
Streaming dynamically sized data Not Supported
Procedural programming statement
Case statement violation reports and multiple processes Supported
Loop statements Supported
Unique-if, unique0-if and priority-if Supported
Assert Statements Not Supported
If statement violation reports and multiple processes Not Supported
Jump statements Not Recommended
Pattern matching conditional statements Not Supported
Set membership case statement Not Supported
unique-case, unique0-case, and priority-case Supported
Violation reports generated by unique-if, unique0-if, and priority-if constructs Not Supported
Coverage control functions Not Supported
Static and Automatic task Supported
Tasks memory usage and concurrent activation Not Supported
Return values and void functions Supported
Static and Automatic function Supported
Constant function Supported
Background process spawned by function call Not Supported
Virtual Functions Not Supported
Subroutine calls and argument passing
Argument binding by name Supported
Default argument value Supported
Pass by reference Supported
Pass by value Supported
Optional argument list Not Supported
Compiler Directives
Modules and Hierarchy
Default port values Supported
External modules Supported
Module instantiation syntax Supported
Member selects Supported
Overriding module parameters Supported
Top-level modules and $root Supported
Binding auxiliary code to scopes or instances Not Supported
Hierarchical names Supported
Upwards name referencing Not Supported
Interface syntax Supported
Modport expressions Supported
Parameterized interfaces Supported
Ports in interfaces Supported
Array of interface Supported
Clocking blocks and modports Not Supported
Dynamic Arrays Not Supported
Example of exporting tasks and functions Not Supported
Example of multiple task exports Not Supported
Interfaces and specify blocks Not Supported
Nested interface Not Supported
Virtual interfaces Not Supported
Package declarations Supported
Referencing data in packages Supported
Using packages in module headers Supported
Exporting imported names from packages Supported
The std built-in package Not Supported
Generate constructs
config statements
Instances Supported
Member and method access Supported
Constructors Supported
Static class member and methods Supported
Access using 'this' and 'super' Supported
Object assignment Supported
Inheritance Supported
Data hiding and encapsulation Supported
Scope and resolution operator (::) Supported
Nested classes Supported
Objects inside structs Supported
Virtual Classes Not Supported
Abstract classes Not Supported
Assignment with base class object Not Supported
Object comparison with NULL Not Supported
  1. If used, tagged is ignored, and the tool produces a warning message.