SystemVerilog Constructs - SystemVerilog Constructs - 2022.2 English - UG901

Vivado Design Suite User Guide: Synthesis (UG901)

Document ID
UG901
Release Date
2022-11-16
Version
2022.2 English

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

Table 8-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

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

Processes

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

Not Supported

Violation reports generated by unique-if , unique0-if , and priority-if constructs

Not Supported

Tasks

Coverage control functions

Not Supported

Static and Automatic task

Supported

Tasks memory usage and concurrent activation

Not Supported

Functions

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

Supported

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

Not Supported

Binding auxiliary code to scopes or instances

Not Supported

Hierarchical names

Supported (2)

Upwards name referencing

Not Supported

Interfaces

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

Partial support, synthesizable constructs only

Packages

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

Supported

Class

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

Notes:

1. If used, tagged will be ignored and the tool will produce a warning message.

2. The processing for hierarchical names is done post elaboration. Because of this,the connections will not be seen in the elaborated view. They will only start appearing in the post synthesis view.