]> git.nickg.me.uk Git - nvc.git/log
nvc.git
11 months agoRemove redundant folded_enum function
Nick Gasson [Sat, 17 Jun 2023 07:45:49 +0000 (08:45 +0100)]
Remove redundant folded_enum function

11 months agoHandle static expressions with deferred constants that are not folded
Nick Gasson [Sat, 17 Jun 2023 07:20:00 +0000 (08:20 +0100)]
Handle static expressions with deferred constants that are not folded

11 months agoBump OSVVM to 2023.05
Nick Gasson [Fri, 16 Jun 2023 21:02:52 +0000 (22:02 +0100)]
Bump OSVVM to 2023.05

11 months agoEnable make -j by default with GNU Make
Nick Gasson [Fri, 16 Jun 2023 07:57:08 +0000 (08:57 +0100)]
Enable make -j by default with GNU Make

11 months agoAvoid repeatedly re-evaluating array bounds
Nick Gasson [Fri, 16 Jun 2023 07:51:53 +0000 (08:51 +0100)]
Avoid repeatedly re-evaluating array bounds

11 months agoUse wrapped arrays consistently when bounds are non-constant
Nick Gasson [Thu, 15 Jun 2023 21:15:05 +0000 (22:15 +0100)]
Use wrapped arrays consistently when bounds are non-constant

11 months agoFix incorrect result bounds in lower_narrow
Nick Gasson [Thu, 15 Jun 2023 21:45:20 +0000 (22:45 +0100)]
Fix incorrect result bounds in lower_narrow

11 months agoFix copy/paste typo in 702a234
Nick Gasson [Thu, 15 Jun 2023 21:17:38 +0000 (22:17 +0100)]
Fix copy/paste typo in 702a234

11 months agoFix pointer aliasing warning
Nick Gasson [Thu, 15 Jun 2023 17:22:40 +0000 (18:22 +0100)]
Fix pointer aliasing warning

11 months agoLink with Mold if installed
Nick Gasson [Thu, 15 Jun 2023 17:14:34 +0000 (18:14 +0100)]
Link with Mold if installed

11 months agoRemove redundant lower_array_scalar_sub_elements
Nick Gasson [Wed, 14 Jun 2023 21:16:13 +0000 (22:16 +0100)]
Remove redundant lower_array_scalar_sub_elements

11 months agoRefactor calculation in lower_array_stride
Nick Gasson [Wed, 14 Jun 2023 21:05:40 +0000 (22:05 +0100)]
Refactor calculation in lower_array_stride

11 months agoMissing bounds checks for record ports with unconstrained elements
Nick Gasson [Mon, 12 Jun 2023 21:07:17 +0000 (22:07 +0100)]
Missing bounds checks for record ports with unconstrained elements

11 months agoError rather than crash with external name in package. Issue #709
Nick Gasson [Sun, 11 Jun 2023 20:34:32 +0000 (21:34 +0100)]
Error rather than crash with external name in package. Issue #709

11 months agovhpi: Add basic float support
Sean Anderson [Sun, 11 Jun 2023 04:40:45 +0000 (00:40 -0400)]
vhpi: Add basic float support

Add basic support for floating point types. Getting/putting them is not
supported, but this allows using VHPI on designs which contain floats.

11 months agovhpi: Simplify cast_* functions
Sean Anderson [Sat, 10 Jun 2023 21:26:09 +0000 (17:26 -0400)]
vhpi: Simplify cast_* functions

Simplify some cast_* functions by calling their corresponding is_*
functions instead of reimplementing the same logic.

11 months agovhpi: Fix use-after-free when removing callbacks (part 2)
Sean Anderson [Sun, 11 Jun 2023 03:54:26 +0000 (23:54 -0400)]
vhpi: Fix use-after-free when removing callbacks (part 2)

I made a first attempt at this back in commit a21a360e ("vhpi: Fix
use-after-free when removing callbacks"), but I didn't fix the global or
value callbacks. These can also have use-after-frees, which can be
triggered consistently with a pair of "mutually-removing" callbacks.
They are set up so that they trigger on the next cycle, and they try to
remove themselves. This fails without the fixes in this commit.

The main approach is to give rt_watch_t the same treatment that
c_callback got: adding a flag to free the watch after the callback
completes. Global callbacks are a bit simpler, and can mostly be treated
like timeout callbacks; if we don't find anything to remove, the
callback must be currently-enqueued, so we shouldn't free it.

Fixes: d6e523a4 ("vhpi: Free callbacks in remove")
11 months agovhpi: Check that we have enough space for values
Sean Anderson [Sat, 10 Jun 2023 23:34:15 +0000 (19:34 -0400)]
vhpi: Check that we have enough space for values

Add a bounds check for vhpi_put_values to ensure we have enough space in
the signal for the value.

11 months agovhpi: Fix incorrect range calculation
Sean Anderson [Sat, 10 Jun 2023 23:04:30 +0000 (19:04 -0400)]
vhpi: Fix incorrect range calculation

Null ranges have zero length. Detect them properly by basing the
direvction of the range on IsUp instead of whether LeftBound >
RightBound. The comparison in init_indexedName can stay the same since
it is guarded by build_indexedNames.

Fixes: 2052a42f ("vhpi: Rework size calculation")
Fixes: 9416eb6e ("vhpi: Add support for IndexedNames")
11 months agovhpi: Fix NULL-pointer dereference in vhpi_get_by_name
Sean Anderson [Sat, 10 Jun 2023 21:06:48 +0000 (17:06 -0400)]
vhpi: Fix NULL-pointer dereference in vhpi_get_by_name

strtok_r returns NULL when there are no more tokens in the string. When
passed a name matching scope's name, but without a colon or period, we
call strtok_r twice, getting NULL the second time. Because the name
matches the region, fix this by returning the region.

11 months agoAdd -f analysis option to analyse a list of files
Nick Gasson [Fri, 9 Jun 2023 08:47:21 +0000 (09:47 +0100)]
Add -f analysis option to analyse a list of files

11 months agoAdd selected signal and variable assignments
Nick Gasson [Tue, 6 Jun 2023 21:25:22 +0000 (22:25 +0100)]
Add selected signal and variable assignments

11 months agoImplement "ordering on any scalar array type" VHDL-2019 feature
Nick Gasson [Tue, 6 Jun 2023 18:49:52 +0000 (19:49 +0100)]
Implement "ordering on any scalar array type" VHDL-2019 feature

11 months agoSet relaxed mode when running JIT benchmarks
Nick Gasson [Tue, 6 Jun 2023 18:18:33 +0000 (19:18 +0100)]
Set relaxed mode when running JIT benchmarks

11 months agoAdding VHDL-2019 to OSVVM installation. (#622)
Brian Padalino [Mon, 5 Jun 2023 22:17:56 +0000 (18:17 -0400)]
Adding VHDL-2019 to OSVVM installation. (#622)

11 months agoFix visibility bug with VHDL-2019 interface lists. Fixes #708
Nick Gasson [Mon, 5 Jun 2023 21:04:26 +0000 (22:04 +0100)]
Fix visibility bug with VHDL-2019 interface lists. Fixes #708

11 months agoOptimise memory allocation for access-to-array
Nick Gasson [Mon, 5 Jun 2023 08:03:46 +0000 (09:03 +0100)]
Optimise memory allocation for access-to-array

11 months agoUpdate THANKS.md
Nick Gasson [Sun, 4 Jun 2023 22:18:52 +0000 (23:18 +0100)]
Update THANKS.md

11 months agoAdd a --no-collapse option to inhibit port collapsing. Issue #704
Nick Gasson [Sun, 4 Jun 2023 21:46:32 +0000 (22:46 +0100)]
Add a --no-collapse option to inhibit port collapsing. Issue #704

11 months agoAdd a textio WRITE benchmark
Nick Gasson [Sun, 4 Jun 2023 21:46:42 +0000 (22:46 +0100)]
Add a textio WRITE benchmark

11 months agovhpi: Add support for getting/putting IndexedNames
Sean Anderson [Mon, 29 May 2023 21:39:41 +0000 (17:39 -0400)]
vhpi: Add support for getting/putting IndexedNames

This allows getting/putting nested arrays, and individual elements of an
array. The final index calculation is done lazily, although this
could be done eagerly by moving it to init_indexedName.

The tests for indexednames and the various enum types are extended now
that it is easier to access them.

11 months agovhpi: Fix vhpi_get_value with EnumVecVal format
Sean Anderson [Mon, 29 May 2023 21:49:14 +0000 (17:49 -0400)]
vhpi: Fix vhpi_get_value with EnumVecVal format

The Logic, SmallEnum, and Enum formats were not treated consistently.
Sometimes the wrong value type was used to store signals, and the
variable signal size of Enum was not handled properly. The correct
relationships for these types may be seen in the following table:

Format           Value type     Signal size
================ ============== ===========
vhpiLogicVal     vhpiEnumT      8
vhpiSmallEnumVal vhpiSmallEnumT 8
vhpiEnumVal      vhpiEnumT      variable

In order to handle the variable size of Enum, we need to use FOR_ALL_SIZES
from model.c. Move it to util.h, and rename a conflicting macro with a
similar purpose. This also adds support for getting SmallEnumVecs.

This adds a test for the Vec versions of these formats; the non-vec
versions will be tested when indexedName get/put support is added.

11 months agovhpi: Trace the object name in more cases
Sean Anderson [Mon, 29 May 2023 21:36:22 +0000 (17:36 -0400)]
vhpi: Trace the object name in more cases

Print the object's name when tracing in more cases, adding support for
names and signals.

11 months agovhpi: Support BaseIndex
Sean Anderson [Sat, 3 Jun 2023 23:28:30 +0000 (19:28 -0400)]
vhpi: Support BaseIndex

This property is not used by cocotb, but it makes testing easier.

11 months agovhpi: Support staticness
Sean Anderson [Mon, 29 May 2023 21:40:49 +0000 (17:40 -0400)]
vhpi: Support staticness

Support querying the staticness of expressions. I'm not sure how this
would work for ranges, so I've left them out.

11 months agovhpi: Add support for IndexedNames
Sean Anderson [Mon, 29 May 2023 21:04:52 +0000 (17:04 -0400)]
vhpi: Add support for IndexedNames

IndexedNames (e.g. `a(0)` or `a(2, 3)`) are necessary to access elements
of nested or multidimensional arrays (which have too many dimensions for
vhpiLogicVecVal) or to set individual elements of single-dimensional
arrays. Add basic support for these objects.

Although objDecls are names too, they also include the decl properties
which we don't want. Therefore, we use a separate hierarchy for
exprs/names. For future work, it might be nice to use the object
framework (tree_t, type_t, etc) for VHPI as well.

IndexedNames are created lazily. This is useful for nested arrays. For
example, a signal like

   type a is array(0 to 9) of std_logic_vector(31 downto 0);
   signal b: a;

might only be accessed like `b(0)` and never like `b(2)(3)`.

The encoding of prefixedName varies slightly from the UML. To reuse the
above example, while the UML says that the prefix of `b(0)` is `b`,
we set prefix as NULL in this situation, using simpleName instead. This
makes it easier to walk nested prefixes, since we don't have to compare
prefix to simpleName.

To populate IndexedNames, we must iterate over all constraints on the
array, and create `c_indexedName`s for each. One option here would be to
pass BaseIndex to init_indexedName. However, this would require decoding
the BaseIndex into indices for each constraint. Indead, I chose to pass
the indices directly, and create BaseIndex from them. I think this is
easier, because it doesn't involve any division.

11 months agovhpi: Rework size calculation
Sean Anderson [Mon, 29 May 2023 20:11:56 +0000 (16:11 -0400)]
vhpi: Rework size calculation

IndexedNames represent a subset of the elements in a signal. Their size
is dependent on their type. In preparation for adding IndexedName
support, rework the size calculation to be based on the type of the
object instead of the width of the backing signal.

11 months agovhpi: Support NumDimensions
Sean Anderson [Mon, 29 May 2023 20:06:09 +0000 (16:06 -0400)]
vhpi: Support NumDimensions

Support NumDimensions for arrays.

11 months agovhpi: Support LeftBound and RightBound
Sean Anderson [Mon, 29 May 2023 20:04:13 +0000 (16:04 -0400)]
vhpi: Support LeftBound and RightBound

Support LeftBound and RightBound for IntRanges.

11 months agovhpi: Support IsUnconstrained
Sean Anderson [Mon, 29 May 2023 20:03:13 +0000 (16:03 -0400)]
vhpi: Support IsUnconstrained

Support the IsUnconstrained property for ranges and types.

11 months agovhpi: Support constraints
Sean Anderson [Mon, 29 May 2023 19:45:06 +0000 (15:45 -0400)]
vhpi: Support constraints

Add support for range constraints on arrays and subtypes. I think the
from/to on unconstrained ranges should reflect the from/to of the
underlying type, but I have left that out for now. Currently no
properties are supported, but that will change soon.

11 months agovhpi: Support ElemType
Sean Anderson [Mon, 29 May 2023 19:34:45 +0000 (15:34 -0400)]
vhpi: Support ElemType

Support the ElemType property of Arrays.

11 months agovhpi: Add support for subtypes
Sean Anderson [Mon, 29 May 2023 19:23:07 +0000 (15:23 -0400)]
vhpi: Add support for subtypes

Add very basic support for subtypes. This is just enough to place them
in the type hierarchy, and not much else. Array subtypes are always
created as arrayTypeDecls, since this will let us expose the element
subtype properly.

11 months agovhpi: Pass type directly to init_typeDecl
Sean Anderson [Mon, 29 May 2023 23:02:31 +0000 (19:02 -0400)]
vhpi: Pass type directly to init_typeDecl

Anonymous types can't be looked up by their ident, so the decl is for
their base type instead. Pass the type directly instead of using
tree_type to ensure the type matches what it represents.

11 months agovhpi: Support iterators in vhpi_handle_by_index
Sean Anderson [Mon, 29 May 2023 18:50:52 +0000 (14:50 -0400)]
vhpi: Support iterators in vhpi_handle_by_index

Refactor vhpi_handle_by_index to work with iterators, allowing it to
work with anything that vhpi_iterator does (and vice versa).

11 months agovhpi: Support single-element iterators
Sean Anderson [Mon, 29 May 2023 18:40:44 +0000 (14:40 -0400)]
vhpi: Support single-element iterators

Instead of creating a list with one element for relations with only one
target, support single-element iterators directly.

11 months agovhpi: Move iterator initialization to init_iterator
Sean Anderson [Mon, 29 May 2023 18:36:17 +0000 (14:36 -0400)]
vhpi: Move iterator initialization to init_iterator

In preparation for merging the logic in vhpi_iterator with
vhpi_handle_for_index, split off iterator initialization into its own
function. This replaces new_iterator so we can avoid a memory
allocation if possible in vhpi_handle_for_index.

11 months agovhpi: Don't scan non-iterators
Sean Anderson [Mon, 29 May 2023 18:11:24 +0000 (14:11 -0400)]
vhpi: Don't scan non-iterators

If we get a non-iterator in vhpi_scan, just return NULL.

Fixes: fb8e5f51 ("vhpi: Support iterators")
11 months agovhpi: Move BaseType to c_typeDecl
Sean Anderson [Mon, 29 May 2023 17:09:37 +0000 (13:09 -0400)]
vhpi: Move BaseType to c_typeDecl

Each Type has a BaseType. Except for subtypes, the BaseType is the Type
itself. In preparation for adding subTypeDecls, move BaseType to
typeDecl. This allows us to calculate the BaseType when necessary,
removing the need to have a redundant BaseType reference.

11 months agovhpi: Extend is_typeDecl to work on all typeDecls
Sean Anderson [Mon, 29 May 2023 16:55:28 +0000 (12:55 -0400)]
vhpi: Extend is_typeDecl to work on all typeDecls

Make is_typeDecl work on all sub-classes of c_typeDecl, instead of just
intTypeDecls.

11 months agoFix GMT offset calculation in GMTIME
Nick Gasson [Sun, 4 Jun 2023 20:54:09 +0000 (21:54 +0100)]
Fix GMT offset calculation in GMTIME

11 months agoMake sure $GALLOC opcode never returns a null pointer
Nick Gasson [Sun, 4 Jun 2023 17:19:20 +0000 (18:19 +0100)]
Make sure $GALLOC opcode never returns a null pointer

11 months agoSimplify logic in lower_incomplete_access
Nick Gasson [Sun, 4 Jun 2023 17:19:01 +0000 (18:19 +0100)]
Simplify logic in lower_incomplete_access

11 months agoChange default exit severity to FAILURE
Nick Gasson [Sun, 4 Jun 2023 09:04:48 +0000 (10:04 +0100)]
Change default exit severity to FAILURE

11 months agoImplement remaining VHDL-2019 date/time functions
Nick Gasson [Sat, 3 Jun 2023 17:29:37 +0000 (18:29 +0100)]
Implement remaining VHDL-2019 date/time functions

11 months agoReturn a non-empty string for TOOL_EDITION
Nick Gasson [Sat, 3 Jun 2023 12:11:44 +0000 (13:11 +0100)]
Return a non-empty string for TOOL_EDITION

11 months agoAvoid crash when exiting concurrently with LLVM code generation
Nick Gasson [Sat, 3 Jun 2023 11:53:05 +0000 (12:53 +0100)]
Avoid crash when exiting concurrently with LLVM code generation

11 months agoOptimise predefined attribute parsing
Nick Gasson [Sat, 3 Jun 2023 11:40:23 +0000 (12:40 +0100)]
Optimise predefined attribute parsing

11 months agoAttribute 'ASCENDING has a dimension parameter
Nick Gasson [Fri, 2 Jun 2023 22:13:51 +0000 (23:13 +0100)]
Attribute 'ASCENDING has a dimension parameter

11 months agoImplement 'INDEX attribute from VHDL-2019 (LCS-2016-018a)
Nick Gasson [Fri, 2 Jun 2023 21:12:38 +0000 (22:12 +0100)]
Implement 'INDEX attribute from VHDL-2019 (LCS-2016-018a)

11 months agoSkip unnecessary static bounds check during elaboration. Fixes #707
Nick Gasson [Fri, 2 Jun 2023 17:17:52 +0000 (18:17 +0100)]
Skip unnecessary static bounds check during elaboration. Fixes #707

11 months agoAdd support for 'designated_subtype attribute (LCS2016_018d)
Nick Gasson [Thu, 1 Jun 2023 20:42:59 +0000 (21:42 +0100)]
Add support for 'designated_subtype attribute (LCS2016_018d)

11 months agoAdd more tests for VHDL AST dumper
Nick Gasson [Thu, 1 Jun 2023 20:14:32 +0000 (21:14 +0100)]
Add more tests for VHDL AST dumper

11 months agoCreate FST aliases for collapsed signals. Issue #704
Nick Gasson [Thu, 1 Jun 2023 19:03:53 +0000 (20:03 +0100)]
Create FST aliases for collapsed signals. Issue #704

11 months agoStart adding a unit test for dumper
Nick Gasson [Wed, 31 May 2023 20:30:25 +0000 (21:30 +0100)]
Start adding a unit test for dumper

11 months agoRework representation of VHDL-2008 element constraints
Nick Gasson [Tue, 30 May 2023 20:54:32 +0000 (21:54 +0100)]
Rework representation of VHDL-2008 element constraints

11 months agoImprove test case for issue #705
Nick Gasson [Mon, 29 May 2023 21:21:32 +0000 (22:21 +0100)]
Improve test case for issue #705

11 months agoAdd support for matching select? statements. Fixes #705
Nick Gasson [Mon, 29 May 2023 21:18:44 +0000 (22:18 +0100)]
Add support for matching select? statements. Fixes #705

11 months agoAdd support for array mode view indication
Nick Gasson [Mon, 29 May 2023 20:01:23 +0000 (21:01 +0100)]
Add support for array mode view indication

11 months agoAdd support for inout in mode view indication
Nick Gasson [Mon, 29 May 2023 18:18:03 +0000 (19:18 +0100)]
Add support for inout in mode view indication

11 months agoSimplify handling of 'CONVERSE attribute
Nick Gasson [Mon, 29 May 2023 17:20:29 +0000 (18:20 +0100)]
Simplify handling of 'CONVERSE attribute

11 months agoAdd vhdl-extras to regression tests
Nick Gasson [Mon, 29 May 2023 14:56:16 +0000 (15:56 +0100)]
Add vhdl-extras to regression tests

11 months agoAdjust GTKW save file format. Issue #703
Nick Gasson [Mon, 29 May 2023 13:24:54 +0000 (14:24 +0100)]
Adjust GTKW save file format. Issue #703

11 months agoThe GETENV function should also return conditional analysis identifiers
Nick Gasson [Mon, 29 May 2023 08:22:17 +0000 (09:22 +0100)]
The GETENV function should also return conditional analysis identifiers

11 months agoMore efficient handling of ANSI escapes in diagnostics
Nick Gasson [Sun, 28 May 2023 20:27:06 +0000 (21:27 +0100)]
More efficient handling of ANSI escapes in diagnostics

11 months agoFix typos introduced by earlier commit
Nick Gasson [Sun, 28 May 2023 20:10:35 +0000 (21:10 +0100)]
Fix typos introduced by earlier commit

From @bpadalino

11 months agoAllow VHDL-2008 rules for static expressions in relaxed mode
Nick Gasson [Sun, 28 May 2023 15:34:09 +0000 (16:34 +0100)]
Allow VHDL-2008 rules for static expressions in relaxed mode

11 months agoHandle aliases of operators
Nick Gasson [Sun, 28 May 2023 10:11:45 +0000 (11:11 +0100)]
Handle aliases of operators

11 months agoPrevent some cases of cascading errors
Nick Gasson [Sun, 28 May 2023 09:41:31 +0000 (10:41 +0100)]
Prevent some cases of cascading errors

11 months agoDo not translate ANSI escapes to UTF-8
Nick Gasson [Sun, 28 May 2023 09:16:29 +0000 (10:16 +0100)]
Do not translate ANSI escapes to UTF-8

11 months agoHandle leading NUL characters in report message. Fixes #700
Nick Gasson [Fri, 26 May 2023 08:22:04 +0000 (09:22 +0100)]
Handle leading NUL characters in report message. Fixes #700

11 months agoRework handling of VHDL-2008 nested constraints. Fixes #701
Nick Gasson [Thu, 25 May 2023 20:34:54 +0000 (21:34 +0100)]
Rework handling of VHDL-2008 nested constraints. Fixes #701

11 months agoImprove checking for mode view indication
Nick Gasson [Wed, 24 May 2023 21:21:53 +0000 (22:21 +0100)]
Improve checking for mode view indication

11 months agoInitial elaboration support for interfaces
Nick Gasson [Wed, 24 May 2023 07:57:44 +0000 (08:57 +0100)]
Initial elaboration support for interfaces

11 months agoImprove checking for interfaces
Nick Gasson [Tue, 23 May 2023 21:11:37 +0000 (22:11 +0100)]
Improve checking for interfaces

11 months agoAdd a performance test for unsigned "+"
Nick Gasson [Mon, 22 May 2023 21:27:58 +0000 (22:27 +0100)]
Add a performance test for unsigned "+"

11 months agoParsing for mode view indication
Nick Gasson [Sun, 21 May 2023 15:10:13 +0000 (16:10 +0100)]
Parsing for mode view indication

11 months agoParsing for 'CONVERSE attribute
Nick Gasson [Sun, 21 May 2023 14:40:35 +0000 (15:40 +0100)]
Parsing for 'CONVERSE attribute

11 months agoFix coverage generation for unary operators
Sean Anderson [Mon, 22 May 2023 16:01:38 +0000 (12:01 -0400)]
Fix coverage generation for unary operators

Unary functions (such as reductions) cause an assertion failure in
lower_logic_expr_coverage. As they operate on arrays, and arrays are
skipped anyway, modify this function to skip such operators. Also remove
a debug print while we're here.

Add a test case to ensure such functions are excluded from coverage.

Closes: #698
11 months agoCompile Synopsys STD_LOGIC_MISC package for 2008. Issue #696
Nick Gasson [Mon, 22 May 2023 07:20:53 +0000 (08:20 +0100)]
Compile Synopsys STD_LOGIC_MISC package for 2008. Issue #696

11 months agoMore checking for view declarations
Nick Gasson [Sun, 21 May 2023 09:00:08 +0000 (10:00 +0100)]
More checking for view declarations

11 months agoFully qualify subtype names
Nick Gasson [Sun, 21 May 2023 07:56:02 +0000 (08:56 +0100)]
Fully qualify subtype names

11 months agoIntroduce type_designated to replace type_file and type_access
Nick Gasson [Sun, 21 May 2023 07:41:08 +0000 (08:41 +0100)]
Introduce type_designated to replace type_file and type_access

11 months agovhpi: Add some additional callback tests
Sean Anderson [Sat, 20 May 2023 19:48:21 +0000 (15:48 -0400)]
vhpi: Add some additional callback tests

Add some more tests for callback disabling/removal.

11 months agovhpi: Support filling in time for object callbacks
Sean Anderson [Sat, 20 May 2023 21:12:17 +0000 (17:12 -0400)]
vhpi: Support filling in time for object callbacks

When cb_data->p is non-NULL for object callbacks, it is filled in with
the time of the callback when the callback triggers. Support this use
case.

11 months agovhpi: Don't support values for object callbacks
Sean Anderson [Sat, 20 May 2023 21:08:39 +0000 (17:08 -0400)]
vhpi: Don't support values for object callbacks

If cb_data_p->value is non-NULL for object callbacks, it must be filled
in with the value of the trigger. We don't support this, so error out
early.

11 months agovhpi: Calculate callback timeout at registration
Sean Anderson [Sat, 20 May 2023 21:02:19 +0000 (17:02 -0400)]
vhpi: Calculate callback timeout at registration

Callback timeouts must be calculated at registration, not at enabling:

> Disabling a callback simply determines whether or not the callback will
> be triggered when its trigger event occurs. For example, disabling a
> callback that is registered to trigger after a given delay and
> subsequently enabling before expiry of the delay does not postpone the
> time at which the trigger event occurs.

Additionally, any data in cb_data_p that we do not save (such as time)
may not be accessed after we return from registration.

11 months agovhpi: Fix use-after-free when removing callbacks
Sean Anderson [Sat, 20 May 2023 18:05:38 +0000 (14:05 -0400)]
vhpi: Fix use-after-free when removing callbacks

Callbacks can generally be in a few states:

- Disabled or mature
- Actively executing
- Waiting to execute

For all callbacks except for AfterDelay, when the callback is waiting to
execute then clearing it will prevent further execution. However,
AfterDelay callbacks can be absent from the eventq_heap in the driverq
workqueue awaiting execution. Clearing these callbacks will not prevent
them from executing.

To work around this, make model_clear_timeout_cb return a boolean
indicating whether a callback was actually cleared. If no callback was
cleared and the callback is not currently executing, then the callback
is in a workqueue. In this case, just free the callback later.
Otherwise, we have actually removed a callback and we can be sure that
it will not execute, so free it now.

Fixes: d6e523a4 ("vhpi: Free callbacks in remove")
11 months agovhpi: Allow disabling ValueChange callbacks
Sean Anderson [Sat, 20 May 2023 18:00:08 +0000 (14:00 -0400)]
vhpi: Allow disabling ValueChange callbacks

Allow disabling ValueChange callbacks by clearing the individual
wakeables. This function could take rt_signal_t and user data, but the
signal is calculated for VHPI callbacks, and it is easier to just store
the watch instead.

11 months agomodel: Correct timing of RT_LAST_KNOWN_DELTA_CYCLE
Sean Anderson [Sat, 20 May 2023 17:55:37 +0000 (13:55 -0400)]
model: Correct timing of RT_LAST_KNOWN_DELTA_CYCLE

According to the spec, vhpiCbLastKnownDeltaCycle callbacks can create
further delta cycles:

> h) If the next simulation cycle will be a delta cycle, the remainder of
> step h) is skipped. Otherwise, the following actions occur in the
> indicated order:
>
>   1. Each registered and enabled `vhpiCbLastKnownDeltaCycle` and
>      `vhpiCbRepLastKnownDeltaCycle` callback is executed. T_n is
>      recalculated according to the rules of 14.7.5.1.
>   2. If the next simulation cycle will be a delta cycle, the remainder
>      of step h) is skipped.
>   3. ...

Fire RT_LAST_KNOWN_DELTA_CYCLE before disabling delta cycles to allow
this to happen.