Hi ,
I am trying to verify 1 scenario from SVA with throughout OPERATOR.
Below is my design requirement.
Once the fifo_empty_o signal assert, it should not be de-assert with below condition
1. fifo_empty_o will not de-assert till the occ_cnt_o is less than fifo_empty_th.
OR
2. It will de-assert only when occ_cnt_o is 0.
I have wrote below assertion for above requirement but it is passing with failing cases also.
Please let me know where I am doing wrong.
Your original assertion looks OK from a construction view.
I prefer the use of the sequence “or”, as it expresses your requirements in a clearer way. It is also easier to debug with a thread viewer.
If your assertion passes unexpectedly, I would question your requirements.
Ben systemverilog.us
Thanks for the update.It is working in my case.
I am getting confusion to print Assertion pass/fail info in report summary.
Pass info is coming only once when antecedent {$rose or $fell} is asserting for the first time.
Pass Info is not coming when antecedent is true for next time .Only this is happening with pass info
But Error info is coming whenever antecedent { $rose or $fell} is true but consequent is not true.
I am writing assertion as below
property valid_assert ;
@(posedge clk_i ) disable iff (!(rst_n_i))
$rose(valid |-> ((valid_cnt <=valid_in) && (valid_cnt>0));
endproperty