Hi forum members,
I have a question about .triggered and .matched of SVA sequence.
In my understanding, the following properties are equivalent. At rising edge of s1, a sequence that s2 is kept high for 3 cycle’s and goes down low ends. Each of s1 and s2 is driven by different clock.
//---- _.__________
//s1 : ________._|@ (clocked by clk1)
//---- _._._
//s2 : ___._|1 2 3|_._________ (clocked by clk2)
//---- >-------^
property prop_1;
@(posedge clk1) $rose(s1) |=>
@(posedge clk2) ( !$past(s2,4) && $past(s2,3) && $past(s2,2) && $past(s2,1) && $fell(s2) );
endproperty
sequence seq_3high();
@(posedge clk2) $rose(s2) ##0 s2[*3] ##1 $fell(s2);
endsequence
property prop_2;
@(posedge clk1) $rose(s1) |=>
@(posedge clk2) seq_3high().triggered;
endproperty
property prop_3;
@(posedge clk1) $rose(s1) |->
@(posedge clk2) seq_3high().matched;
endproperty
.matched implies synchronization between source clock and destination clock. So, I think it is same as synchronization by using |=> for .triggered and $past().
However, the property with .matched gives different results from others when they are examined by the followings tests.
===================================================
TEST 0 : FAIL is expected.
---- _.__________
s1 : ______._|@
---- _._._
s2 : _|1 2 3|_._____________
---- >-------^
===================================================
TEST 1 : FAIL is expected.
---- _.__________
s1 : ________._|@
---- _._._
s2 : _._|1 2 3|_.___________
---- >-------^
===================================================
TEST 2 : PASS is expected.
---- _.__________
s1 : ________._|@
---- _._._
s2 : ___._|1 2 3|_._________
---- >-------^
===================================================
TEST 3 : FAIL is expected.
---- _.__________
s1 : ______._._|@
---- _._._
s2 : _____._|1 2 3|_._______
---- >-------^
===================================================
prop_1, prop_2
TEST 0 : FAIL
TEST 1 : FAIL
TEST 2 : PASS
TEST 3 : FAIL
prop_3
TEST 0 : FAIL
TEST 1 : PASS
TEST 2 : FAIL
TEST 3 : FAIL
Here is a link to EDA Playground triggered and matched.
The results of prop_3(ast_3) are unexpected. Why are they different? Is my understanding wrong? Or, is this a tool issue?
Other simulators than QuestaSim give different results regarding prop_3(ast_3) and they are also unexpected. But I don’t mean to discuss it here.