SystemVerilog Assertion Support #75
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Core Problem:
The fundamental issue with standard SVA is that all sequence and property constructs carry implicit clocking semantics. This creates ambiguity, particularly for immediate assertions which, despite being combinational, are formally verified using a conceptual, tool-provided clock.
Proposed Design Philosophy:
To create a clearer and more explicit system, this design moves away from SVA's implicit clocking. The core principle is to make all clocking relationships explicit within the API, thereby improving type and semantic clarity:
SequenceandProperty: Unlike SystemVerilog, this design introduces two distinct API kinds to represent the different concepts:ref_to_bool.S: Represents aSequence. It is a temporal construct that is always explicitly bound to a clock.sequence.P: Represents aPropertywithout any clock semantic.Explicitly Clocked Sequences: Under this model, there are no "un-clocked" or implicitly clocked sequences. Every sequence (
ref_to_bool.S) must be associated with an explicit clock, eliminating ambiguity.Handling Immediate Assertions: The main challenge in an explicitly clocked system is how to handle immediate
SVAassertions, such as those used for verifying combinational logic (always_comb). These assertions rely on a "virtual" clock provided by formal verification tools for their decision points.To solve this, a new, dedicated API is introduced:
ref_to_bool.I: Represents a non-temporal, Immediate boolean expression derived from LTL. This construct is used only for clock-less, immediate assertions.The capabilities of
ref_to_bool.Iare intentionally restricted to maintain semantic integrity:Iexpression or be converted directly into aProperty.##), as it exists outside the clocked temporal domain.