忽略列表大小的软约束。为什么?
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()
的约束。
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()
的约束。