Evaluation of property

Hi all,

According to SV LRM, A property (concurrent assertion) is evaluated in the Observed region, therefore, if a non-blocking assignment for a register in a MODULE, the new value of the register will be sampled and used for evaluation. Howerver, if the non-blocking assignment is in a PROGRAM, the old value will be used, am I right?

thanks!

The sampling of signals for a concurrent assertion occurs in the pre-poned region, so you will always get the old value of the register. The only problem you run into is if the clock event is generated or gated by a reactive event, then it is possible to have more than one observed region in an simulation tick. For this and many other reasons, I do not recommend using program blocks. See http://go.mentor.com/programblocks

Hi Dave,

You don’t recomment program block or clocking block?
I am in line with you with the redundancy of having program block, and I don’t see the good reason of having it for all of my use cases.

But, I strongly recommend user to model the clocking block in their interface, and use it extensively everywhere in their OOP based driver/monitor or testbench.
I am also encouraging user to use clocking block if possible for their SVA’s clocks (for the assertions that they will code under their interface).
As clocking block will help to ensure the proper/robust modeling of hold and setup when driving/monitor the signal using non-blocking assignment. And for the blocking assignment user shall not use the clocking block to sample the value.

Will you please share me any of your blog or paper that you describe the danger of using clocking block?

Thanks,
Baser

In reply to dave_59:

Thanks Dave!

In reply to basheer55:

Sorry, it’s been a busy week for me. I meant to say program blocks, not clocking blocks. I have corrected the post above.

No problem and Thanks, Dave!

-Baser