VERY Tough Assertion Question (Hard)

Hi Dave,

suppose
consider this clk
which has 1ns =timeperiod

a signal
7=ns 15ns
…|````````````````````````````````|…

signal b

…||....||…

signal c

here b toggles in duration when a is high ,assertion should show pass at 7ns ,if we write ancedent as $rose(a) or it wrote $fell(a) it show passs at 15ns.

scenario 2(fail)

a signal
7=ns 15ns
…|````````````````````````````````|…

signal b

signal c

this is only scenario to fail, when both b or c remains low throughout the duration

it will show fail as explained above at 7ns or 15ns

a signal
7=ns 15ns
…|````````````````````````````````|…

signal b

signal c

…|```````|…

here c toggles it will show pass similarly like first case

I need help to get the assertion to trigger only thread of pass or fail, in my case it triggeres at every posedge of clk

property p2;
@(posedge Clk) disable iff( (reset==0))
(a) |-> (b|c) within (a==1);
endproperty
P2: assert property(p2)
else begin
uvm_pkg::uvm_report_error(“assertions”, "Error on assertion " );
end

so the result is as follows

a signal
7=ns 15ns
…|````````````````````````````````|…

signal b

signal c

…|```````|…
. .
. .
. .
. .
result
7=ns . ^ ^ ^ . 15ns
…|````````````````````````````````|…
8ns 9ns 11ns 12ns 13ns

so ^ represents pass at 9ns,10ns,11ns at c is high
but at 8ns,12ns,13ns,14ns it is low which is false condition so it triggere assertion false

but the requirement whether true or false we need only thread throughout checking?