推荐答案
测试一下
题目
class C1;
A.m>=10
B.m<=10
C.m=10
D.解约束失败
参考答案与知识点
参考答案
正确答案是A。派生类C2中定义了与基类C1同名的约束c1_cons,根据SystemVerilog的约束覆盖规则,派生类中的约束会完全覆盖基类中的同名约束,而不是合并。因此,基类中的约束`m<=10`被忽略,仅保留派生类中的约束`m>=10`。由于`m`是`rand int`类型,没有其他约束限制,随机化时`m`可以在满足`m>=10`的范围内取值(如10, 11, 100等),不会导致解约束失败。选项B(m<=10)是基类约束,因覆盖而无效;选项C(m=10)只有在两个约束同时生效且取交集时才会得到,但此处是覆盖而非叠加;选项D(解约束失败)错误,因为存在可行解。
涉及知识点
- SystemVerilog约束覆盖
- 类的继承与约束同名覆盖规则
- 约束求解与随机化