Specman 似乎忽略了对列表大小的限制。这种行为有解释吗?
我有这个代码:
m:list of uint;
keep soft m == {};
在我的测试中,我有这个约束:
keep soft m.size() == 3;
但我仍然得到空列表。这是为什么?我预计后面的软约束会成立。
在Inteligen 用户指南中有一个关于List Assignment的部分。它提到当您有类型约束时,不会生成list1 == read_only(list2)
大小和元素。list1
这意味着list1.size()
不强制执行任何约束。
在你的情况下,你正在做同样的事情。即使您没有read_only(...)
明确写入,{}
也是一个常量,因此您基本上是将空列表分配给m
. 正如用户指南所说,生成器不会强制执行最后一个约束。要看到这种情况,您可以soft
从两个约束中删除修饰符,您会看到您没有收到任何矛盾错误。
如果您将初始约束 ( soft m == {}
) 更改为soft m.size() == 0
您得到预期的行为,即列表有 3 个元素。这是因为您不再进行列表分配,因此m.size()
将强制执行约束。