for the above code the checker is started at end of sequence of ‘seq1’ that I understand but what I dont understand is ‘seq2’ is also finishing in the same cycle for the triggered method why is happening I do not get it.I mean ‘seq2’ contains ‘c’ which should be evaluated after 2 clock cycles because there is 2 cycle delay but it is getting checked and evaluated at the end of ‘seq1’ even after having ##2 in ‘seq2’.
cycle 1 2 3 4
start point name q r s t
seq1: (a##1b).triggered q r s
seq2: (##2 c).triggered q r
seq1.triggered with sequence called 'q' that started at cycle 1 has an end point at cycle 2
seq2.triggered with sequence called 'q' that started at cycle 1 has an end point at cycle 3
thus seq1.triggered |-> seq2.triggered evaluated only end points.
At cycle 3 you evaluate the end point of seq1 that started at cycle 2 with the
end point of seq2 that started at cycle 1
I have some query with triggered. can you help to resolve it.
As,seq1 started at cycle and end at cycle 2.
And seq2 start at cycle 1 and end at cycle 3.
Can you explain more about below statement.
thus seq1.triggered |-> seq2.triggered evaluated only end points.
At cycle 3 you evaluate the end point of seq1 that started at cycle 2 with the
end point of seq2 that started at cycle 1
As, seq1 completed at cycle 2 and we have used overlapping implication ( |-> ).
How it’s start evaluation at clock 3 and not at clock 2?
Also, I have tried example available below.
case 1:- ##1 c // As, seq2 is completed it get match at end.
case 2:- ##2 c // As, we used |-> why it take next clock (3).
case 3:- ##3 c // Fail expected. Pass with |=>
As, seq1 completed at cycle 2 and we have used overlapping implication ( |-> ).
How it’s start evaluation at clock 3 and not at clock 2?
sequence seq1; @(posedge clk) a##1b; endsequence // the clocking event is needed because you
// you use the end points, and those are started at every ce
sequence seq2; @(posedge clk) ##2 c; endsequence
// At every clocking event the simulator srts the computation of the needed end points.
// seq1 that started at cycle 1 (let's call this cycle 'q') completed at cycle 2
// seq1 that started at cycle 2 (let's call this cycle 'r') completed at cycle 3
// seq2 that started at cycle 0 (let's call this cycle 'p') completed at cycle 2
// seq1 that started at cycle 1 (let's call this cycle 'q') completed at cycle 3
cycle 0 1 2 3 4
start point name p q r s t
seq1: (a##1b).triggered q r s
seq2: (##2 c).triggered q r
// THUS, with seq1.triggered |-> seq2.triggered;
// at every clocking event you are evaluating the endpoints,
// *************** regardless of when they started **************************
// At cycle 2 you compare the endpoints only
// seq1 that started at cycle 1 (let's call this cycle 'q') completed at cycle 2
// seq2 that started at cycle 0 (let's call this cycle 'p') completed at cycle 2
// At cycle 3
// seq1 that started at cycle 2 (let's call this cycle 'r') completed at cycle 3
// seq2 that started at cycle 1 (let's call this cycle 'q') completed at cycle 3
Thanks for your feedback. I got it.
Btw, sorry for compilation error.
I have checked my example with xrun only and in which it works without compilation error.