Section "16.14.8 Nonvacuous evaluations" does not address the vacuity of a *not
*operator.
Specifically, what should the result of a "*not(vacuous_property*)" be?
I tried the following model on a simulator, and *ap_t* was evaluated as
vacuous, and the pass and fail counts were not incremented.
That is expected.
However, *ap_t_not *was evaluated as fail, and the pass count was 0, and
fail counts was 4 for a run of 100ns. The fail count is incremented.
I can understand the argument that since a vacuous property is evaluated as
"true", the not of "true" is "false"
To me the *"not(vacuous_property)*" should be evaluated as* vacuously false
*, and the *failure count should not be incremented*.
The pass count for "*(vacuous_property)*" is not incremented. So, why
should the fail count be incremented for "*not(vacuous_property)*"?
Do we want to address that for the next 1800, past 2012? Should I write a
mantis?
Ben Cohen
module vac;
timeunit 1ns;
timeprecision 1ns;
logic clk =1'b1, a=1, b=0, c=0;
default clocking @(negedge clk);
endclocking
ap_t: assert property(@ (posedge clk) a |=> b |-> c);
ap_t_not: assert property(@ (posedge clk) not(a |=> b |-> c));
initial forever #10 clk=!clk;
endmodule : vac
-- This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean.Received on Thu Jan 26 11:14:38 2012
This archive was generated by hypermail 2.1.8 : Thu Jan 26 2012 - 11:15:01 PST