System Verilog: I Am Confused About the $Stable Statement

I understand that the $stable(expression) statement returns 'True', if the expression being evaluated has the same value as in the previous clock cycle. However, I don't understand why the following is being said in most learning materials:

assert property(@(posedge clk) enable == 0 |=> $stable(data));

states that data shouldn’t change whilst enable is 0.

As I have proved it, because |=> is being used, this will not work for the following example:

enable 1110000111

data__ ABCAAAABB

assert ______X___ 

(where A, B and C are some values of the data bus, and X is the point where the assertion would fail)

As you can see, the data has the value A while enable = 0, so it remains stable. But the assertion would not work as desired, because the data changes from A to B at the same time that enable changes from 0 to 1.

So my question is, how would you really implement or code the expression the data shouldn't change while enable is 0.?

Thanks in advance.

1 Answer

Maybe you are thinking of

assert property(@(posedge clk) (enable == 0)[*2] |-> $stable(data));

This means for two consecutive cycles when enable==0, data should not change.

I think "the desired behavior" of the original assertion is not very clear. The state of enable is one clock cycle and $stable is a condition evaluated over 2 clock cycles. There is a similar argument if overlapping implication |->was used. So the question becomes what happens if (enable==0) is true for only one clock cycle? How do you want stability of data defined?

2

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Maya Lin-Takahashi

Maya Lin-Takahashi

Consumer Tech & Gadget Reviewer

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.

Share this article
Twitter Facebook Pinterest