1

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

我有这个代码:

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

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

keep soft m.size() == 3;

但我仍然得到空列表。这是为什么?我预计后面的软约束会成立。

4

1 回答 1

5

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

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

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

于 2015-09-20T10:16:05.580 回答