Hi All ,
I have a requirement that whenever signal ’ iso_en ’ is sampled true on sys_clk , after 1 clock there should be no ip_clk i.e no edge of ip_clk .
Later if iso_en again changes from true ( 1 ) → false ( 0 ) , ip_clk would start re-running .
This however has a limitation :
After iso_en is True , even if the ip_clk is running and the posedge of ip_clk and sys_clk overlaps then the preponed value of 0 will be sampled and no error would be flashed !!
This however has a limitation that the threads which are waiting for change in ’ op_ip_clk ’ in Consequent and
iso_en changes from true to false the ip_clk would re-run and the threads that are waiting for @( op_ip_clk ) would result in assertion failure !!
I need a logic to ensure that assertion passes if ’ iso_en ’ transitions later from 1 to 0 and there is no change in ’ op_ip_clk ’ up till then .
Any suggestions ?
Unfortunately the following doesn’t work , maybe since LHS of throughout can’t be Temporal :
So threads that are waiting for change in ’ op_ip_clk ’ in consequent ( as soon as iso_en is de-asserted ) would be disabled .
As a result there would be No Error Messages as initially observed in edalink_attempt2
You’re disabling the property with iso_en==0, thus the only assertions that start are those with iso_en==1. If iso_en==1 for 3 cycles, and then iso_en==1, and if each assertion last 4 cycle (as an example), then the only assertion that still stands is the one with the most recent iso_en==1. The others are canceled. Is this what you want?
It’s unusual to do this. You typically define what you want or expect in an assertion.