🎉 Release V13.0

The Icarus Verilog development team is pleased to announce Release V13 of Icarus Verilog.

Release V13 builds on the V12 series with a focus on correctness, runtime stability, improved diagnostics, and incremental standard conformance improvements.


🐞 Bug Fix Summary

Release V13 resolves numerous issues reported against V12, including:

  • Incorrect signed constant handling.

  • Generate block naming collisions.

  • Elaboration-time assertion failures.

  • Runtime crashes in malformed corner cases.

  • Memory management issues during elaboration and simulation.


🔄 Major Changes in V13

🧠 Language & Elaboration Fixes

Release V13 includes multiple fixes to elaboration and expression handling:

  • Resolved generate block scope resolution issues affecting nested and conditional generate constructs.

  • Corrected signed arithmetic corner cases, including shift and width propagation behavior.

  • Fixed constant expression evaluation inconsistencies during parameter elaboration.

  • Improved handling of packed and unpacked arrays in assignments and port binding corner cases.

  • Addressed elaboration-time assertion failures triggered by malformed or ambiguous constructs.

  • Corrected several source-location reporting issues for elaboration errors.

These changes improve standards conformance and eliminate behavioral inconsistencies observed in the V12 series.


⚙️ Simulator (vvp) Improvements

The vvp runtime engine has received internal stability and correctness updates:

  • Improved event scheduling behavior in zero-delay and non-blocking assignment scenarios.

  • Fixed race-condition corner cases uncovered by expanded regression testing.

  • Eliminated memory leaks affecting long-running or large simulations.

  • Resolved crash conditions caused by invalid internal state transitions.

  • Improved robustness of $dumpvars handling in large hierarchical designs.

  • General runtime consistency and determinism improvements.

vvp continues to enforce version matching between the runtime and generated bytecode. Designs must be recompiled after upgrading.


🔌 VPI Updates

Fixes improve VPI reliability and conformance:

  • Corrected hierarchical object lookup behavior in specific corner cases.

  • Improved stability of callback registration during startup and shutdown.

  • Fixed invalid handle dereference scenarios that could result in segmentation faults.

  • Addressed inconsistencies in VPI object property reporting.


🛠 Diagnostics & Toolchain

  • Improved clarity and consistency of error and warning messages.

  • Better reporting of width mismatches and implicit net declarations.

  • More accurate diagnostic source locations.

  • Build system updates for compatibility with modern compiler toolchains.

  • Regression suite expansion and CI validation improvements.


📦 Upgrade Notes

  • Recompile all designs when upgrading from V12 or any other prior version.

  • Review warnings carefully; improved diagnostics may expose previously silent issues.

  • The only known breaking change is that wires must now be declared before use; which is required in the standard (see gh1287).


🙏 Acknowledgments

We thank all contributors who reported issues, submitted patches, expanded regression coverage, and improved documentation. Release 13 reflects continued community effort toward improving correctness, stability, and maintainability.