推荐答案
测试一下
题目
关于下面约束,说法正确的是() constraint ST{ (a==0)-> (b==0) }
C.如果b==0,则a==0
参考答案与知识点
参考答案
正确选项是 B。
该约束 `constraint ST{ (a==0)-> (b==0) }` 使用 SystemVerilog 蕴含操作符 `->`,其逻辑等价于 `!(a==0) || (b==0)`,即 `a!=0` 或 `b==0`。这意味着:当 `a==0` 时,`b` 必须为 0;当 `a!=0` 时,`b` 无限制(可以是 0 或非 0)。
选项 A(如果 `a!=0`,则 `b!=0`)错误:因为 `a!=0` 时约束自动满足,`b` 可以是 0,不必非 0。
选项 B(如果 `b!=0`,则 `a!=0`)正确:如果 `b!=0`,要满足 `a!=0 || b==0`,由于 `b==0` 为假,则必须 `a!=0` 为真,即 `a!=0`。注意题干选项 B 写的是“如果 b!=0,则 a!=0”,与答案一致。
选项 C(如果 `b==0`,则 `a==0`)错误:`b==0` 时,约束对 `a` 无要求,`a` 可以是任意值。
易错点:误解蕴含关系为双向等价;混淆逻辑蕴含与 if-else 语法。
涉及知识点
- 蕴含操作符 -> 的语义与逻辑等价
- 约束求解中条件分支的理解
- 逆否命题的推导
- SystemVerilog 约束基本语法