--load
is now a global option and should be placed before the-r
command. This allows VHPI foreign subprograms to be called during elaboration (#988).- The
--per-file
coverage report option outputs code coverage reports for each source file instead of each instance (#823). - The new
--check-synthesis
analysis option warns when signals are missing from process sensitivity lists. - Fixed a crash when a generic subprogram is associated with
open
(#1025). - Added a functional coverage API in
nvc.cover_pkg
that can be used by external frameworks such as OSVVM to define cover points. - Added
threshold-<value>
option for coverage to set minimal count a coverage bin must reach to be reported as covered. - Added a warning for potential infinite loops in processes without sensitivity and lacking any wait statements (from @NikLeberg).
- Selected names can now be to register value change callbacks with
vhpi_register_cb
(#1045). - Removed the limit on the maximum number of parameters that can be passed to a VHDL subprogram (#1036).
- The new
--no-save
analysis option parses and checks the input files but does not save the working library to disk. This is a replacement for the--syntax
top-level command which is now deprecated. - The coverage database file name has changed to
<toplevel>.ncdb
in the current working directory and this can now be customised with the new--cover-file=
elaboration option. Attempts to access the old file name inside the library directory will be redirected to the new location, with a warning. - Partial association of ports with interface views now works correctly (#1074).
- Added support for PSL suffix implication, SERE repetition, and SERE fusion.
- Nested arrays more than two levels deep can now be dumped in FST format (#1071).
- Added support for package external names (#1072).
- Fixed parser hang for bit string literals (from @NikLeberg).
- Fixed a crash on an illegal package definition inside an interface.
- Comping the Vivado vendor libraries with
nvc --install vivado
is now around 2x faster and analysing files with many dependencies is up to an order of magnitude faster (#1098). - The
--jit
elaboration mode now works on Windows-on-Arm systems. vhpi_assert
now behaves the same as VHDLassert
for the purposes of determining the simulation exit code and early termination (#1060).- The
'driving_value
attribute now works correctly with record types. - Added basic support for
'instance_name
,'path_name
and'simple_name
attributes of generate block labels (from @NikLeberg) (#1125). - Several other minor bugs were resolved (#1038, #1057, #1067).
- Fixed a crash when
'last_value
is used with record types (#1043). - Fixed a crash when a process sensitivity list contains an external name and the process is elaborated before the object referenced by the name (#1062).
- Fixed parser hang for integers in scientific notation (from @NikLeberg).
- Fixed a platform detection issue that caused JIT code loading to fail on Apple silicon macOS (#1069).
- The
STD_INPUT
andSTD_OUTPUT
files can now be opened and closed multiple times (#1079). - Fixed a crash when a subtype is used for an aggregate element association range choice which associates an array slice (#1080).
- Several other minor bugs were resolved (#1038, #1055).
- Fixed an error when using the
work
library alias and the working library has the same name as design unit being analysed (#991). - Added a check for illegal references to signal or variable external names inside pure functions (#1010).
- Added a check that the parameter of
'stable
and other implicit signal attributes is a static expression (#1018). - Fixed an elaboration crash when an external name is passed to a procedure (#1029).
- Record subtype constraints can now be accessed over VHPI (#1035).
- Several other minor bugs were resolved (#1017, #1020, #1030, #1040).
- Waiting on implicit
'stable
and'quiet
signals now works correctly. - Updated to OSVVM 2024.07 and UVVM 2024.07.03b for
nvc --install
. - Added a warning when an inner declaration hides an outer declaration in a way that is likely to be unintentional (#905).
- The
-c
sub-command for coverage is deprecated and replaced with separate--cover-report
and--cover-merge
commands. See the manual for details. - The argument to the
--cover-export
command is now the path to a coverage database file instead of a top-level unit name. - The
--force-init
command which was deprecated in the 1.7 release has been removed. - Coverage exclude files now support
fold
command to merge coverage data from independent sub-hierarchies (from @Blebowski). - FSM state coverage bin renamed from STATE to BIN_STATE.
- A signature is now allowed in the formal part of generic map associations in VHDL-2019 mode.
use lib.pack.all
no longer makes the bare package namepack
potentially visible.- Very limited initial Verilog support has been added, including the ability to instantiate vendor-supplied UDPs from VHDL.
- Fixed a regression which caused parse errors for some concurrent assertion statements (#956).
- Arrays-of-arrays with
downto
direction are now dumped in the correct order (#957). - Fixed incorrect result of
'event
and'active
where the prefix is an array of records. - Fixed a crash when the
'stable
attribute is used with a record type (#960). - Conversion functions applied to individual record elements in a port map now work correctly (#963).
- External name elaboration order checks were overly strict (#964).
- Associating a signal with an
out
orinout
parameter in a procedure that is not within a process now produces an analysis error rather than crashing at runtime (#965). - The
--dump-arrays
option now takes an optional argument to specify an upper limit on the length of nested arrays to dump (#959). - Matching
case?
statements are now checked for duplicate and missing choices at analysis time (#966). - Limited maximum instantiation depth to prevent crashes due to stack overflow when elaborating a design that has unbounded recursive entity instantiation (#969).
- Physical subtype ranges and 64-bit integer types are now handled correctly by VHPI (#978).
- Added support for generic map on subprogram call in VHDL-2019 and improved support for array type generics.
- Optimised emission of FST initial signal values which also fixes a potential crash (#979).
- Added checks for duplicate attribute specification (#977).
- Several other minor bugs were resolved (#961, #962, #971, #975, #985).
- Type checking was not performed correctly for conversion function actuals in port maps (#945).
- Fixed a crash with signal aliases inside an instantiated generic package (#946).
- Fixed random crashes when the simulation heap size is eight gigabytes or larger (#949).
- Fixed a crash when a constant array with unconstrained element type is initialised with an aggregate (#954).
- External names in concurrent assertion statements and PSL assertions are now parsed correctly (#952).
- Several other minor bugs were resolved (#942, #943, #950, #951, #953).
- Fixed an incorrect bounds check error when a constant declaration has a partially constrained type (#932).
- Elaboration of large designs on Windows no longer fail with linker errors due to excessive command line length.
- Fixed a bug which prevented VCD files from being generated on Windows systems using the UCRT runtime library (#637).
- Fixed a crash when the type of a qualified expression is an unconstrained array-of-array (#934).
- Fixed random segmentation fault when the simulation heap size is larger than four gigabytes (#935).
- Fixed an incorrect ambiguous subprogram error when using the 1993
standard and calling a subprogram via a selected name such as
ieee.numeric_std."="
.
- Windows installer was missing some standard library files.
- Fixed a regression where generics and ports could not be referenced in external names (#921).
- Fixed a crash when an unconstrained port with a default value is
associated with
open
. - Fixed a duplicate symbol linker error with some uses of the
'delayed
attribute. - Fixed a crash when an aliased subprogram is matched by a generic
subprogram
<>
(#924) - Fixed a crash when a generic package containing a subprogram is passed to an entity package generic (#925).
- Fixed an intermittent "failed to suspend thread" fatal error on macOS (#922).
- Fixed a crash when a shared variable is declared inside an instantiated generic package in 2019 mode (#923).
- Fixed a crash when a port with unconstrained array-of-record type is associated with a signal that has a static subtype.
- Fixed incorrect longest static prefix calculation for array slices
containing
'length
,'left
,'right
and similar attributes (#930). - Fixed wrong result when slicing a generic that has an unconstrained array type (#931).
- Type and package generics now work correctly with components and configurations (#883).
- Fixed a crash when a matching
case?
alternative contains multiple choices (#890). - Implemented VHPI support for package declarations and
vhpiPackInsts
iterators (#891). - Signatures in attribute names are now parsed correctly (#892).
- Attribute specifications for
all
are now parsed correctly (#889). - Predefined
"="
and"/="
operators are no longer declared for file types. - Alias of packages now work correctly (#893).
- Stricter checking of identifiers to reject those with multiple consecutive underscores or trailing underscores (from @typingArtist).
- Stricter checking for subprograms, deferred constants, and protected types referenced before their corresponding body or full declaration.
- Decimal physical literals like
8.2 ms
are now correctly rounded (to8200 us
in this case) when they are converted to the base unit (#899). - External names can now be passed as
signal
actuals to subprograms (#900). - Fixed a crash when branch coverage is enabled and an if-statement
contains a
return
(#903). - The
NVC_CONCURRENT_JOBS
environment variable can be used to scale the number of worker threads NVC creates based on the number of concurrently executing simulations. - Fixed a crash when certain attributes such as
'val
are used in the target of a signal assignment statement (#908). - Signals in packages are now dumped to the FST file (#901).
- Function interface declarations can now be
pure
orimpure
(#917).
- Fixed a crash when
'transaction
is used with a record type. - Fixed a compatibility issue with LLVM 18 that could cause an illegal
instruction exception when the
--jit
elaboration option is used (#887).
- Fixed a crash when a process contains a
force
orrelease
assignment inside aprocess (all)
statement (#877). - Fixed a crash creating a waveform dump with
--dump-arrays
and the design contains an array-of-array-of-records (#878). - Fixed a spurious error when a type declaration from a package generic is used in a port list (#881).
- Fixed an assertion failure when a procedure declared within a
process (all)
assigns to a signal (#882). - Added a missing check for illegal assignment to external signal name outside a process (#884).
- Fixed a crash while printing diagnostic information when the simulation delta cycle limit is reached (#885).
- Generic actuals no longer need to be globally static, which was never required by the LRM (#886).
- The
--jit
elaboration option no longer requires--no-save
. - Fixed a crash when subtype bounds depend on a package instance generic (#815).
- Fixed various issues in the implementation of guarded blocks and disconnection specifications (#829).
- The
--std
option now controls which VHDL standard the--install
command uses to compile third-party libraries (#836). - The prefix of an indexed or slice name now must be another name or function call, as required by the LRM (#835).
- The implementation of conversions in port maps has been reworked and fixes a number of long-standing issues (#843).
- Added support for
inertial
keyword in port maps (#843). - Fixed a bug where
'last_value
could give the wrong result if the signal has multiple sources. - Updated to OSVVM 2023.09a and UVVM 2023.09.16 for
nvc --install
. - The
--exit-severity=
option now also controls which severity level results in a non-zero exit code (#850). - Improvements to waveform dumping for signals with record types or types with non-locally-static bounds (#851, #852).
- The parameter for attributes with dimensions such as
'length(N)
may be any integer type when--relaxed
is passed (#862). - Resolved several other minor issues (#654, #854, #855, #859, #863).
- The default standard version was changed to VHDL-2008.
- The
--vhpi-trace
option now implies--vhpi-debug
. - The bounds of array aggregates are now calculated correctly in several corner cases (#873).
- Added supported for VHPI foreign subprograms.
- Fixed incorrect effective value when a signal has multiple sources due to port-collapsing optimisation (#824).
- Signals that appear in aggregate choice expressions like
(S downto 0 => '0')
are now included in the sensitivity list for concurrent statement equivalent processes, and inprocess (all)
(#825). - The direction of aggregates with range choices is now calculated correctly in VHDL-2008 mode (#826).
- Fixed a memory corruption bug when evaluating certain aggregates that contain a range association (#827).
- Resolved several other minor issues (#837, #839, #840).
- Fixed an incorrect length check in the equivalent process for non-static port map actuals (#817).
- Library file names for design units that contain extended identifiers
such as
/Foo/
are now encoded in a way that avoids illegal characters and case sensitivity issues on Windows and macOS (#816). - Implemented
vhpiIsNullP
andvhpiIsDiscreteP
for ranges. - Fixed a crash when an aliased enumeration literal appears in a case choice expression (#819).
- Fixed calculation of longest static prefix with indexes and slices of a constant array (#820).
- Fixed a crash during elaboration when simplifying an if-statement that depends on a generate parameter (#821).
- Increased the limit on the number of subprogram arguments to allow compiling some Lattice IPs (from @sean-anderson-seco).
- Fix crash during elaboration when an if-statement branch is always taken (#812).
- VHPI plugins can now access types in instantiated packages (from @sean-anderson-seco).
- The
--version
output now includes the bare Git commit SHA if the program is built from a shallow clone with no tags (#813).
- New command
--cover-export
exports coverage data in the Cobertura XML format which is supported by most CI environments such as GitLab. - Generics on internal instances can now be overridden with the
-g
elaboration option. For example-g uut.value=42
. - Implemented the
'reflect
attribute and associated protected types from VHDL-2019. - Added support for VHDL-2019 sequential block statements.
- Implemented the VHDL-2019 directory I/O functions in
std.env
. - Added VHDL-2019 assert API (with @Blebowski).
- Implemented
'image
,'value
andto_string
for composite types in VHDL-2019. - Implemented the "closely related record types" feature from VHDL-2019.
- Implemented the "composition with protected types" feature from VHDL-2019.
- The new
--shuffle
option runs processes in a random order which can help to identify code that depends on a particular execution order. - Updated to OSVVM 2023.07 for
nvc --install
. - Various enhancements and fixes to the VHPI implementation.
- Implemented the VHDL-2019 changes to
instance_name
andpath_name
for protected type variables. - VHPI error messages are no longer reported as diagnostic messages on
the console. The new
--vhpi-debug
option restores the old behaviour. - Support for type conversions between arrays with closely related element types.
- Added support for FSM state coverage collection (from @Blebowski).
- An alias of a type now correctly creates implicit aliases for each predefined operator of that type (#776).
- Improve overload resolution where a partial named association implies the formal parameter must be an array (#793).
- Handling of implicit conversion for universal types has been reworked to better comply with the LRM.
- Fixed a crash when string literal characters have a type which is an alias to another type (#801).
- Added a warning when calling the predefined
"="
and"/="
operators on arrays and the left and right hand sides have different lengths. - Expressions like
abs(x)**2.0
are now parsed correctly (#805).
- Fixed compatibility with LLVM 17.
- Fixed an intermittent crash when using the
--jit
elaboration option. - Improved overload resolution when subprogram argument is known to have character type.
- Improved bounds checking for port map actuals.
- Fixed a crash with aggregates for record types that contain an unconstrained field (#768).
- Fix spurious "checksum 00000000" error when analysing multiple design
units and one contains
use work.all
(#769). - Fix crash when using the
--relaxed
analysis option and multiple warnings are printed (#770).
- Fixed memory corruption in rare circumstances with functions declared in process declarative regions (#751).
- Fixed a race condition when creating library directories that
occasionally led to build failures with
make -j
(#746). - Aliases of protected type methods are now allowed.
- Fixed a crash when a pragma appears outside of a design unit (#752).
- Fixed a crash analysing an alias of an alias of a subprogram (#755).
- Fixed an elaboration failure when an allocator expression has an array type with an unconstrained element (#756).
- Fixed a memory leak in the
--print-deps
command. - Fixed a crash when evaluating globally static expressions during elaboration with coverage enabled (#759).
- Fixed an analysis crash where a predefined function for a type declared in a package is overridden in the package body only (#760).
- Fixed a crash due to an array bounds check being incorrectly optimised out (#747).
- The type of string literals and aggregates in generic map associations
such as
G => X"00"
whereG
has a generic type can now be determined correctly (#750). - Fixed a spurious "duplicate declaration" error if a use clause for an instantiated packages appears in the same declarative region that instantiated the package (#750).
- Improved checking for configuration specifications.
- Empty bit string literals are now parsed correctly.
- Fixed stack corruption when a function returns an alias of one of its array arguments.
- Fixed incorrect sensitivity list generation with concurrent statements
such as
x <= C(y)
where C is a constant array. - Fixed an incorrect optimisation which caused
'event
to return the wrong value in rare circumstances. - Decimal bit string literals more than 64 bits wide are now supported (#731).
- The format of fractional
time
values returned by the standardto_string
function was changed to match other simulators. - Fixed a crash when constant folding a locally static expression in a package body (#742).
- Added support for reading command line arguments in VHPI (from @Forty-Bot).
- Fixed a compilation error when using the predefined
minimum
/maximum
functions with arrays of physical types. - Overloaded protected procedure calls could read the wrong value of protected type variables in rare circumstances.
- The Zstandard compression library is now a build dependency. Install
libzstd-dev
or similar. - The
integer
type is now 64-bit in VHDL-2019 mode. - The VUnit VHDL libraries can now be
installed with
nvc --install vunit
but please note this does not install the Python infrastructure. - Updated to OSVVM 2023.05 and UVVM 2023.03.21 for
nvc --install
. - Conditional expressions are now allowed in constant, signal, and variable declarations in VHDL-2019 mode.
- Conditional return statements are now supported in VHDL-2019.
- Added support for the "function knows vector size" feature in VHDL-2019.
- Entity ports with variable class and protected type are now supported in VHDL-2019 mode.
- The xpm_vhdl project
which provides VHDL models of the Xilinx XPM macros can now be
installed with
nvc --install xpm_vhdl
. - Many improvements to the VHPI implementation (from @Forty-Bot).
vhpi_put_value
withvhpiDepositPropagate
mode is now supported.- The Synopsys
std_logic_misc
package is now compiled for 2008 (#696). - Fixed an issue where leading
NUL
characters in a report message would prevent the entire message being printed (#700). - Added support for interfaces in VHDL-2019 including mode view
declarations, mode view indications, and the
'converse
attribute. - Added support for VHDL-2008 matching
select?
statements (#705). - Added support for the new
'designated_subtype
and'index
attributes in VHDL-2019. - Implemented the date/time functions from
std.env
in VHDL-2019. - The default exit severity was changed from
error
tofailure
. This means a failing assertion no longer immediately terminates the simulation. The old behaviour can be restored with--exit-severity=error
. - Comparison operators as well as
minimum
/maximum
functions are now defined for all scalar array types in VHDL-2019. - Added support for selected signal and variable sequential assignment statements.
- The
-a
analysis command now accepts an-f list
option wherelist
is a text file containing a list of files to analyse. Alternatively this may be written@list
. - Accesses to protected types and files are now allowed in VHDL-2019.
- Fixed a crash when indexing a null array (#734).
- Named and range choices are now supported in aggregate targets of variable and signal assignments (#712).
- The
synopsys.attributes
package is no longer distributed or built as part of the standard libraries.
- Fix elaboration errors with recursive entity instantiation (#668).
- Updated to latest GtkWave FST writer library.
- Fix crash when an external name is used in a wait expression (#674).
- Fix stack corruption when passing large numbers of arguments (#665).
- Protected procedure calls with
out
orinout
signal arguments now create drivers (#675). - Fixed a crash when a
next
orexit
statement appears insideprocess (all)
(#676). - The
--jit
elaboration options now works on Intel Macs (#680). - Fixed a corner case where a forced signal with no drivers had the
wrong effective value after
release
(#681). - Fixed a crash when a signal assignment statement contains only
unaffected
(#677).
- Fix build errors and warnings on MSYS2 Clang x64 environment.
- Fix build failure due to missing
SHT_X86_64_UNWIND
on Alpine and Ubuntu 18.04 (#666). - Elaboration now works correctly when the
--with-system-cc=
configure argument is given a non-absolute path (#667). - Fixed a crash when a subprogram declared in a for-generate block is called during elaboration (#668).
- Real to physical or 64-bit integer conversion now produces the correct result when evaluated during elaboration (#669).
- Matching
case?
statements are now handled correctly in insideprocess (all)
(#670). - Pass
-no_fixup_chains
to linker on macOS to avoid warning. ;
can now be used as a separator in the--work
and--map
arguments on Windows in addition to:
(#671).
- Code generation has been rewritten to enable faster elaboration and "just-in-time" compilation in the future.
- Now compatible with LLVM 16.
- Implemented the VHDL-2019 call path reporting API.
- The
elsif
VHDL-2019 conditional analysis directive now works correctly (#604). - The
'transaction
implicit signal no longer incurs a delta-cycle delay. x'ascending
now reports the correct result ifx
has unconstrained array type and null range.- The predefined
"="
operator on record types now always uses the predefined equality comparison for fields even in the presence of a user-defined"="
operator. - It is no longer necessary on Windows to link VHPI plugins at
elaboration time with
NVC_FOREIGN_OBJ
. Use the--load
option to load the plugin at run time as on other operating systems. - The experimental
--jit
elaboration option defers native code generation until run time. This can dramatically reduce total test time for short-running simulations. - Statements like
wait for X
whereX
is negative but not a constant now produce an error at run time (#633). - NVC is now supported by VUnit.
- Implicit signal attributes like
'transaction
are now considered static signal names (#640). - Added support for fine-grained coverage collection via
--coverage-spec
elaboration option (from @Blebowski). - The ABI for passing unconstrained arrays to foreign subprograms changed slightly, see the manual for details.
- Implemented new file I/O operations from VHDL-2019.
- Added analysis option
--define
to set user-defined conditional analysis identifiers (from @Blebowski). - Optional support for using ZSTD to compress library files if
libzstd-dev
is installed. - ISO-8859-1 extended characters are now handled properly in identifiers and when printing to the terminal.
- The new
configure
option--disable-default-paths
disables the default library search paths (#652). - Subtype indications used as case range choices no longer crash during analysis (#655).
- The default standard version was changed to VHDL-2002 and will likely
change again to -2008 in a future release. Users are recommended to
use the
--std=
option to specify an explicit standard revision to avoid any compatibility issues. - Fixed a crash when elaborating a port map which contains a subtype of a record (#662).
- Implemented VHDL-2019 syntax relaxations for empty records and trailing semicolon in interface lists (from @bpadalino).
- A Bash auto-completion script is now installed by default. Run
configure
with--without-bash-completion
to disable this.
- Fixed "failed to suspend thread" crash on macOS.
- Fix incorrect coverage scope nesting with array case statements (from @Blebowski).
- Expressions like
FOO(X)'DELAYED
now work as expected rather than producing a fatal error (#603). - Fixed a bug where data was not propagated through inout ports in certain conditions (#609).
- The
-gNAME=VALUE
option to set generic values from the command line now works correctly for subtypes of enumeration types (#618). - Fixed crash when creating an array of record subtypes where the subtype declaration has an element constraint (#615).
- Initial signal values for certain types were not dumped correctly in FST files on Windows (#596).
- Missing
thirdparty/str-two-way.h
from distribution tarball (#599).
- The
--disable-opt
and--native
elaborate options which were deprecated in version 1.3 have been removed. - The JSON dumper which was unmaintained for several years has been removed.
- VHDL-2019 mode can be enabled with
--std=2019
. Please note there is very limited support for this standard at present. - The new
--no-save
elaboration option skips saving the elaborated design and other generated files to the working library. - Added support for
else
andelsif
in generate statements (#510). - Xilinx Vivado vendor libraries can now be compiled with
nvc --install vivado
. - LLVM 8.0 or later is now required due to deprecation of non-opaque pointers.
- Altera/Intel Quartus vendor libraries can now be compiled with
nvc --install quartus
. - The
nvc --version
output now includes the commit hash if built from a Git checkout. - The new
--gtkw
run option writes a.gtkw
save file for GtkWave containing all the signals in the design (suggested by @amb5l). libffi
is now a build-time dependency.- Negation of the smallest negative value of a type such as
-integer'left
now produces an error. - Default OSVVM version updated to 2022.11.
case .. generate
statements are now supported in VHDL-2008.- Coverage implementation was reworked and now collects statement, branch, expression and toggle metrics (from @Blebowski).
- The
--make
command is deprecated and will be repurposed in a later release. Use the new--print-deps
command instead to generate Makefile dependencies.
- Fixed build on FreeBSD/arm (#534).
- Fixed crash with generic package instantiation (#520).
- Now compatible with LLVM 15.0.
- Fixed calculation of longest static prefix with
'RANGE
expression (#542). MOD
andREM
are now defined for physical types in VHDL-2008 (#540).- Signal declarations are now allowed in entity declarative part (#547).
- Protected objects are now allowed in concurrent procedure calls (#547).
- Opening a file with
APPEND_MODE
now actually appends to the file instead of truncating (#551).
- Added missing textio
WRITE [LINE, REAL, STRING]
in VHDL-2008. - Added support for FreeBSD/powerpc (#503, #504, from @pkubaj).
- Fixed "missing vcode unit" error during elaboration (#502).
- Fixed crash with recursive entity instantiation (#502).
- Fixed error with expressions like
X'ELEMENT'LENGTH
(#508). - Added support for FreeBSD/i386.
- Fixed crash reading resolved value of record signal (#502).
- Improved folding of for-generate expressions (#514).
- Fixed memory leak when forcing signals.
- Fixed crash with type conversion in generic map (#518).
- Fixed crash with expressions like
X'DELAYED'STABLE
(#517). - External names now work with record signals (#520).
- Xilinx Vivado vendor libraries can now be compiled with
nvc --install vivado
. - VITAL libraries are now built by default on Windows.
- Fixed build with old versions of Glibc.
- Resolution functions with nested record types now behave correctly (#516).
- Avoid repeated
stat(2)
calls when accessing library. - Fixed very slow elaboration in some cases with function calls in generic map expressions.
- Fixed intermittent segfault during elaboration (#506).
- Fixed incorrect constant folding of case statements with range choices.
- Fixed crash with constrained array declared in entity.
- Real valued signals can now be dumped in FST files (#524).
- Fixed signal assignment delay with side effects being evaluated twice (#527).
- An error is now reported for duplicate choices in array-type case statements (#528).
- Breaking change: In-tree builds are no longer supported: use a separate build directory instead.
- Breaking change: The
--force-init
command is deprecated and has no effect. - Added support for VHDL-2008 type generics on packages and entities.
- Diagnostic messages have been enhanced with more contextual information.
- Added support for record element constraints and record fields with unconstrained array types.
- Alias of multidimensional array allowed in VHDL-2008 mode.
- Implemented VHDL-2008 rules for aggregates with slices.
- VHPI is now always enabled at build time and the
--enable-vhpi
configure option has no effect. - Arithmetic operations that overflow the underlying machine type now produce an error (#101).
- Added support for VHDL-2008 force/release assignments.
- Basic support for external names in VHDL-2008.
- Matching case
case?
statements are supported in VHDL-2008 mode. - Fixed several bugs in the implementation of guarded signals.
- Implemented VHDL-2008 rules for generic visibility.
- Shared variable declaration permitted in entity declaration.
- Case expression no longer requires a locally static subtype in VHDL-2008 mode (#460).
- The VHDL heap is now garbage collected as required by VHDL-2019 and
the
deallocate
operator has no effect other than setting the access tonull
. - A new global option
-H
specifies the size of the simulation heap and defaults to 16 megabytes. - Concurrent procedure call allowed in entity statement part.
- Added support for
'SUBTYPE
and'ELEMENT
attributes in VHDL-2008. - The new top-level
--init
command creates a new empty library directory. - The
-a
analysis command now reads from the standard input if the file name is-
. - Added support for array element constraints in VHDL-2008.
- The
--prefer-explicit
analysis option which was deprecated before the 1.0 release has been removed. - A new
--relaxed
analysis option enables "relaxed rules" mode. This has the same effect as enabling all the existing--relax=
options. However some constructs will still produce warnings. - The
--relax=
analysis option is deprecated and is now equivalent to passing--relaxed
. The individual options are ignored. - Added support for generic subprograms in VHDL-2008.
- New command
--install
allows easy installation of common third-party packages such as OSVVM and UVVM. - Identifiers in waveform dumps are now in lower case instead of upper case.
- The function
CURRENT_DELTA_CYCLE
inNVC.SIM_PKG
can be used to query the current delta cycle number.
- Fix
make -j
with GNU make (#440). - Subtraction from zero could return the wrong result in some circumstances.
- Fix incorrect code generation for access-to-array.
- Fix assertion failure with nested context.
- Generic declarations are now allowed to hide the entity name.
- Fix spurious error about duplicate declarations when using VHDL-2008 context declarations.
- Fix incorrect default generic value when component and entity specify generics in different order (#448).
- Postponed processes with sensitivity lists now work correctly.
- Unit tests no longer fail when built without debug symbols (#445).
- Simulation now correctly terminates when time reaches
TIME'HIGH
. - Assertion failure and report messages were not printed during the initialisation phase of the simulation.
- Fix compatibility with BSD make (#440).
- Fix an out-of-memory condition when initialising processes (#441).
- Fix incorrect generic value in binding specification (#442).
- Fix spurious error in overload resolution if required arguments follow optional arguments (#443).
- Fix intermittent crash generating code for enumerated types (#444).
- Minor elaboration performance optimisation.
- Name resolution and overload resolution has been completely rewritten which should fix a number of long-standing issues.
- The elaboration phase was largely written which fixes a number of long-standing issues and significantly improves elaboration speed.
- VHDL-2008 IEEE standard libraries are now built and installed in addition to the VHDL-1993 libraries.
- The VHDL-1993 standard libraries are now derived from the Apache 2.0 licensed sources from VHDL-2019.
- There is now a project website at https://www.nickg.me.uk/nvc/. Please link to this in preference to the GitHub project page.
- Compiled VHDL code now includes DWARF debug information which is used for runtime stack trace if libdw or libdwarf is installed.
- Added support for VHDL-2008 reduction operators, match operators, and condition conversion.
- Added support for VHDL-2008 element resolution.
- Variable assignment now supports aggregate targets.
- The
--relax=impure
option allows pure functions to call impure functions. - Added support for VHDL-2008 "all" sensitised processes.
- Added support for ports and generics in block statements.
- Added support for the 'BASE attribute.
- Type name now allowed in element association choice (#407).
- Implement textio READ procedure for REAL.
- LLVM 6.0 or later is now required to build.
- Added support for MINIMUM, MAXIMUM, and TO_STRING predefined operators in VHDL-2008.
- VCD files are now generated from FST data in a similar manner to
fst2vcd(1)
. This should improve compatibility with other tools. - Added support for 'LAST_ACTIVE attribute (#423).
- Added support for 'DRIVING and 'DRIVING_VALUE attributes.
- Added a new option
--ieee-warnings=off
to disable warning messages from the standard IEEE packages. - Support for configurations has been significantly improved (#372).
- Added support for VHDL-2008 delimited comments.
- Added support for guard expressions on blocks.
- Added support for guarded signals.
- Added support for HREAD, HWRITE, and other TEXTIO additions in VHDL-2008.
- Code generation now happens in parallel when LLVM is built with multi-threading enabled.
- Link time optimisation (LTO) is now enabled for release builds where supported.
- The default assertion failure message for certain simple scalar comparisons now shows the values of the left and right hand sides.
- Added support for VHDL-2008 conditional variable assignment statements.
- Added support for VHDL-2008 extended bit string literals.
- Non-globally-static actuals allowed in port maps in VHDL-2008 mode.
- Added support for VHDL-2008 sequential conditional signal assignment statements.
- Added basic support for package generics and package instantiation.
- Nested arrays can now be included in the waveform dump but only if the
--dump-arrays
option is passed. This is disabled my default due the significant performance and memory overhead. - Added support for record types in waveform dump (#216).
- Added support for foreign subprograms using the VHPIDIRECT protocol.
- Library build is now reproducible when running
make -j
. - Fix a constant folding crash with nested records.
- Fixed a crash when a record aggregate contains an "others" association and the fields have array types with different lengths.
- Fixed a stack overflow when a subprogram with unconstrained array arguments is called repeatedly in a loop (#414).
- Fixed intermittent crash when evaluating nested constant records (#425).
- Fixed missing import libraries on Windows (#424).
- Standard libraries are now installed under
$prefix/lib/nvc/
instead of$prefix/share/nvc
. - New configure option
--disable-vital
disables building the VITAL packages whose license status is unclear. - Support for the LXT wave output format, which was deprecated in version 1.5, has been removed. Use the default FST format instead.
- The
fetch-ieee.sh
script which did nothing since the last release has been removed. - The
--codegen
command, which has been deprecated since 1.3, was removed. - The
--profile
option now prints internal simulation statistics instead of the top processes by CPU time.
- Handle access(2) returning EPERM in macOS sandbox (#421).
- Fix race when multiple processes concurrently update a library.
- Fix
--syntax
command when file contains multiple design units. - Allow constant folding of nand/nor/xor/xnor.
- Fix potential out of memory condition when evaluating complex assert expressions.
- Fix incorrect result of
mod
operator with negative operands. - Fixed intermittent crash when evaluating nested constant records (#425).
- Buffer too small for printing TIME'HIGH (#98).
- Link libexecinfo on FreeBSD.
- Implement textio READ procedure for BIT and TIME (#408).
- Fixed a crash when a long running procedure suspends in a loop (#412).
- Fix static linking with LLVM 12.0.
- Fix crash when assigning to a signal declared in a package.
- Fix incorrect recording of dependencies which caused a failure to load generated DLLs on Windows.
- Fix file locking error when a library is located on NFS (#417).
- Optimise loading large library index from disk.
- Fix a crash when using 'VALUE with enumeration subtypes (#419).
- Fix a crash when a signal with more than 256 elements is declared in a package (#420).
- Fix a compiler warning in vcode.c.
- Disable VHDL backtrace on non-Linux systems as the symbol names cannot be parsed reliably (#385).
- Update to latest
pc_from_uncontext.m4
for Apple M1 support. - Fix incorrect application of LRM rules for building an equivalent wait statement for concurrent statements.
- Library build is now reproducible when running
make -j
(#409). - Fix assertion failure with nested record type (#404).
- Use Pandoc to generate the manual page.
- IEEE library sources are now distributed
- Updated FST library to match GtkWave 3.3.79
- The LXT wave output format is deprecated, use FST instead
- Fix incorrect file name in assertion message
- Fix crash while recovering from parse error
- Add
--dump-json
command to print AST as JSON (from Sebastien Van Cauwenberghe) - Fix crash when using LLVM 7 and later
- Fix spurious assertion failure in
std.textio.readline
- Reals are now rounded to the nearest integer as specified by the LRM
- Fix crash when constant folding uses too much memory
- Improved memory management in evaluator (thanks to Frank Mori Hess)
- Various other minor fixes and improvements
- Windows with MSYS2 is now fully supported
- Continuous integration for OS X and Windows using Travis and AppVeyor
- Record resolution functions are now supported
- The
--relax=prefer-explicit
option now works correctly
- Native code is always generated on platforms that support it
- Initial support for VHDL-2017 conditional compilation blocks
- The TCL shell has been removed
- Various code generation and constant folding fixes
- Fix crash when build IEEE library from non-clean tree
- ORC is used for JIT if LLVM version is 3.9 or later
- LLVM 3.8 or later is now required
- Added
-O0
to-O3
options to control LLVM optimisation level - The
--disable-opt
option is deprecated, use-O0
instead - The elaborate
--native
option is now a global option and should be placed before the-e
command - The
--codegen
command is deprecated, use--native
when analysing to generate native shared libraries for packages
- Compile time evaluation now uses vcode
- Record aggregates can now be constant folded (#305)
- The TCL shell is deprecated and will be removed in the next release
- Compatible with LLVM 4.0
- Functions returning records can now be constant folded (#315)
- LLVM 3.4 or later is now required
- Improvements to based literal parsing
- Improved stack traces on Linux when
libdw-dev
installed - Fixed elaboration of subprograms in entity declarations
- Improved elaboration performance when design contains many signals
- Fixed various bugs involving record signals
- Fixed sensitivity list generation for concurrent procedure calls
- Improvements to simulation performance
- Implemented
vhpi_get_phys
- Added command
--list
to print all units in a library - Rewrote the
run_regr
program in C somake check
no longer requires Ruby - The
--relax=generic-static
option is now renamed to--relax=locally-static
and applies in wider range of contexts
- First stable release