Skip to content

v7.0

Latest
Compare
Choose a tag to compare
@MikePopoloski MikePopoloski released this 26 Sep 23:45
· 49 commits to master since this release
d56a398

Highlights

This release completes support for the changes in the recently released IEEE 1800-2023 version of the SystemVerilog LRM.

Language Support

  • Select expressions of packed arrays now always return an unsigned type, as mandated by the LRM
  • Clocking skew delays now properly require a constant value
  • Enforce that static methods can't have override specifiers
  • The error for invalid state-dependent path conditions in specify blocks can now be downgraded with -Wspecify-condition-expr for compatibility with other tools
  • Added support for the optional system tasks and functions from Annex D in the LRM: $countdrivers, $list, $input, $key, $nokey, $reset, $reset_count, $reset_value, $save, $incsave, $restart, $scope, $scale, $showscopes, $showvars, $sreadmemb, $sreadmemh, $getpattern
  • Added support for the optional compiler directives from Annex E in the LRM: `default_decay_time, `default_trireg_strength, `delay_mode_distributed, `delay_mode_path, `delay_mode_unit, `delay_mode_zero
  • Rules about nondegeneracy of sequences and properties are now enforced (thanks to @likeamahoney)
  • Special case rules about how name resolution works in bind directives are now enforced
  • Changed the definition of "simple types" to include string to allow using it as a target for assignment pattern fields (thanks to @likeamahoney)
  • Rules for inconsistent net types connected via an implicit named port connection are now enforced (thanks to @likeamahoney)

Clarifications in IEEE 1800-2023

  • Assertion clocking events can't reference automatic variables
  • The .* token sequence is actually two separate tokens that can be separated by whitespace
  • Functions in constraints cannot have inout arguments
  • Constraint subexpression can be of any type as long as their final expression type is numeric and they don't reference random variables
  • The argument to $isunbounded must be a parameter name (only enforced as a pedantic warning in slang)
  • Edge-sensitive paths in specify blocks can specify an edge keyword without also including a data source expression
  • Only bidirectional switches allow connections to nets with user-defined net types (other primitives do not)

New Features in IEEE 1800-2023

  • Constraint expressions and random variables can have real types
  • dist expressions can have a default specifier
  • dist expressions can have real types
  • solve-before constraints can specify array.size() as well as regular random variables
  • disable soft constraints can target array.size()
  • Constraint blocks can have override specifiers (initial / extends / final)
  • Covergroups can inherit from covergroups in parent classes
  • Coverpoints can have real types
  • Covergroups have new options: cross_retain_auto_bins and real_interval
  • New system functions $timeunit, $timeprecision, and $stacktrace

General Features

  • Added -Wunsigned-arith-shift which warns about suspicious arithmetic right shifts of unsigned types
  • Added -Wstatic-init-order and -Wstatic-init-value which warn about static initializers that depend on uninitialized values or an undefined order of other static initializers
  • Added -Wfloat-int-conv and -Wint-float-conv which warn about implicit conversions between floating point and integer types
  • Added -Wfloat-narrow and -Wfloat-widen which warn about implicit conversions between floating point types of differing widths
  • Added -Wunused-import and -Wunused-wildcard-import which warn about unused import directives
  • Added -Warith-op-mismatch, -Wbitwise-op-mismatch, -Wcomparison-mismatch, and -Wsign-compare which all warn about different cases of mismatched types in binary expressions
  • slang-netlist has experimental support for detecting combinatorial loops (thanks to @udif)
  • Added --allow-merging-ansi-ports (included in "vcs" compat mode) which allows non-standard behavior in which ANSI module ports can duplicate net and variables declared within the module
  • Added --ast-json-source-info which includes source line information when dumping an AST to JSON (thanks to @KennethDRoe)
  • Added --enable-legacy-protect which enables support for nonstandard / legacy protected envelopes: Verilog-XL style `protect directives and Verilog-A style // pragma protect comments

Improvements

  • Default value expressions for parameters that are overridden are now checked for basic correctness and other parameters they reference will not warn for being "unused"
  • Made several minor improvements to the locations reported for propagated type conversion warnings
  • Sped up Compilation object construction by reorganizing how system subroutines are created and registered
  • Improved the parser error reported when encountering an extraneous end delimiter in a member list
  • Various fixes and improvements were made to slang-netlist (thanks to @jameshanlon, @udif)
  • Added options to slang-tidy to better control what gets output (thanks to @Sustrak)
  • Added a bunch of new checks to slang-tidy (thanks to @JoelSole-Semidyn)
  • Improved handling of source files that contain non-UTF8 comments (thanks to @udif)
  • Fixed and improved various parts of the SyntaxRewriter API (thanks to @sgizler)

Fixes

  • Fixed several AST serialization methods (thanks to @tdp2110, @likeamahoney, @Kitaev2003, @cyuzuzo-j)
  • Fixed the return type of DPI import tasks
  • Fixed a bug that caused some inout ports to warn as "unused"
  • Fixed the checking of the extends override specifier when the containing class has no base class
  • Fixed a case where bracketed delay expressions in sequence concatenations were not checked for correctness
  • Fixed the type of the iterators used in with-expressions for covergroup bins
  • Fixed a bug that sometimes prevented printing the correct scope for type alias names in diagnostic messages
  • Fixed the hierarchical path string created for symbols inside of unnamed generate blocks (thanks to @povik)
  • Fixed spurious errors that could occur when using generic class instantiations inside uninstantiated generate blocks
  • Correctly disallow passing expressions of void type to format style system functions (thanks to @tdp2110)
  • Fixed a bug where parameters that referred to themselves via hierarchical reference would cause a crash instead of reporting a diagnostic
  • Fixed PATHPULSE$ specparam initializers to allow providing only one value instead of requiring two (thanks to @likeamahoney)
  • Fixed PLA tasks to accept concatenation expressions as arguments without reporting an error about the direction of the argument bounds (thanks to @likeamahoney)
  • Fixed a bug that could cause spurious errors in uninstantiated generic class definitions
  • Fixed the Symbol::getHierarchicalPath API to round-trip correctly
  • Fixed JSON serialization of integers to round-trip correctly
  • Fixed a bug in resolving defparam values inside of generate loops
  • Fixed checking of event arguments in system timing check functions
  • Fixed checking of deferred assertion function calls (thanks to @likeamahoney)
  • Correctly issue an error if a sequence or property has a formal argument with the same name as a local variable declaration (thanks to @likeamahoney)
  • Fixed a case of recursive property instantiation that was incorrectly disallowed (thanks to @likeamahoney)
  • Fixed bugs in checking for overlapping user-defined primitive table rows (thanks to @likeamahoney)
  • Fixed infinite loops in the parser when encountering constraint blocks with certain kinds of invalid tokens in them (thanks to @likeamahoney)
  • Fixed errors in assigning to select expressions involving members of virtual interfaces (thanks to @micron-ian)