Skip to content

Conversation

@seldridge
Copy link
Member

Add a new Temporal inline layers that are nested under each of the
builtin Assert, Assume, and Cover layers. These layers exist because we
have observed situations where assertions which should be legal in all
designs are unsupported by specific tools, though they are legal
properties by the SystemVerilog spec.

E.g., s_eventually is entirely unsupported by Verilator and has only
limited support in VCS. The motivation for this PR is to have a location
where we can put these assertions and guard them off with tools that do
not support them.

Because this is expected to be problematic for all of the existing builtin
layers, this is added to each of Assert, Assume, and Cover. Additionally,
as users have user-defined layers, the pattern of creating this Temporal
layer is factored into a trait, HasTemporalInlineLayer so that it can be
reused by others.

Release Notes

  • Add a Temporal layer under each of the builtin Assert, Assume, and
    Cover layers. This is intended to be used to guard complex or unsupported
    properties due to spotty simulator support.
  • Add HasTemporalInlineLayer trait to allow users to easily add a recognizable
    Temporal child layer to their user-defined layers.

Add a new `Temporal` inline layers that are nested under each of the
builtin Assert, Assume, and Cover layers.  These layers exist because we
have observed situations where assertions which _should_ be legal in all
designs are unsupported by specific tools, though they are legal
properties by the SystemVerilog spec.

E.g., `s_eventually` is entirely unsupported by Verilator and has only
limited support in VCS.  The motivation for this PR is to have a location
where we can put these assertions and guard them off with tools that do
not support them.

Because this is expected to be problematic for all of the existing builtin
layers, this is added to each of Assert, Assume, and Cover.  Additionally,
as users have user-defined layers, the pattern of creating this `Temporal`
layer is factored into a trait, `HasTemporalInlineLayer` so that it can be
reused by others.

Signed-off-by: Schuyler Eldridge <[email protected]>
@seldridge seldridge added the Feature New feature, will be included in release notes label Sep 9, 2025
@seldridge
Copy link
Member Author

The name could be improved. Bikeshed comments are welcome, too.

@seldridge seldridge enabled auto-merge (squash) September 9, 2025 21:28
Add the temporal layers to Chisel's default layers.  This is necessary to
avoid these layers needing to be manually included by users.  It's
annoying that they're enabled, but because they are inline, it doesn't
create unnecessary files.

Signed-off-by: Schuyler Eldridge <[email protected]>
@seldridge seldridge disabled auto-merge September 9, 2025 21:39
@seldridge seldridge enabled auto-merge (squash) September 9, 2025 21:39
@seldridge seldridge merged commit af38b63 into main Sep 10, 2025
13 checks passed
@seldridge seldridge deleted the dev/seldridge/non-verilator-layer branch September 10, 2025 03:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature New feature, will be included in release notes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants