Constraint Override

Hi All,

I have a class which is defined as follows:


class eth_pkt_c;

  //all the variables and enum declarations

  //constraints
  constraint et_frame_size_type_c {
    solve et_frame_type before et_frame_size_type;
    (et_frame_type == BASIC || et_frame_type == Q_TAGGED) ->  et_frame_size_type dist { SHORT := 333, MEDIUM:= 333, LONG:= 331,
                                                                                       UNDERSIZE:= 1, JUMBOSIZE := 1, RESERVED := 1};
    (et_frame_type == JUMBO)    -> et_frame_size_type == JUMBOSIZE ;
    (et_frame_type == PAUSE)    -> et_frame_size_type == SHORT_64 ;
  }

  constraint et_length_type_value_c {
    solve et_frame_type before et_length_value;
    solve et_frame_type before et_type_value;
    solve et_frame_type before et_frame_size_type;
    solve et_frame_size_type before et_length_value;
    solve et_frame_size_type before et_type_value;

    (et_frame_type == PAUSE && et_frame_size_type == SHORT_64)  -> et_type_value == 16'h8808 && et_length_value == 46;
    (et_frame_type      == Q_TAGGED)  -> et_type_value == 16'h8100;
    (et_frame_type      == JUMBO)     -> et_type_value == 16'h8870;

    (et_frame_size_type == UNDERSIZE) -> et_length_value inside { [ 1 : 45 ] };
    (et_frame_size_type == SHORT )    -> et_length_value inside { [ 46 : 256 ] };
    (et_frame_size_type == MEDIUM)    -> et_length_value inside { [ 257 : 1024 ] };
    (et_frame_size_type == LONG)      -> et_length_value inside { [ 1025 : 1500 ] } ;
    (et_frame_size_type == JUMBOSIZE) -> et_length_value inside { [1537 : 9000] };
    (et_frame_size_type == RESERVED)  -> et_length_value inside { [1501 : 1536] };
    (et_frame_size_type == OVERSIZE)  -> et_length_value inside { [ 10203 : 10240 ] };

  }

endclass

I have extended the above class and added a new constraint as shown below:


class eth_modified_pkt_c extends eth_pkt_c;
 
  constraint et_frame_size_type_new_c {
    solve et_frame_type before et_frame_size_type;
    (et_frame_type == BASIC || et_frame_type == Q_TAGGED) ->  !(et_frame_size_type inside {RESERVED, JUMBOSIZE, UNDERSIZE, OVERSIZE});
  }

endclass : eth_modified_pkt_c

Now I am using this new class “eth_modified_pkt_c” in my sequences. But still frame_size_type = RESERVED appears. I am not able to understand the issue here. Could it be some tool bug.

PS : et_frame_type and et_frame_size_type are enums

In reply to atanu.biswas:

Please use code tags making your code easier to read. I have added them for you.

It isn’t clear what your issue is. Your additional constraint doesn’t exclude the RESERVED frame_type_size, it is only excluded when et_frame_type is BASIC or Q_TAGGED. If you have other types, you can still get RESERVED.

You should post a complete runnable example which demonstrates your issue.