Skip to content
Martin Povišer edited this page Feb 6, 2026 · 5 revisions

The primary reference for SystemVerilog, the Language Reference Manual (LRM), defines syntax and simulation semantics. It does not define which parts of the language are synthesizable, nor does it define the expected deviation of synthesis semantics from simulation semantics. On these questions yosys-slang does not follow a formal specification but aims for compatibility with industrial synthesis tools.

The table below lists select sections of IEEE 1800-2017 and reports the status of support in yosys-slang. Features listed as unsupported or partially supported are considered synthesizable and in scope for future yosys-slang development.

The table is under construction.

Section Status Note
3. Design and verification building blocks
3.3 Modules supported
3.4 Programs non-synthesizable
3.5 Interfaces supported TODO: link to hierarchy page with limitations
3.6 Checkers no data
3.7 Primitives partial support See sections 28 and 29
3.8 Subroutines supported
3.9 Packages supported
3.10 Configurations supported
6. Data types
6.6 Net types partial support Net types wand wor triand trior tri0 tri1 trireg supply0 supply1 unsupported
interconnect unsupported
6.7 Net declarations supported
6.8 Variable declarations supported
6.9 Vector declarations supported
6.10 Implicit declarations supported
6.11 Integer data types supported
6.12 Real, shortreal, and realtime data types non-synthesizable Supported in constant functions. See #282 tracking support in parameters and attributes
6.13 Void data type supported
6.14 Chandle data type non-synthesizable
6.15 Class no data
6.16 String data type non-synthesizable Supported in constant functions
6.17 Event data type non-synthesizable
6.18 User-defined types supported
6.19 Enumerations partial support
6.20 Constants partial support References to const unsupported, see #93
6.21 Scope and lifetime supported
6.22 Type compatibility supported
6.23 Type operator supported
6.24 Casting supported $cast non-synthesizable
6.25 Parameterized data types supported
7. Aggregate data types
7.2 Structures supported
7.3 Unions unsupported
7.4 Packed and unpacked arrays supported
7.5 Dynamic arrays non-synthesizable Supported in constant functions
7.6 Array assignments supported
7.7 Arrays as arguments to subroutines supported
7.8 Associative arrays non-synthesizable Supported in constant functions
7.9 Associative array methods non-synthesizable Supported in constant functions
7.10 Queues non-synthesizable Supported in constant functions
7.11 Array querying functions unsupported Supported in constant functions
7.12 Array manipulation methods unsupported Supported in constant functions
8. Classes no data
8.1 General no data
8.2 Overview no data
8.3 Syntax no data
8.4 Objects (class instance) no data
8.5 Object properties and object parameter data no data
8.6 Object methods no data
8.7 Constructors no data
8.8 Typed constructor calls no data
8.9 Static class properties no data
8.10 Static methods no data
8.11 This no data
8.12 Assignment, renaming, and copying no data
8.13 Inheritance and subclasses no data
8.14 Overridden members no data
8.15 Super no data
8.16 Casting no data
8.17 Chaining constructors no data
8.18 Data hiding and encapsulation no data
8.19 Constant class properties no data
8.20 Virtual methods no data
8.21 Abstract classes and pure virtual methods no data
8.22 Polymorphism: dynamic method lookup no data
8.23 Class scope resolution operator :: no data
8.24 Out-of-block declarations no data
8.25 Parameterized classes no data
8.26 Interface classes no data
8.27 Typedef class no data
8.28 Classes and structures no data
8.29 Memory management no data
9. Processes no data
9.1 General no data
9.2 Structured procedures no data
9.3 Block statements no data
9.4 Procedural timing controls no data
9.5 Process execution threads no data
9.6 Process control no data
9.7 Fine-grain process control no data
10. Assignment statements no data
10.1 General no data
10.2 Overview no data
10.3 Continuous assignments no data
10.4 Procedural assignments no data
10.5 Variable declaration assignment (variable initialization) no data
10.6 Procedural continuous assignments no data
10.7 Assignment extension and truncation no data
10.8 Assignment-like contexts no data
10.9 Assignment patterns no data
10.10 Unpacked array concatenation no data
10.11 Net aliasing no data
11. Operators and expressions no data
11.1 General no data
11.2 Overview no data
11.3 Operators no data
11.4 Operator descriptions no data
11.5 Operands no data
11.6 Expression bit lengths no data
11.7 Signed expressions no data
11.8 Expression evaluation rules no data
11.9 Tagged union expressions and member access no data
11.10 String literal expressions no data
11.11 Minimum, typical, and maximum delay expressions no data
11.12 Let construct no data
12. Procedural programming statements no data
12.1 General no data
12.2 Overview no data
12.3 Syntax no data
12.4 Conditional if–else statement no data
12.5 Case statement no data
12.6 Pattern matching conditional statements no data
12.7 Loop statements no data
12.8 Jump statements no data
13. Tasks and functions (subroutines) no data
13.1 General no data
13.2 Overview no data
13.3 Tasks no data
13.4 Functions no data
13.5 Subroutine calls and argument passing no data
13.6 Import and export functions no data
13.7 Task and function names no data
13.8 Parameterized tasks and functions no data
14. Clocking blocks no data
14.1 General no data
14.2 Overview no data
14.3 Clocking block declaration no data
14.4 Input and output skews no data
14.5 Hierarchical expressions no data
14.6 Signals in multiple clocking blocks no data
14.7 Clocking block scope and lifetime no data
14.8 Multiple clocking blocks example no data
14.9 Interfaces and clocking blocks no data
14.10 Clocking block events no data
14.11 Cycle delay: ## no data
14.12 Default clocking no data
14.13 Input sampling no data
14.14 Global clocking no data
14.15 Synchronous events no data
14.16 Synchronous drives no data
15. Interprocess synchronization and communication no data
15.1 General no data
15.2 Overview no data
15.3 Semaphores no data
15.4 Mailboxes no data
15.5 Named events no data
16. Assertions no data
16.1 General no data
16.2 Overview no data
16.3 Immediate assertions no data
16.4 Deferred assertions no data
16.5 Concurrent assertions overview no data
16.6 Boolean expressions no data
16.7 Sequences no data
16.8 Declaring sequences no data
16.9 Sequence operations no data
16.10 Local variables no data
16.11 Calling subroutines on match of a sequence no data
16.12 Declaring properties no data
16.13 Multiclock support no data
16.14 Concurrent assertions no data
16.15 Disable iff resolution no data
16.16 Clock resolution no data
16.17 Expect statement no data
16.18 Clocking blocks and concurrent assertions no data
17. Checkers no data
17.1 Overview no data
17.2 Checker declaration no data
17.3 Checker instantiation no data
17.4 Context inference no data
17.5 Checker procedures no data
17.6 Covergroups in checkers no data
17.7 Checker variables no data
17.8 Functions in checkers no data
17.9 Complex checker example no data
18. Constrained random value generation no data
18.1 General no data
18.2 Overview no data
18.3 Concepts and usage no data
18.4 Random variables no data
18.5 Constraint blocks no data
18.6 Randomization methods no data
18.7 In-line constraints—randomize() with no data
18.8 Disabling random variables with rand_mode() no data
18.9 Controlling constraints with constraint_mode() no data
18.10 Dynamic constraint modification no data
18.11 In-line random variable control no data
18.12 Randomization of scope variables—std::randomize() no data
18.13 Random number system functions and methods no data
18.14 Random stability no data
18.15 Manually seeding randomize no data
18.16 Random weighted case—randcase no data
18.17 Random sequence generation—randsequence no data
19. Functional coverage no data
19.1 General no data
19.2 Overview no data
19.3 Defining the coverage model: covergroup no data
19.4 Using covergroup in classes no data
19.5 Defining coverage points no data
19.6 Defining cross coverage no data
19.7 Specifying coverage options no data
19.8 Predefined coverage methods no data
19.9 Predefined coverage system tasks and system functions no data
19.10 Organization of option and type_option members no data
19.11 Coverage computation no data
20. Utility system tasks and system functions no data
20.1 General no data
20.2 Simulation control system tasks no data
20.3 Simulation time system functions no data
20.4 Timescale system tasks no data
20.5 Conversion functions no data
20.6 Data query functions no data
20.7 Array query functions no data
20.8 Math functions no data
20.9 Bit vector system functions no data
20.10 Severity tasks no data
20.11 Elaboration system tasks no data
20.12 Assertion control system tasks no data
20.13 Sampled value system functions no data
20.14 Coverage system functions no data
20.15 Probabilistic distribution functions no data
20.16 Stochastic analysis tasks and functions no data
20.17 Programmable logic array modeling system tasks no data
20.18 Miscellaneous tasks and functions no data
21. Input/output system tasks and system functions no data
21.1 General no data
21.2 Display system tasks no data
21.3 File input/output system tasks and system functions no data
21.4 Loading memory array data from a file no data
21.5 Writing memory array data to a file no data
21.6 Command line input no data
21.7 Value change dump (VCD) files no data
22. Compiler directives no data
22.1 General no data
22.2 Overview no data
22.3 `resetall no data
22.4 `include no data
22.5 define, undef, and `undefineall no data
22.6 ifdef, else, elsif, endif, `ifndef no data
22.7 `timescale no data
22.8 `default_nettype no data
22.9 unconnected_drive and nounconnected_drive no data
22.10 celldefine and endcelldefine no data
22.11 `pragma no data
22.12 `line no data
22.13 __FILE__ and LINE no data
22.14 begin_keywords, end_keywords no data
23. Modules and hierarchy no data
23.1 General no data
23.2 Module definitions no data
23.3 Module instances (hierarchy) no data
23.4 Nested modules no data
23.5 Extern modules no data
23.6 Hierarchical names no data
23.7 Member selects and hierarchical names no data
23.8 Upwards name referencing no data
23.9 Scope rules no data
23.10 Overriding module parameters no data
23.11 Binding auxiliary code to scopes or instances no data
24. Programs no data
24.1 General no data
24.2 Overview no data
24.3 The program construct no data
24.4 Eliminating testbench races no data
24.5 Blocking tasks in cycle/event mode no data
24.6 Programwide space and anonymous programs no data
24.7 Program control tasks no data
25. Interfaces no data
25.1 General no data
25.2 Overview no data
25.3 Interface syntax no data
25.4 Ports in interfaces no data
25.5 Modports no data
25.6 Interfaces and specify blocks no data
25.7 Tasks and functions in interfaces no data
25.8 Parameterized interfaces no data
25.9 Virtual interfaces no data
25.10 Access to interface objects no data
26. Packages no data
26.1 General no data
26.2 Package declarations no data
26.3 Referencing data in packages no data
26.4 Using packages in module headers no data
26.5 Search order rules no data
26.6 Exporting imported names from packages no data
26.7 The std built-in package no data
27. Generate constructs no data
27.1 General no data
27.2 Overview no data
27.3 Generate construct syntax no data
27.4 Loop generate constructs no data
27.5 Conditional generate constructs no data
27.6 External names for unnamed generate blocks no data
28. Gate-level and switch-level modeling no data
28.1 General no data
28.2 Overview no data
28.3 Gate and switch declaration syntax no data
28.4 and, nand, nor, or, xor, and xnor gates no data
28.5 buf and not gates no data
28.6 bufif1, bufif0, notif1, and notif0 gates no data
28.7 MOS switches no data
28.8 Bidirectional pass switches no data
28.9 CMOS switches no data
28.10 pullup and pulldown sources no data
28.11 Logic strength modeling no data
28.12 Strengths and values of combined signals no data
28.13 Strength reduction by nonresistive devices no data
28.14 Strength reduction by resistive devices no data
28.15 Strengths of net types no data
28.16 Gate and net delays no data
29. User-defined primitives no data
29.1 General no data
29.2 Overview no data
29.3 UDP definition no data
29.4 Combinational UDPs no data
29.5 Level-sensitive sequential UDPs no data
29.6 Edge-sensitive sequential UDPs no data
29.7 Sequential UDP initialization no data
29.8 UDP instances no data
29.9 Mixing level-sensitive and edge-sensitive descriptions no data
29.10 Level-sensitive dominance no data
30. Specify blocks no data
30.1 General no data
30.2 Overview no data
30.3 Specify block declaration no data
30.4 Module path declarations no data
30.5 Assigning delays to module paths no data
30.6 Mixing module path delays and distributed delays no data
30.7 Detailed control of pulse filtering behavior no data
31. Timing checks no data
31.1 General no data
31.2 Overview no data
31.3 Timing checks using a stability window no data
31.4 Timing checks for clock and control signals no data
31.5 Edge-control specifiers no data
31.6 Notifiers: user-defined responses to timing violations no data
31.7 Enabling timing checks with conditioned events no data
31.8 Vector signals in timing checks no data
31.9 Negative timing checks no data
32. Backannotation using the standard delay format no data
32.1 General no data
32.2 Overview no data
32.3 The SDF annotator no data
32.4 Mapping of SDF constructs to SystemVerilog no data
32.5 Multiple annotations no data
32.6 Multiple SDF files no data
32.7 Pulse limit annotation no data
32.8 SDF to SystemVerilog delay value mapping no data
32.9 Loading timing data from an SDF file no data
33. Configuring the contents of a design no data
33.1 General no data
33.2 Overview no data
33.3 Libraries no data
33.4 Configurations no data
33.5 Using libraries and configs no data
33.6 Configuration examples no data
33.7 Displaying library binding information no data
33.8 Library mapping examples no data
34. Protected envelopes no data
34.1 General no data
34.2 Overview no data
34.3 Processing protected envelopes no data
34.4 Protect pragma directives no data
34.5 Protect pragma keywords no data

Clone this wiki locally