// property ::=
// if (expression_or_dist) property_expr1
//. else property_expr2
// **** following is illegal
// you have
A_property |-> b_property
// above is not a property.
// study the syntax and operators for properties & sequences
property data_check; // **** following is illegal
logic [15:0] temp_data1, temp_data2;
@(clk) (@rose(write_cycle),
if (condition1)
temp_data1 = //something
else if (condition2)
temp_data2 = //something
else
//something else
) |->
first_match(##[1:5] signal_to_check == write_data) ##1
((signal_to_check == write_data)[*1:$] ##1 $rose(write_cycle));
endproperty
I have the below assertion for signals that checks that the value of a signal corresponding to an address remains same until next write to the same address is detected:
Now we have some registers which appear as single registers but the can have 2 types of data namely FSP0 data and FSP1 data. On the top module this appears as an 8bit signal but it can either have FSP0 or FSP1 data. This selection is done by specifying the FSP from another register. Suppose we have an FSP0 data currently in the register but if I select FSP1, then immediately FSP1 data will appear on that 16 bit register. So I have modified the above assertion as shown below:
address1 and address2 are the addresses for FSP0 and FSP1 data respectively which can appear in signal_to_check_temp based on what is selected with the fsp_select register. But this assertion fails. As shown above I am trying to store the FSP0 and FSP1 data in local variables so that I can compare with them.
In reply to atanu.biswas:
I generally provide guidelines. Your issue is too specific for me to follow. I suggest that you discuss this with a colleague in your organization.
Ben