Specman e:如何约束列表列表中值的分布?

时间:2014-11-24 15:50:13

标签: constraints specman e

我有my_list(结构列表)以这种方式定义:

struct my_struct {
    comparator[2] : list of int;
    something_else[2] : list of uint;
};

my_list[10] : list of my_struct;

我需要约束比较器[0]和比较器[1]的值的分布(两者的分布相同),如下所示:

my_list[10] : list of my_struct;
keep soft for each (elem) in my_list {
   soft elem.comparator[0] select {
      30: [-1000 .. -50]; -- Big negative values
      40: [-49 ..49]; -- Medium values
      30: [50..1000]; -- Big positive values           
    };
    // Same for elem.comparator[1]
 };

我得到的编译错误:

*** Error: Unrecognized exp
    [Unrecognized expression 'elem.comparator[0] select {30:
[-1000..-50];40: [-49..49];30: [50..1000];}']
                at line
...
       soft elem.comparator[0] select {

如何约束驻留在列表列表中的值的分布? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你有soft两次,但这不是问题。您忘了在==之前加select。我会这样写:

  keep for each (elem) in my_list {
    soft elem.comparator[0] == select {
      30: [-1000 .. -50]; -- Big negative values
      40: [-49 ..49]; -- Medium values
      30: [50..1000]; -- Big positive values           
    };
    // Same for elem.comparator[1]
  };

或者你可以做keep soft for each ...,在你的情况下可能更干净。您甚至可以将soft留在那里,虽然它看起来有点难看,IMO。