SystemVerilog Support
The Efinity® software supports the following SystemVerilog constructs:
| Data Type | Status |
|---|---|
| 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 |
| 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 querying functions | Supported |
| Unpacked unions | Supported |
| Tagged unions | Not Supported |
| 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 |
| 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 | Supported |
| Operators and Expressions | |
| $error, $warning, $info | Supported only within initial blocks, and can only be used to evaluate constant expressions such as parameters. Can be called from a generate block in SystemVerilog 2009. |
| 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 | Supported |
| Set membership operator | Supported |
| Procedural Programming Statement | |
| Loop statements | Supported |
| unique-if, unique0-if, and priority-if | Supported |
| Assert Statements | Supported |
| Jump statements | Supported |
| Pattern matching conditional statements | Supported |
| unique-case, unique0-case, and priority-case | Supported |
| Tasks | |
| Static and automatic tasks | Supported |
| Functions | |
| Return values and void functions | Supported |
| Static and Automatic function | Supported |
| Constant function | Supported |
| Virtual functions | 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 | Supported |
| Compiler Directives | |
| Compiler directives | Supported |
| Modules and Hierarchy | |
| Module instantiation syntax | Supported |
| Member selects | Supported |
| Overriding module parameters | Supported |
| Top-level modules and $root | Supported |
| Binding auxiliary code to scopes or instances | Supported |
| Hierarchical names | Partially Supported. See Hierarchical Names Support for details. |
| Interfaces | |
| Interface syntax | Supported |
| Modport expressions | Supported |
| Parameterized interfaces | Supported |
| Ports in interfaces | Supported |
| Array of interfaces | Supported |
| Clocking blocks and modports | Supported |
| Dynamic arrays | Not Supported |
| Example of exporting tasks and functions | Not Supported |
| Example of multiple task exports | Not Supported |
| Nested interface | Supported |
| Virtual interfaces | Supported |
| Packages | |
| Package declarations | Supported |
| Referencing data in packages | Supported |
| Generate Constructs | |
| Generate constructs | Supported |
| Config Statements | |
| config statements | Supported |
| Classes | |
| 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 |
| Virtual classes | Supported |
| Abstract classes | Supported |
| Assignment with base class object | Not Supported |
| Object comparison with NULL | Not Supported |