在e / Specman中汇总列表项的最佳方法

时间:2014-05-13 08:37:45

标签: specman e

我创建了一个结构列表,我喜欢将每个结构中满足特定条件的字段的值相加。 例如:

struct packet {
   val:int;
   cond:bool;
};
l:list of packet;

当我写下以下内容时:

keep l.all(it.cond).sum(it.val) == 1000;
I get an error: GEN_NO_GENERATABLE_NOTIF.

当我定义结果变量时:

sum_val : int;
keep sum_val == 100;

并将约束更改为:     保持l.all(it.cond).sum(it.val)== sum_val;

我感到矛盾!

如何让它发挥作用?

2 个答案:

答案 0 :(得分:3)

您应该使用list伪方法“sum”和三元操作:

keep l.sum(it.cond ? It.val : 0) == 1000

答案 1 :(得分:0)

从问题看来,您似乎想要对现有列表中的某些元素求和,而不是生成新元素。在这种情况下,使用简单: var sum:int = l.all(it.cond).sum(it.val);