Lets say I have a clk and single bit signal “valid”, Now I want to check whenever valid is asserted in any posedge of clock, then in the next consecutive posedge it should get de-asserted.
The assertions are working as expected, your conclusions are wrong because you did not consider the sampling values at the clocking event.
See my comments
I want to check whenever valid is asserted in any posedge of clock, then in the next consecutive posedge it should get de-asserted.
The original assertion is correct. Assuming that Your RTL design is a synchronous system with one clock, there is NO reason to use a muticlock verification approach.
//I want to check whenever valid is asserted in any posedge of clock,
/ then in the next consecutive posedge it should get de-asserted.
@(posedge clk) $rose(valid)|=> $fell(valid);
// ON the following suggestion
@(negedge clk) $stable(valid);
// I don't see a need. Also, with no antecedent this will have failures.
// Are you requiring that valid is always a single value forever?
// That's what @(negedge clk) $stable(valid); provides (except for the 1sr cycle single b=valid 0s set to its default or initialized value.