I am trying to write a PSL assertion that checks that the amount of assertions on the input match the amount of assertions on the output.
For example:
On the input anything can happen at any time and the output can be asserted on any time as well. The exact time is unknown and also not important. What I want to verify is that no information is dropped.
I've come up with the following PSL statement to verify this. This is a strong assertion meaning that at the end of a test all assertions need to have been "completed".
assert always { input='1' |-> {[*] ; output='1'} }!;
For example, the following should be a failure but this PSL passes:
I noticed that this statement is not strong because different input assertions can be matched by the same output assertion. For example:
What would be a good way of implementing a PSL like this? Obviously I can also verify it through other means (counting input and output assertions) but would there be a way to do this with PSL? Is there an equivalent check that I could implement using SVA?