In reply to sv_uvm_learner_1:
You need the throughout a sequence. The “ready” is a sequence of 1 cycle.
The ready[->1] is equivalent to !ready[*0;$] ##1 ready, as long as ready==0.
// A caveat on the use of that **throughout**
// The construct exp throughout seq is an abbreviation for the following:
(exp) [*0:$] intersect seq
// Your requirements: Once valid goes high on any channel, valid to be high
// while ready is low. You did not specify what the value of valid is when ready==1.
// The valid throughout ready[->1];
// means that when ready==1, valid==1
// If you need to specify that valid==0 when ready==1
// then you need to use the intersect of 2 sequences.
$rose(valid) |-> valid throughout ready[->1]);
ap_i1: assert property(@ (posedge clk) $rose(valid) |-> !valid[->1] intersect ready[->1]);
ap_thru1: assert property(@ (posedge clk) $rose(valid) |-> valid throughout ready[->1]);
Thanks Ben for quick reply. i was looking for only checking valid to be high while ready is low. once ready goes high in any cycle, valid has to be high and master can drive valid low in that cycle but assertion will capture that in next clock cycle. So, throught assertion is good for me.
between what will be assertion if i want the assertion to be passed irrespective of valid value when ready goes high. in the above assertion, one expect valid should be low and other expect valid to be high to make the assertion pass.
An assertion is a verification about a property or characteristics of a design.
It reflects the requirements. Sorry, but your last question is unclear in defining the property, the GIGO.
I tend to be very hard on the lack of clarity in defining requirements.
I wrote a book about the chip design and verification process, including a section for the definition of requirements. This book is now free, see https://verificationacademy.com/forums/announcements/free-book-component-design-example-…-step-step-process-using-vhdl-uart-vehicle