v3.0
Highlights
As of this release slang passes 100% of the tests at https://github.com/chipsalliance/sv-tests (the only tool able to do so).
Language Support
- Added support for specify module timing paths
- Added support for specify pulsestyle and showcancelled directives
- Added support for
PATHPULSE$
specparams - Added support for system timing checks
- Added support for program namespacing rules
- Added support for anonymous programs
- Added support for DPI open array typed arguments
- Added support for
$inferred_clock
and$inferred_disable
- Finished full support for bind directives
- Finished full support for defparams
General Features
- New option
--obfuscate-ids
when used with--preprocess
will replace all identifiers in the output with obfuscated alphanumeric strings (thanks to @Sustrak) - Added a group of new warnings to report on unused code elements; see -Wunused
- A new (currently experimental) tool,
slang-tidy
, has been added as a place to collect more in-depth or project-specific static analysis rules (thanks to @Sustrak). - New option
--suppress-warnings
allows suppressing warnings from one or more file paths, intended to allow easily hiding warnings from 3rd party code
Improvements
- The default library name for slang has been changed to "libsvlang" to avoid clashing with an existing "S-lang" package on most Linux systems. The library name is now configurable via CMake.
- Errors about unknown package names are now ignored in lint-only mode
- Drastically improved the performance of overlapping driver checking and driver loop unrolling. For large projects this may reduce compile times by as much as 80-90%.
- Net charge strength and drive strength have been added to the AST
- Added human-friendly names for function arguments in Python bindings (thanks to @Kuree)
- Conditional statements in constant functions now implement unique/priority semantics (thanks to @HungMingWu)
- Procedural force/release of bit selects or part selects is an error according to the LRM; this error can now be downgraded to a warning for compatibility with other tools (thanks to @udif)
- Implicit named port connections with inequivalent types are disallowed by the LRM; this error can now be downgraded to a warning for compatibility with other tools
- When printing type names in diagnostics, if more than one type shares the same simple name, they will now be disambiguated with their full path
- A new
--timescale
option allows setting a default time scale for design elements. If this option is not set, there is no default and an error will be
issued if not all elements have a time scale specified (as required by the LRM).
Fixes
- Parameters used inside specify blocks will now issue an appropriate warning
- Fixed an issue where the parser erroneously allowed selects of integer literal expressions
- Top-level programs are now automatically instantiated, just like top-level modules
- Implicit covergroups declared inside classes were previously not being checked for correctness
- Fixed parser handling of spacing within
always@( *)
statements being misinterpreted as a closing attribute token (thanks to @godblesszhouzhou) - Fixed a bug in the lookup location used for non-ansi port symbol attribute expressions
- Fixed
-Werror
to actually work - Tweaked handling of unbased unsized literals to reduce false-positive width warnings
- Changed scoped access to incomplete forward typedefs to be allowed as long as the final name in the chain is not a type (matches behavior of other tools)
- The parser now correctly disallows attributes on assignment operators
- References to compilation unit items from within packages is now correctly disallowed
- Hierarchical references from packages to items outside that package are now correctly disallowed
- Bit-vector system functions (such as
$countbits
) can now be used with bitstream types (as opposed to just integral types) - Max size limits for packed and unpacked arrays and structs are now strictly enforced
- Invalid inferred time scales will now issue an appropriate error
- Fixed a bug in arithmetic of large constants at compile time (thanks to @adream307)
New Contributors
- @paulsc96 made their first contribution in #649
- @cbalint13 made their first contribution in #655
- @Sustrak made their first contribution in #660
- @godblesszhouzhou made their first contribution in #669
- @adream307 made their first contribution in #729