Specman e: Is there a way to know how many values there is in an enumerated type?

375 Views Asked by At

I need to know how many values there is in an enumerated type in my verification environment. E.g.:

type my_type: [a, b, c, d];

I there a way to check on the fly that there 4 different values in the my_type?

Thank you for your help

3

There are 3 best solutions below

0
Tudor Timi On BEST ANSWER

There's an all_values(...) pseudo-routine that returns all possible values of a scalar type. You can use this to get the number of enum literals:

assert all_values(my_type).size() == 4;
0
Yuri Tsoglin On

Besides what Tudor suggested, another way is to use set_of_values() pseudo-routine that returns a set (rather than a list) of all values:

set_of_values(my_type).uint_size()

In a way, using set_of_values() is better because all_values() creates a new list, which usually consumes more memory than a set. uint_size() returns the size of the set as uint. There is also size() but it returns int(bits: *), so it's good enough to use uint_size() in this case, because there can never be more than MAX_UINT items in an enumerated type.

0
user3467290 On

also - set_of_values() return 'set', which you can inquire for the type smallest/largest value, and its range.

For example:

 var x := set_of_values(my_type).uint_max();

 keep y ==  set_of_values(my_type).uint_max().as_a(my_type).as_a(my_type);

 print set_of_values(my_type).uint_min().as_a(my_type);