github MikePopoloski/slang v9.0

latest releases: v10.0, v9.1
6 months ago

Highlights

This release brings substantial elaboration performance improvements by way of instance caching, as well as more advanced linting capabilities with the new dataflow analysis framework.

Language Support

  • Added support for clock flow, clock resolution, and clock inference rules in checkers and assertions
    • Various cases of invalid clock usage will now issue appropriate errors
    • Clock resolution is also performed for the sampled value system functions
  • Implemented rules for which kinds of sequences and properties can be declared in clocking blocks
  • Implemented rules for dynamic variable access from within checker procedures

Notable Breaking Changes

  • AST serialization no longer includes uninstantiated scopes in the output
  • Driver::reportCompilation method had part of its functionality split out into Driver::reportDiagnostics to allow for calling the new Driver::runAnalysis method in between. There is a new Driver::runFullCompilation method that wraps all of this for convenience if you don't care about controlling when each pass is done.
  • The DEBUG macro set for debug builds has been renamed to SLANG_DEBUG. NDEBUG is no longer used to conditionally control compilation, which should make it much less likely that using slang as a library will result in conflicting NDEBUG settings and causing ODR violations.
  • Warning control command line options have been reworked to make them less confusing. Settings for warning groups no longer override more explicit settings for a specific warning, and a bunch of confusing ordering dependence between -Werror and the other settings have been removed. This may cause changes to which warnings are enabled if your command line has a particularly constructed set of options. See the documentation for more information.
  • Tracking of net and variable drivers has moved to the new analysis layer. If you were using that portion of the AST API you'll need to change to get that information post-analysis.
  • The --strict-driver-checking flag has been removed. Its behavior can be regained by setting the new --max-loop-analysis-steps to 0.

New Features

  • slang can now optionally use cpptrace (using the SLANG_USE_CPPTRACE CMake option) for better backtraces in the event of internal assertions or exceptions thrown
  • There is a new post-elaboration analysis pass in slang that does additional checking for enforcing specific language rules and reporting extra warnings. This can be disabled with the --disable-analysis flag, though it should not be needed unless there is a bug in slang.
  • Added a new option --diag-abs-paths to report diagnostics with absolute instead of relative file paths
  • Added -Wmissing-return and -Wincomplete-return which warn about non-void functions that do not return a value on all control paths
  • Added -Wcase-unreachable for wildcard case items that are unreachable because they are completely subsumed by earlier items
  • Added -Wcase-too-complex for case statements that are too complex to analyze, and --max-case-analysis-steps to control that limit
  • Added -Wcase-incomplete for wildcard case statements that don't completely cover the input space and have no default case
  • Added -Wcase-redundant-default for case statements marked unique or priority that provide a default case
  • Added -Wcase-wildcard-2state for wildcard case statements that have 2-state conditions and items
  • The `celldefine directive is now exposed in the API and in AST serialization (thanks to @whitequark)
  • Added new flags --all-deps, --include-deps, --module-deps, and --depfile-target to allow outputting various dependency file lists from slang (thanks to @AndrewNolte)
  • Added -Winferred-latch which detects signals that are not assigned on all control paths through always_comb blocks
  • Added -Winferred-comb which detects combinational logic in always_latch blocks
  • Added new flag --disallow-refs-to-unknown-instances which causes errors to be issued when there are hierarchical references to ignored unknown module instances that were allowed via the existing --ignore-unknown-modules flag

Improvements

  • slang now performs instance caching by default, which means duplicate instance bodies will not be visited during elaboration, which can greatly speed up elaboration times for large projects. This behavior can be disabled with the --disable-instance-caching flag, though it should not be needed unless there's a bug in slang -- please open an issue if you find that you need the flag.
  • -Wint-bool-conv now applies to expressions used in assertions, properties, and sequences
  • The -G option can now set parameter values hierarchically, and the value can be an expression that uses package members such as enum values
  • Hierarchical path strings for members of generic class types now include the specialization parameter values
  • Instance array port slicing of packed types has been reworked. Each instance's port connection now has an expression tree selecting the appropriate bits of the potentially multi-dimensional packed type.
  • +libext has been added as an alias for --libext
  • slang can now build for WASI targets (thanks to @whitequark)

Fixes

  • Fixed argument binding for sequence and property instances when using named arguments
  • Concurrent assertion and procedural checker statements are now correctly disallowed from appearing in subroutines and final blocks
  • Fixed a place where empty argument names were not correctly allowed in function prototype declarations
  • Fixed serialized AST locations that come from macro expansions (thanks to @micron-ian)
  • Fixed various issues with how instance array indices are mapped to underlying elements
  • Assignments are now correctly disallowed in timing controls
  • Cycle delays are now correctly disallowed in event trigger statements
  • The global future sampled value system functions are now correctly disallowed in assertions with sequence match items
  • Fixed some confusing behavior with glob file patterns involving '.../'
  • Fixed a bug that could cause the ordering of packages provided to the compilation to affect whether names can be looked up correctly
  • Fixed an erroneous assert / error involving order of elaboration issues with virtual interface types
  • Fixed --cmd-rename when used with plus args

Tools & Bindings

pyslang

  • Added some initial documentation and an API reference for the Python bindings (thanks to @parker-research)
  • Added a bunch more tests for the Python bindings (thanks to @parker-research)
  • Added Python bindings for the SyntaxRewriter class (thanks to @parker-research)
  • Fixed several keep-alive lifetime issues with the Python bindings

slang-tidy

  • Added new flag --dump-config to dump possible configuration options to stdout and exit (thanks to @jameshanlon)
  • Printing check descriptions now includes the config key name (thanks to @jameshanlon)
  • Added a new port prefix rule, similar to the existing port suffix rule (thanks to @corco)
  • Added a new undriven range rule (thanks to @jameshanlon)
  • Fixed OnlyAssignedOnReset false positive with struct arrays and for loops
  • Fixed RegisterHasNoReset false positive for loop iterator variables
  • Added support for user specified severities on individual checks (thanks to @jameshanlon)

slang-netlist

  • The netlist tool has been removed from the repo -- it will be moved to its own standalone repo for further development

rewriter

  • The rewriter tool has gained a number of options that control how the file is rewritten, including whether macros and includes should be expanded or not (thanks to @AndrewNolte)

Don't miss a new slang release

NewReleases is sending notifications on new releases.