User Manual
Instructions on how to use the slang tool as an end-user.
Contents
Quick Start
The slang
binary runs a full compilation of given SystemVerilog source files. Eventually it will produce a full simulation binary as output, but for now it serves as a checker of source code syntax, types, and various language rules.
Running it on one or more valid SystemVerilog files will note the top level modules found, and will return zero:
// test1.sv module m; struct { logic a; } s; int i = s.a + 1; initial $display("%d", i); endmodule
> slang test1.sv Top level design units: m Build succeeded: 0 errors, 0 warnings > echo $? 0
Running it on a file with errors will produce nicely formatted diagnostic output:
// test2.sv module m; struct { logic a; } s; int i = s + 1; initial $display("%d", i); endmodule
Top level design units: m ../test2.sv:4:12: error: invalid operands to binary expression ('<unnamed unpacked struct>' and 'int') int i = s + 1; ~ ^ ~ Build failed: 1 error, 0 warnings
Compilation Units
By default slang
treats all input files as separate SystemVerilog compilation units. This is the preferred method both because it keeps the code logically separate (it doesn't require a specific ordering of files on the command line in order to compile correctly) and because internally the tool can parse files in parallel if it knows they don't have to be parsed in a specific order.
If you have an older project where file ordering does matter, you can pass the --single-unit
option to have all input files treated as a single compilation unit.
Built-in Macros
There are a handful of slang-specific predefined macros that you can reference in your code:
Name | Value |
---|---|
`__slang__ | 1 |
`__slang_major__ | slang major version number |
`__slang_minor__ | slang minor version number |
`__slang_rev__ | slang git revision number |