Skip to content

v3.0

Compare
Choose a tag to compare
@MikePopoloski MikePopoloski released this 18 Mar 18:24
· 812 commits to master since this release
7efcca2

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