-
Notifications
You must be signed in to change notification settings - Fork 54
Feature Support
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. Feel free to contribute by filling missing data or refining existing entries.
| 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 |