忽略列表大小的软约束。为什么?

soft constraint on list size is ignored. why?

Specman 似乎忽略了对列表大小的限制。对这种行为有解释吗?

我有这个代码:

m:list of uint;
keep soft m == {};

在我的测试中我有这个约束:

keep soft m.size() == 3;

但我仍然得到空列表。这是为什么?我希望后面的软约束能够保持。

Inteligen 用户指南 中有一节是关于 列表分配 的。它提到当你有一个 list1 == read_only(list2) 类型的约束时,不会生成 list1 的大小和元素。这意味着不强制执行对 list1.size() 的任何约束。

在你的情况下,你正在做同样的事情。即使您没有明确写入 read_only(...){} 也是一个常量,因此您基本上是将空列表分配给 m。正如用户指南所说,生成器不会强制执行最后一个约束。要查看是否是这种情况,您可以从两个约束中删除 soft 修饰符,您会发现没有任何矛盾错误。

如果您将初始约束 (soft m == {}) 更改为 soft m.size() == 0,您将获得预期的行为,即列表包含 3 个元素。这是因为您不再进行列表分配,因此将强制执行对 m.size() 的约束。